@@ -190,3 +190,106 @@ resource "kubernetes_manifest" "metrics_deployment" {
190
190
191
191
depends_on = [kubernetes_namespace . metrics , kubernetes_secret . metrics_secrets ]
192
192
}
193
+
194
+ # Resources for collecting LLVM operational metrics data
195
+
196
+ # Service accounts and bindings to grant access to the
197
+ # BigQuery API for our cronjob
198
+ resource "google_service_account" "operational_metrics_gsa" {
199
+ account_id = " operational-metrics-gsa"
200
+ display_name = " Operational Metrics GSA"
201
+ }
202
+
203
+ resource "google_project_iam_binding" "bigquery_jobuser_binding" {
204
+ project = google_service_account. operational_metrics_gsa . project
205
+ role = " roles/bigquery.jobUser"
206
+
207
+ members = [
208
+ " serviceAccount:${ google_service_account . operational_metrics_gsa . email } " ,
209
+ ]
210
+
211
+ depends_on = [google_service_account . operational_metrics_gsa ]
212
+ }
213
+
214
+ resource "kubernetes_namespace" "operational_metrics" {
215
+ metadata {
216
+ name = " operational-metrics"
217
+ }
218
+ provider = kubernetes. llvm-premerge-us-central
219
+ }
220
+
221
+ resource "kubernetes_service_account" "operational_metrics_ksa" {
222
+ metadata {
223
+ name = " operational-metrics-ksa"
224
+ namespace = " operational-metrics"
225
+ annotations = {
226
+ " iam.gke.io/gcp-service-account" = google_service_account.operational_metrics_gsa.email
227
+ }
228
+ }
229
+
230
+ depends_on = [kubernetes_namespace . operational_metrics ]
231
+ }
232
+
233
+ resource "google_service_account_iam_binding" "workload_identity_binding" {
234
+ service_account_id = google_service_account. operational_metrics_gsa . name
235
+ role = " roles/iam.workloadIdentityUser"
236
+
237
+ members = [
238
+ " serviceAccount:${ google_service_account . operational_metrics_gsa . project } .svc.id.goog[operational-metrics/operational-metrics-ksa]" ,
239
+ ]
240
+
241
+ depends_on = [
242
+ google_service_account . operational_metrics_gsa ,
243
+ kubernetes_service_account . operational_metrics_ksa ,
244
+ ]
245
+ }
246
+
247
+ # The container for scraping LLVM commits needs persistent storage
248
+ # for a local check-out of llvm/llvm-project
249
+ resource "kubernetes_persistent_volume_claim" "operational_metrics_pvc" {
250
+ metadata {
251
+ name = " operational-metrics-pvc"
252
+ namespace = " operational-metrics"
253
+ }
254
+
255
+ spec {
256
+ access_modes = [" ReadWriteOnce" ]
257
+ resources {
258
+ requests = {
259
+ storage = " 20Gi"
260
+ }
261
+ }
262
+ storage_class_name = " standard-rwo"
263
+ }
264
+
265
+ depends_on = [kubernetes_namespace . operational_metrics ]
266
+ }
267
+
268
+ resource "kubernetes_secret" "operational_metrics_secrets" {
269
+ metadata {
270
+ name = " operational-metrics-secrets"
271
+ namespace = " operational-metrics"
272
+ }
273
+
274
+ data = {
275
+ " github-token" = data.google_secret_manager_secret_version.metrics_github_pat.secret_data
276
+ " grafana-api-key" = data.google_secret_manager_secret_version.metrics_grafana_api_key.secret_data
277
+ " grafana-metrics-userid" = data.google_secret_manager_secret_version.metrics_grafana_metrics_userid.secret_data
278
+ }
279
+
280
+ type = " Opaque"
281
+ provider = kubernetes. llvm-premerge-us-central
282
+ depends_on = [kubernetes_namespace . operational_metrics ]
283
+ }
284
+
285
+ resource "kubernetes_manifest" "operational_metrics_cronjob" {
286
+ manifest = yamldecode (file (" operational_metrics_cronjob.yaml" ))
287
+ provider = kubernetes. llvm-premerge-us-central
288
+
289
+ depends_on = [
290
+ kubernetes_namespace . operational_metrics ,
291
+ kubernetes_persistent_volume_claim . operational_metrics_pvc ,
292
+ kubernetes_secret . operational_metrics_secrets ,
293
+ kubernetes_service_account . operational_metrics_ksa ,
294
+ ]
295
+ }
0 commit comments