Skip to content

Commit 143fe29

Browse files
committed
[CI] Add terraform resources for deploying a daily cronjob that processes LLVM commit
1 parent 1d9240c commit 143fe29

File tree

3 files changed

+157
-0
lines changed

3 files changed

+157
-0
lines changed

premerge/gke_cluster/main.tf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ resource "google_container_cluster" "llvm_premerge" {
1212
# for adding windows nodes to the cluster.
1313
networking_mode = "VPC_NATIVE"
1414
ip_allocation_policy {}
15+
16+
workload_identity_config {
17+
workload_pool = "llvm-premerge-checks.svc.id.goog"
18+
}
1519
}
1620

1721
resource "google_container_node_pool" "llvm_premerge_linux_service" {
@@ -23,6 +27,10 @@ resource "google_container_node_pool" "llvm_premerge_linux_service" {
2327

2428
node_config {
2529
machine_type = "e2-highcpu-4"
30+
31+
workload_metadata_config {
32+
mode = "GKE_METADATA"
33+
}
2634
# Terraform wants to recreate the node pool everytime whe running
2735
# terraform apply unless we explicitly set this.
2836
# TODO(boomanaiden154): Look into why terraform is doing this so we do

premerge/main.tf

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# operational-metrics-cronjob.yaml
2+
apiVersion: batch/v1
3+
kind: CronJob
4+
metadata:
5+
name: operational-metrics-cronjob
6+
namespace: operational-metrics
7+
spec:
8+
# Midnight PDT
9+
schedule: "0 7 * * *"
10+
timeZone: "Etc/UTC"
11+
concurrencyPolicy: Forbid
12+
jobTemplate:
13+
spec:
14+
template:
15+
spec:
16+
serviceAccountName: operational-metrics-ksa
17+
volumes:
18+
- name: metrics-volume
19+
persistentVolumeClaim:
20+
claimName: operational-metrics-pvc
21+
containers:
22+
- name: process-llvm-commits
23+
image: ghcr.io/llvm/operations-metrics:latest
24+
env:
25+
- name: GITHUB_TOKEN
26+
valueFrom:
27+
secretKeyRef:
28+
name: operational-metrics-secrets
29+
key: github-token
30+
- name: GRAFANA_API_KEY
31+
valueFrom:
32+
secretKeyRef:
33+
name: operational-metrics-secrets
34+
key: grafana-api-key
35+
- name: GRAFANA_METRICS_USERID
36+
valueFrom:
37+
secretKeyRef:
38+
name: operational-metrics-secrets
39+
key: grafana-metrics-userid
40+
volumeMounts:
41+
- name: metrics-volume
42+
mountPath: "/data"
43+
resources:
44+
requests:
45+
cpu: "250m"
46+
memory: "256Mi"
47+
limits:
48+
cpu: "1"
49+
memory: "512Mi"
50+
restartPolicy: OnFailure

0 commit comments

Comments
 (0)