@@ -190,3 +190,107 @@ 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+
226+ annotations = {
227+ " iam.gke.io/gcp-service-account" = google_service_account.operational_metrics_gsa.email
228+ }
229+ }
230+
231+ depends_on = [kubernetes_namespace . operational_metrics ]
232+ }
233+
234+ resource "google_service_account_iam_binding" "workload_identity_binding" {
235+ service_account_id = google_service_account. operational_metrics_gsa . name
236+ role = " roles/iam.workloadIdentityUser"
237+
238+ members = [
239+ " serviceAccount:${ google_service_account . operational_metrics_gsa . project } .svc.id.goog[operational-metrics/operational-metrics-ksa]" ,
240+ ]
241+
242+ depends_on = [
243+ google_service_account . operational_metrics_gsa ,
244+ kubernetes_service_account . operational_metrics_ksa ,
245+ ]
246+ }
247+
248+ # The container for scraping LLVM commits needs persistent storage
249+ # for a locally check-out llvm/llvm-project
250+ resource "kubernetes_persistent_volume_claim" "operational_metrics_pvc" {
251+ metadata {
252+ name = " operational-metrics-pvc"
253+ namespace = " operational-metrics"
254+ }
255+
256+ spec {
257+ access_modes = [" ReadWriteOnce" ]
258+ resources {
259+ requests = {
260+ storage = " 20Gi"
261+ }
262+ }
263+ storage_class_name = " standard-rwo"
264+ }
265+
266+ depends_on = [kubernetes_namespace . operational_metrics ]
267+ }
268+
269+ resource "kubernetes_secret" "operational_metrics_secrets" {
270+ metadata {
271+ name = " operational-metrics-secrets"
272+ namespace = " operational-metrics"
273+ }
274+
275+ data = {
276+ " github-token" = data.google_secret_manager_secret_version.metrics_github_pat.secret_data
277+ " grafana-api-key" = data.google_secret_manager_secret_version.metrics_grafana_api_key.secret_data
278+ " grafana-metrics-userid" = data.google_secret_manager_secret_version.metrics_grafana_metrics_userid.secret_data
279+ }
280+
281+ type = " Opaque"
282+ provider = kubernetes. llvm-premerge-us-central
283+ depends_on = [kubernetes_namespace . operational_metrics ]
284+ }
285+
286+ resource "kubernetes_manifest" "operational_metrics_cronjob" {
287+ manifest = yamldecode (file (" operational_metrics_cronjob.yaml" ))
288+ provider = kubernetes. llvm-premerge-us-central
289+
290+ depends_on = [
291+ kubernetes_namespace . operational_metrics ,
292+ kubernetes_secret . operational_metrics_secrets ,
293+ kubernetes_service_account . operational_metrics_ksa ,
294+ kubernetes_persistent_volume_claim . operational_metrics_pvc ,
295+ ]
296+ }
0 commit comments