@@ -25,11 +25,11 @@ SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}")
25
25
. " ${SCRIPT_DIR} /../lib.sh"
26
26
27
27
function usage() {
28
- echo " usage: $0 [repo...]" > /dev/stderr
29
- echo " example:" > /dev/stderr
30
- echo " $0 # do all projects" > /dev/stderr
31
- echo " $0 k8s-infra-node-e2e-project # just do one" > /dev/stderr
32
- echo > /dev/stderr
28
+ echo " usage: $0 [repo...]" > /dev/stderr
29
+ echo " example:" > /dev/stderr
30
+ echo " $0 # do all projects" > /dev/stderr
31
+ echo " $0 k8s-infra-node-e2e-project # just do one" > /dev/stderr
32
+ echo > /dev/stderr
33
33
}
34
34
35
35
# # projects hosting prow build clusters managed by sig-k8s-infra
@@ -47,170 +47,171 @@ mapfile -t E2E_PROJECTS < <(k8s_infra_projects "e2e")
47
47
readonly E2E_PROJECTS
48
48
49
49
function ensure_e2e_project() {
50
- if [ $# != 1 ] || [ -z " $1 " ]; then
51
- echo " ${FUNCNAME[0]} (project) requires 1 argument" >&2
52
- return 1
53
- fi
54
- local prj=" ${1} "
55
-
56
- ensure_project " ${prj} "
57
-
58
- local project_number
59
- project_number=$( gcloud projects describe " ${prj} " --format=' value(projectNumber)' )
60
-
61
- color 6 " Ensure stale role bindings have been removed from e2e project: ${prj} "
62
- (
63
- echo " no stale bindings slated for removal"
64
- ) 2>&1 | indent
65
-
66
- color 6 " Ensuring only APIs necessary for kubernetes e2e jobs to use e2e project: ${prj} "
67
- ensure_only_services " ${prj} " \
68
- cloudkms.googleapis.com \
69
- compute.googleapis.com \
70
- container.googleapis.com \
71
- containerregistry.googleapis.com \
72
- file.googleapis.com \
73
- logging.googleapis.com \
74
- monitoring.googleapis.com \
75
- storage-component.googleapis.com
76
-
77
- # TODO: this is what prow.k8s.io uses today, but seems overprivileged, we
78
- # could consider using a more limited custom IAM role instead
79
- color 6 " Empower prow-build service account to edit e2e project: ${prj} "
80
- ensure_project_role_binding " ${prj} " \
81
- " serviceAccount:${PROW_BUILD_SVCACCT} " \
82
- " roles/editor"
83
-
84
- # TODO: Remove this binding and clean up permissions in projects
85
- # This permission is superseded by roles/cloudkms.admin below
86
- # Ensure GCP CSI driver tests can manage KMS keys
87
- ensure_project_role_binding " ${prj} " \
88
- " serviceAccount:${PROW_BUILD_SVCACCT} " \
89
- " roles/cloudkms.cryptoKeyEncrypterDecrypter"
90
-
91
- # Ensure GCP Default Compute Service Account can administer KMS keys
92
- ensure_project_role_binding " ${prj} " \
93
- " serviceAccount:${PROW_BUILD_SVCACCT} " \
94
- " roles/cloudkms.admin"
95
-
96
- # TODO: Remove this binding and clean up permissions in projects
97
- # Ensure GCP Default Compute Service Account can manage KMS keys
98
- ensure_project_role_binding " ${prj} " \
99
- " serviceAccount:${project_number} [email protected] " \
100
- " roles/cloudkms.cryptoKeyEncrypterDecrypter"
101
-
102
- # Ensure GCP Default Compute Engine Service Agent Account can manage KMS
103
- # keys
104
- ensure_project_role_binding " ${prj} " \
105
- " serviceAccount:service-${project_number} @compute-system.iam.gserviceaccount.com" \
106
- " roles/cloudkms.cryptoKeyEncrypterDecrypter"
107
-
108
- # TODO: Remove this binding and clean up permissions in projects
109
- # Ensure GCP CSI driver tests can use prow-build service account to
110
- # act as all other service accounts (eg: Compute Engine default service account)
111
- ensure_project_role_binding " ${prj} " \
112
- " serviceAccount:${PROW_BUILD_SVCACCT} " \
113
- " roles/iam.serviceAccountUser"
114
-
115
- # TODO: this is what prow.k8s.io uses today, but seems overprivileged, we
116
- # could consider using a more limited custom IAM role instead
117
- color 6 " Empower boskos-janitor service account to clean e2e project: ${prj} "
118
- ensure_project_role_binding " ${prj} " \
119
- " serviceAccount:${BOSKOS_JANITOR_SVCACCT} " \
120
- " roles/editor"
121
-
122
- color 6
" Empower [email protected] to admin e2e project: ${prj} "
50
+ if [ $# != 1 ] || [ -z " $1 " ]; then
51
+ echo " ${FUNCNAME[0]} (project) requires 1 argument" >&2
52
+ return 1
53
+ fi
54
+ local prj=" ${1} "
55
+
56
+ ensure_project " ${prj} "
57
+
58
+ local project_number
59
+ project_number=$( gcloud projects describe " ${prj} " --format=' value(projectNumber)' )
60
+
61
+ color 6 " Ensure stale role bindings have been removed from e2e project: ${prj} "
62
+ (
63
+ echo " no stale bindings slated for removal"
64
+ ) 2>&1 | indent
65
+
66
+ color 6 " Ensuring only APIs necessary for kubernetes e2e jobs to use e2e project: ${prj} "
67
+ ensure_only_services " ${prj} " \
68
+ artifactregistry.googleapis.com \
69
+ cloudkms.googleapis.com \
70
+ compute.googleapis.com \
71
+ container.googleapis.com \
72
+ containerregistry.googleapis.com \
73
+ file.googleapis.com \
74
+ logging.googleapis.com \
75
+ monitoring.googleapis.com \
76
+ storage-component.googleapis.com
77
+
78
+ # TODO: this is what prow.k8s.io uses today, but seems overprivileged, we
79
+ # could consider using a more limited custom IAM role instead
80
+ color 6 " Empower prow-build service account to edit e2e project: ${prj} "
81
+ ensure_project_role_binding " ${prj} " \
82
+ " serviceAccount:${PROW_BUILD_SVCACCT} " \
83
+ " roles/editor"
84
+
85
+ # TODO: Remove this binding and clean up permissions in projects
86
+ # This permission is superseded by roles/cloudkms.admin below
87
+ # Ensure GCP CSI driver tests can manage KMS keys
88
+ ensure_project_role_binding " ${prj} " \
89
+ " serviceAccount:${PROW_BUILD_SVCACCT} " \
90
+ " roles/cloudkms.cryptoKeyEncrypterDecrypter"
91
+
92
+ # Ensure GCP Default Compute Service Account can administer KMS keys
93
+ ensure_project_role_binding " ${prj} " \
94
+ " serviceAccount:${PROW_BUILD_SVCACCT} " \
95
+ " roles/cloudkms.admin"
96
+
97
+ # TODO: Remove this binding and clean up permissions in projects
98
+ # Ensure GCP Default Compute Service Account can manage KMS keys
99
+ ensure_project_role_binding " ${prj} " \
100
+ " serviceAccount:${project_number} [email protected] " \
101
+ " roles/cloudkms.cryptoKeyEncrypterDecrypter"
102
+
103
+ # Ensure GCP Default Compute Engine Service Agent Account can manage KMS
104
+ # keys
105
+ ensure_project_role_binding " ${prj} " \
106
+ " serviceAccount:service-${project_number} @compute-system.iam.gserviceaccount.com" \
107
+ " roles/cloudkms.cryptoKeyEncrypterDecrypter"
108
+
109
+ # TODO: Remove this binding and clean up permissions in projects
110
+ # Ensure GCP CSI driver tests can use prow-build service account to
111
+ # act as all other service accounts (eg: Compute Engine default service account)
112
+ ensure_project_role_binding " ${prj} " \
113
+ " serviceAccount:${PROW_BUILD_SVCACCT} " \
114
+ " roles/iam.serviceAccountUser"
115
+
116
+ # TODO: this is what prow.k8s.io uses today, but seems overprivileged, we
117
+ # could consider using a more limited custom IAM role instead
118
+ color 6 " Empower boskos-janitor service account to clean e2e project: ${prj} "
119
+ ensure_project_role_binding " ${prj} " \
120
+ " serviceAccount:${BOSKOS_JANITOR_SVCACCT} " \
121
+ " roles/editor"
122
+
123
+ color 6
" Empower [email protected] to admin e2e project: ${prj} "
124
+ ensure_project_role_binding " ${prj} " \
125
+
126
+ " roles/owner"
127
+
128
+ # NB: prow.viewer role is defined in ensure-organization.sh, that needs to have been run first
129
+ color 6
" Empower [email protected] to view specific resources in e2e project: ${prj} "
130
+ ensure_project_role_binding " ${prj} " \
131
+
132
+ " $( custom_org_role_name " prow.viewer" ) "
133
+
134
+ if [[ " ${prj} " =~ k8s-infra-e2e.* scale ]]; then
135
+ color 6
" Empower [email protected] to admin e2e project: ${prj} "
123
136
ensure_project_role_binding " ${prj} " \
124
- " group:k8s-infra-prow [email protected] " \
137
+ " group:k8s-infra-sig-scalability [email protected] " \
125
138
" roles/owner"
139
+ fi
140
+
141
+ color 6 " Ensure prow-build prowjobs are able to ssh to instances in e2e project: ${prj} "
142
+ prow_build_ssh_pubkey=" prow:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCmYxHh/wwcV0P1aChuFLpl28w6DFyc7G5Xrw1F8wH1Re9AdxyemM2bTZ/PhsP3u9VDnNbyOw3UN00VFdumkFLjLf1WQ7Q6rZDlPjlw7urBIvAMqUecY6ae1znqsZ0dMBxOuPXHznlnjLjM5b7O7q5WsQMCA9Szbmz6DsuSyCuX0It2osBTN+8P/Fa6BNh3W8AF60M7L8/aUzLfbXVS2LIQKAHHD8CWqvXhLPuTJ03iSwFvgtAK1/J2XJwUP+OzAFrxj6A9LW5ZZgk3R3kRKr0xT/L7hga41rB1qy8Uz+Xr/PTVMNGW+nmU4bPgFchCK0JBK7B12ZcdVVFUEdpaAiKZ prow"
143
+ k8s_prow_builds_ssh_pubkey=" prow:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+/ZdafYYrJknk08g98sYS1Nr+aVdAnhHpQyXBx7EAT9pazCGaoiYnXgC82FAfTVMqdsqnIiP+7FgQTFLNYvBt8KsBd9qCkuMh/Q1QYVh4kfjjuGUrjfo020pxGSvp+67kbxm6lubaio9AgJ9XXE+SP1AYbyKTvXEzk5Tu7gGnRt3OrjVB+9eqTnVJOjS/BAOTJV5DWQ7xMubHlT9NmQ/S2hotMoiJJybYGUalOfcf8ZkyspU2oR+x13DCfjvFdzF4U0fb/uvTJZeu22w887M5y0YQulFY2LIeoAUE4XwoOv0nxzwbtZpqPHwtfLgq3G906KHW5e6slXu8kGda656n prow"
144
+ ssh_keys_expected=(
145
+ " ${k8s_prow_builds_ssh_pubkey} "
146
+ " ${prow_build_ssh_pubkey} "
147
+ # TODO(amwat,spiffxp): something is adding an extra prow: prefix, it is
148
+ # unclear where in prow->kubetest2->cluster/log-dump.sh->`gcloud ssh`
149
+ # this is happening
150
+ " prow:${k8s_prow_builds_ssh_pubkey} "
151
+ " prow:${prow_build_ssh_pubkey} "
152
+ )
153
+
154
+ # append to project-wide ssh-keys metadata if not present
155
+ ssh_keys_before=" ${TMPDIR} /ssh-keys.before.txt"
156
+ ssh_keys_after=" ${TMPDIR} /ssh-keys.after.txt"
157
+ gcloud compute project-info describe --project=" ${prj} " \
158
+ --format=' value(commonInstanceMetadata.items.filter(key:ssh-keys).extract(value).flatten())' |
159
+ sed -e ' /^$/d' > " ${ssh_keys_before} "
160
+
161
+ cp " ${ssh_keys_before} " " ${ssh_keys_after} "
162
+
163
+ if [ " ${K8S_INFRA_ENSURE_E2E_PROJECTS_RESETS_SSH_KEYS:- " false" } " == " true" ]; then
164
+ printf ' %s\n' " ${ssh_keys_expected[@]} " > " ${ssh_keys_after} "
165
+ else
166
+ for ssh_key in " ${ssh_keys_expected[@]} " ; do
167
+ if ! grep -q " ${ssh_key} " " ${ssh_keys_before} " ; then
168
+ echo " ${ssh_key} " >> " ${ssh_keys_after} "
169
+ fi
170
+ done
171
+ fi
126
172
127
- # NB: prow.viewer role is defined in ensure-organization.sh, that needs to have been run first
128
- color 6
" Empower [email protected] to view specific resources in e2e project: ${prj} "
129
- ensure_project_role_binding " ${prj} " \
130
-
131
- " $( custom_org_role_name " prow.viewer" ) "
132
-
133
- if [[ " ${prj} " =~ k8s-infra-e2e.* scale ]]; then
134
- color 6
" Empower [email protected] to admin e2e project: ${prj} "
135
- ensure_project_role_binding " ${prj} " \
136
-
137
- " roles/owner"
138
- fi
139
-
140
- color 6 " Ensure prow-build prowjobs are able to ssh to instances in e2e project: ${prj} "
141
- prow_build_ssh_pubkey=" prow:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCmYxHh/wwcV0P1aChuFLpl28w6DFyc7G5Xrw1F8wH1Re9AdxyemM2bTZ/PhsP3u9VDnNbyOw3UN00VFdumkFLjLf1WQ7Q6rZDlPjlw7urBIvAMqUecY6ae1znqsZ0dMBxOuPXHznlnjLjM5b7O7q5WsQMCA9Szbmz6DsuSyCuX0It2osBTN+8P/Fa6BNh3W8AF60M7L8/aUzLfbXVS2LIQKAHHD8CWqvXhLPuTJ03iSwFvgtAK1/J2XJwUP+OzAFrxj6A9LW5ZZgk3R3kRKr0xT/L7hga41rB1qy8Uz+Xr/PTVMNGW+nmU4bPgFchCK0JBK7B12ZcdVVFUEdpaAiKZ prow"
142
- k8s_prow_builds_ssh_pubkey=" prow:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+/ZdafYYrJknk08g98sYS1Nr+aVdAnhHpQyXBx7EAT9pazCGaoiYnXgC82FAfTVMqdsqnIiP+7FgQTFLNYvBt8KsBd9qCkuMh/Q1QYVh4kfjjuGUrjfo020pxGSvp+67kbxm6lubaio9AgJ9XXE+SP1AYbyKTvXEzk5Tu7gGnRt3OrjVB+9eqTnVJOjS/BAOTJV5DWQ7xMubHlT9NmQ/S2hotMoiJJybYGUalOfcf8ZkyspU2oR+x13DCfjvFdzF4U0fb/uvTJZeu22w887M5y0YQulFY2LIeoAUE4XwoOv0nxzwbtZpqPHwtfLgq3G906KHW5e6slXu8kGda656n prow"
143
- ssh_keys_expected=(
144
- " ${k8s_prow_builds_ssh_pubkey} "
145
- " ${prow_build_ssh_pubkey} "
146
- # TODO(amwat,spiffxp): something is adding an extra prow: prefix, it is
147
- # unclear where in prow->kubetest2->cluster/log-dump.sh->`gcloud ssh`
148
- # this is happening
149
- " prow:${k8s_prow_builds_ssh_pubkey} "
150
- " prow:${prow_build_ssh_pubkey} "
151
- )
152
-
153
- # append to project-wide ssh-keys metadata if not present
154
- ssh_keys_before=" ${TMPDIR} /ssh-keys.before.txt"
155
- ssh_keys_after=" ${TMPDIR} /ssh-keys.after.txt"
156
- gcloud compute project-info describe --project=" ${prj} " \
157
- --format=' value(commonInstanceMetadata.items.filter(key:ssh-keys).extract(value).flatten())' \
158
- | sed -e ' /^$/d' > " ${ssh_keys_before} "
159
-
160
- cp " ${ssh_keys_before} " " ${ssh_keys_after} "
161
-
162
- if [ " ${K8S_INFRA_ENSURE_E2E_PROJECTS_RESETS_SSH_KEYS:- " false" } " == " true" ]; then
163
- printf ' %s\n' " ${ssh_keys_expected[@]} " > " ${ssh_keys_after} "
164
- else
165
- for ssh_key in " ${ssh_keys_expected[@]} " ; do
166
- if ! grep -q " ${ssh_key} " " ${ssh_keys_before} " ; then
167
- echo " ${ssh_key} " >> " ${ssh_keys_after} "
168
- fi
169
- done
170
- fi
171
-
172
- if ! diff " ${ssh_keys_before} " " ${ssh_keys_after} " > /dev/null; then
173
- gcloud compute project-info add-metadata --project=" ${prj} " \
174
- --metadata-from-file ssh-keys=" ${ssh_keys_after} "
175
- diff_colorized " ${ssh_keys_before} " " ${ssh_keys_after} "
176
- fi
173
+ if ! diff " ${ssh_keys_before} " " ${ssh_keys_after} " > /dev/null; then
174
+ gcloud compute project-info add-metadata --project=" ${prj} " \
175
+ --metadata-from-file ssh-keys=" ${ssh_keys_after} "
176
+ diff_colorized " ${ssh_keys_before} " " ${ssh_keys_after} "
177
+ fi
177
178
}
178
179
179
180
# Disable OS Login at the project level
180
181
# $1 The GCP Project
181
182
function disable_project_oslogin() {
182
- if [ $# != 1 ] || [ -z " $1 " ]; then
183
- echo " ${FUNCNAME[0]} (project) requires 1 argument" >&2
184
- return 1
185
- fi
186
-
187
- local prj=" ${1} "
188
-
189
- enabled=$( gcloud compute project-info describe --project=" ${prj} " \
190
- --format=' value(commonInstanceMetadata.items[enable-oslogin])' )
191
- if [ " ${enabled} " == " TRUE" ]; then
192
- gcloud compute project-info --project=" ${prj} " remove-metadata --keys " enable-oslogin"
193
- fi
183
+ if [ $# != 1 ] || [ -z " $1 " ]; then
184
+ echo " ${FUNCNAME[0]} (project) requires 1 argument" >&2
185
+ return 1
186
+ fi
187
+
188
+ local prj=" ${1} "
189
+
190
+ enabled=$( gcloud compute project-info describe --project=" ${prj} " \
191
+ --format=' value(commonInstanceMetadata.items[enable-oslogin])' )
192
+ if [ " ${enabled} " == " TRUE" ]; then
193
+ gcloud compute project-info --project=" ${prj} " remove-metadata --keys " enable-oslogin"
194
+ fi
194
195
}
195
196
196
197
function ensure_e2e_projects() {
197
- # default to all staging projects
198
- if [ $# = 0 ]; then
199
- set -- " ${E2E_PROJECTS[@]} "
198
+ # default to all staging projects
199
+ if [ $# = 0 ]; then
200
+ set -- " ${E2E_PROJECTS[@]} "
201
+ fi
202
+
203
+ for project in " ${@ } " ; do
204
+ if ! (printf ' %s\n' " ${E2E_PROJECTS[@]} " | grep -q " ^${project} $" ); then
205
+ color 2 " Skipping unrecognized e2e project name: ${project} "
206
+ continue
200
207
fi
201
208
202
- for project in " ${@ } " ; do
203
- if ! (printf ' %s\n' " ${E2E_PROJECTS[@]} " | grep -q " ^${project} $" ); then
204
- color 2 " Skipping unrecognized e2e project name: ${project} "
205
- continue
206
- fi
207
-
208
- color 3 " Configuring e2e project: ${project} "
209
- ensure_e2e_project " ${project} " 2>&1 | indent
209
+ color 3 " Configuring e2e project: ${project} "
210
+ ensure_e2e_project " ${project} " 2>&1 | indent
210
211
211
- # color 3 "Ensuring OS Login is disabled for $project"
212
- # disable_project_oslogin "${project}" 2>&1 | indent
213
- done
212
+ # color 3 "Ensuring OS Login is disabled for $project"
213
+ # disable_project_oslogin "${project}" 2>&1 | indent
214
+ done
214
215
}
215
216
216
217
#
0 commit comments