terraform { required_providers { kubectl = { source = "gavinbunney/kubectl" version = "1.19.0" } helm = { source = "hashicorp/helm" version = "3.0.2" } kubernetes = { source = "hashicorp/kubernetes" version = "2.38.0" } kustomization = { source = "kbst/kustomization" version = "0.9.6" } time = { source = "hashicorp/time" version = "0.13.1" } } } # Create namespace for monitoring resource "kubernetes_namespace" "monitoring" { metadata { name = "monitoring" labels = { "pod-security.kubernetes.io/enforce" = "privileged" } } } # Deploy kube-prometheus-stack resource "helm_release" "kube_prometheus_stack" { name = "kube-prometheus-stack" repository = "https://prometheus-community.github.io/helm-charts" chart = "kube-prometheus-stack" namespace = kubernetes_namespace.monitoring.metadata[0].name version = "67.2.1" # Check for latest version # Wait for CRDs to be created wait = true timeout = 600 force_update = false recreate_pods = false # Reference the values file values = [ file("${path.module}/values.yaml") ] depends_on = [ kubernetes_namespace.monitoring ] } resource "kubectl_manifest" "argocd-tunnel-bind" { depends_on = [helm_release.kube_prometheus_stack] yaml_body = templatefile("${path.module}/grafana-ui.yaml", { base_domain = var.cloudflare_domain }) } resource "helm_release" "loki_stack" { name = "loki-stack" repository = "https://grafana.github.io/helm-charts" chart = "loki-stack" namespace = kubernetes_namespace.monitoring.metadata[0].name version = "2.9.12" set = [{ name = "grafana.enabled" value = "false" }] depends_on = [ helm_release.kube_prometheus_stack ] }