@@ -190,3 +190,106 @@ resource "kubernetes_manifest" "metrics_deployment" {
190190
191191 depends_on = [kubernetes_namespace . metrics , kubernetes_secret . metrics_secrets ]
192192}
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