Skip to content

Commit 001ed68

Browse files
committed
Merge branch 'feat/5-Implement-data-isolation-and-multitenancy' of https://github.com/ADORSYS-GIS/observability into feat/5-Implement-data-isolation-and-multitenancy
2 parents e5c8f09 + 94f0f90 commit 001ed68

File tree

3 files changed

+77
-12
lines changed

3 files changed

+77
-12
lines changed

lgtm-stack/terraform/grafana.tf

Lines changed: 72 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,34 @@
3434
# - User is auto-assigned to the Grafana Team. Done.
3535
# ============================================================
3636

37+
# ---- Wait for Grafana to be accessible -----------------------
38+
# The Grafana provider needs the API to be reachable via HTTPS.
39+
# This resource waits for the ingress, certificate, and DNS to be ready
40+
# before Terraform tries to create teams, datasources, and folders.
41+
42+
resource "null_resource" "wait_for_grafana" {
43+
provisioner "local-exec" {
44+
command = <<-EOT
45+
echo "Waiting for Grafana to be accessible at ${var.grafana_url}..."
46+
for i in {1..60}; do
47+
if curl -k -s -o /dev/null -w "%%{http_code}" ${var.grafana_url}/api/health | grep -q "200"; then
48+
echo "✅ Grafana is ready!"
49+
exit 0
50+
fi
51+
echo "Attempt $i/60: Grafana not ready yet, waiting 10s..."
52+
sleep 10
53+
done
54+
echo "❌ ERROR: Grafana did not become accessible after 10 minutes"
55+
exit 1
56+
EOT
57+
}
58+
59+
depends_on = [
60+
helm_release.grafana,
61+
kubernetes_ingress_v1.monitoring_stack
62+
]
63+
}
64+
3765
# ---- Grafana Teams (one per tenant) --------------------------
3866
# Each team is linked to the matching Keycloak group via team_sync.
3967
# Grafana will add any user whose JWT "groups" claim contains the
@@ -44,7 +72,10 @@ resource "grafana_team" "tenants" {
4472

4573
name = "${each.key}-team"
4674

47-
depends_on = [helm_release.grafana]
75+
depends_on = [
76+
helm_release.grafana,
77+
null_resource.wait_for_grafana
78+
]
4879
}
4980

5081
# ---- Tenant Datasources (Loki) --------------------------------
@@ -74,7 +105,10 @@ resource "grafana_data_source" "loki" {
74105
]
75106
}
76107

77-
depends_on = [helm_release.grafana]
108+
depends_on = [
109+
helm_release.grafana,
110+
null_resource.wait_for_grafana
111+
]
78112
}
79113

80114
# ---- Tenant Datasources (Mimir) --------------------------------
@@ -102,7 +136,10 @@ resource "grafana_data_source" "mimir" {
102136
]
103137
}
104138

105-
depends_on = [helm_release.grafana]
139+
depends_on = [
140+
helm_release.grafana,
141+
null_resource.wait_for_grafana
142+
]
106143
}
107144

108145
# ---- Tenant Datasources (Prometheus) --------------------------
@@ -133,7 +170,10 @@ resource "grafana_data_source" "prometheus" {
133170
]
134171
}
135172

136-
depends_on = [helm_release.grafana]
173+
depends_on = [
174+
helm_release.grafana,
175+
null_resource.wait_for_grafana
176+
]
137177
}
138178

139179
# ---- Tenant Datasources (Tempo) --------------------------------
@@ -171,7 +211,10 @@ resource "grafana_data_source" "tempo" {
171211
]
172212
}
173213

174-
depends_on = [helm_release.grafana]
214+
depends_on = [
215+
helm_release.grafana,
216+
null_resource.wait_for_grafana
217+
]
175218
}
176219

177220
# ---- Datasource Permissions ------------------------------------
@@ -191,7 +234,10 @@ resource "grafana_data_source_permission" "loki" {
191234
permission = "Query"
192235
}
193236

194-
depends_on = [helm_release.grafana]
237+
depends_on = [
238+
helm_release.grafana,
239+
null_resource.wait_for_grafana
240+
]
195241
}
196242

197243
resource "grafana_data_source_permission" "mimir" {
@@ -203,7 +249,10 @@ resource "grafana_data_source_permission" "mimir" {
203249
permission = "Query"
204250
}
205251

206-
depends_on = [helm_release.grafana]
252+
depends_on = [
253+
helm_release.grafana,
254+
null_resource.wait_for_grafana
255+
]
207256
}
208257

209258
resource "grafana_data_source_permission" "prometheus" {
@@ -215,7 +264,10 @@ resource "grafana_data_source_permission" "prometheus" {
215264
permission = "Query"
216265
}
217266

218-
depends_on = [helm_release.grafana]
267+
depends_on = [
268+
helm_release.grafana,
269+
null_resource.wait_for_grafana
270+
]
219271
}
220272

221273
resource "grafana_data_source_permission" "tempo" {
@@ -227,7 +279,10 @@ resource "grafana_data_source_permission" "tempo" {
227279
permission = "Query"
228280
}
229281

230-
depends_on = [helm_release.grafana]
282+
depends_on = [
283+
helm_release.grafana,
284+
null_resource.wait_for_grafana
285+
]
231286
}
232287

233288
# ---- Dashboard Folders -----------------------------------------
@@ -240,7 +295,10 @@ resource "grafana_folder" "tenants" {
240295

241296
title = "${title(each.key)} Dashboards"
242297

243-
depends_on = [helm_release.grafana]
298+
depends_on = [
299+
helm_release.grafana,
300+
null_resource.wait_for_grafana
301+
]
244302
}
245303

246304
resource "grafana_folder_permission" "tenants" {
@@ -253,7 +311,10 @@ resource "grafana_folder_permission" "tenants" {
253311
permission = "Edit" # Team members can create and edit dashboards in their folder
254312
}
255313

256-
depends_on = [helm_release.grafana]
314+
depends_on = [
315+
helm_release.grafana,
316+
null_resource.wait_for_grafana
317+
]
257318
}
258319

259320
# ---- OSS Team Sync Workaround (Option 3) ----

lgtm-stack/terraform/main.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ terraform {
2525
source = "gavinbunney/kubectl"
2626
version = ">= 1.14.0"
2727
}
28+
null = {
29+
source = "hashicorp/null"
30+
version = "~> 3.0"
31+
}
2832
local = {
2933
source = "hashicorp/local"
3034
version = "~> 2.4"

lgtm-stack/terraform/values/grafana-values.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ service:
2727
annotations: {} # Removing service annotations as they are moved to ingress
2828

2929
ingress:
30-
enabled: false
30+
enabled: true
3131
ingressClassName: ${ingress_class_name}
3232
annotations:
3333
cert-manager.io/issuer: ${cert_issuer_name}

0 commit comments

Comments
 (0)