From 005a3c4b8484917358de8e6267d5d9bf7fb24aa7 Mon Sep 17 00:00:00 2001 From: "juvenal.diaz" Date: Wed, 22 Jul 2026 23:10:11 -0600 Subject: [PATCH] Make helm do not block --- bootstrap/platform/main.tf | 51 +++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/bootstrap/platform/main.tf b/bootstrap/platform/main.tf index df96930..072e5c1 100644 --- a/bootstrap/platform/main.tf +++ b/bootstrap/platform/main.tf @@ -1770,8 +1770,10 @@ resource "helm_release" "prometheus_stack" { version = var.observability.prometheus.version namespace = var.observability.namespace create_namespace = false - timeout = 1200 - wait = true + # Readiness is checked by the following resource so a blocked PVC or pod + # produces actionable Kubernetes diagnostics instead of a provider timeout. + timeout = 600 + wait = false cleanup_on_fail = true values = [ @@ -1973,6 +1975,49 @@ resource "helm_release" "prometheus_stack" { ] } +resource "null_resource" "prometheus_stack_readiness" { + depends_on = [helm_release.prometheus_stack] + + triggers = { + kubeconfig_path = var.kubeconfig_path + namespace = var.observability.namespace + release_version = var.observability.prometheus.version + } + + provisioner "local-exec" { + interpreter = ["/bin/bash", "-lc"] + command = <&2 + kubectl --kubeconfig "$kubeconfig" -n "$namespace" get pods,sts,deploy,pvc -l "$selector" -o wide >&2 || true + kubectl --kubeconfig "$kubeconfig" -n "$namespace" get events --sort-by=.lastTimestamp | tail -n 80 >&2 || true +} + +trap dump_prometheus_debug ERR + +until kubectl --kubeconfig "$kubeconfig" -n "$namespace" get pods -l "$selector" -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.phase}{"\t"}{range .status.conditions[*]}{.type}={.status}{" "}{end}{"\n"}{end}' 2>/dev/null | + awk 'NF > 0 { count++ } ($2 == "Succeeded") || ($2 == "Running" && $0 ~ /Ready=True/) { next } { failed = 1 } END { exit !(count > 0 && !failed) }'; do + if [ "$elapsed" -ge "$timeout_seconds" ]; then + echo "Timed out waiting for Prometheus stack workloads after $${timeout_seconds}s." >&2 + exit 1 + fi + sleep 10 + elapsed=$((elapsed + 10)) +done + +echo "Prometheus stack workloads are ready." +EOT + } +} + resource "kubernetes_config_map" "grafana_dashboards" { for_each = local.grafana_dashboard_files @@ -1991,7 +2036,7 @@ resource "kubernetes_config_map" "grafana_dashboards" { (each.key) = file("${path.module}/grafana-dashboards/${each.key}") } - depends_on = [helm_release.prometheus_stack] + depends_on = [null_resource.prometheus_stack_readiness] } resource "helm_release" "extra_tools" {