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