locals { bootstrap_releases = { cert-manager = { chart_version = "v1.21.0" namespace = "cert-manager" repo = "jetstack" } cilium = { chart_version = "1.19.5" namespace = "kube-system" repo = "cilium" } reloader = { chart_version = "1.3.0" namespace = "reloader" repo = "stakater" } ingress-nginx = { chart_version = "4.15.1" namespace = "ingress-nginx" repo = "ingress_nginx" } external-secrets = { chart_version = "0.9.9" namespace = "external-secrets-system" repo = "external_secrets" } } } resource "helm_release" "bootstrap" { for_each = local.bootstrap_releases name = each.key repository = local.helm_repos[each.value.repo] chart = each.key version = each.value.chart_version namespace = each.value.namespace dynamic "set" { for_each = each.key == "cert-manager" ? { "crds.enabled" = "true" "prometheus.enabled" = "true" "prometheus.servicemonitor.enabled" = "true" "prometheus.servicemonitor.interval" = "60s" } : (each.key == "ingress-nginx" ? { "controller.admissionWebhooks.enabled" = "false" "controller.dnsPolicy" = "ClusterFirstWithHostNet" "controller.extraArgs.default-ssl-certificate" = "ingress-nginx/homelab-tls" "controller.hostPort.enabled" = "true" "controller.ingressClassResource.default" = "true" "controller.kind" = "DaemonSet" "controller.metrics.enabled" = "true" "controller.metrics.serviceMonitor.enabled" = "true" "controller.metrics.serviceMonitor.interval" = "30s" } : {}) content { name = set.key value = set.value } } depends_on = [ kubernetes_namespace.namespaces ] lifecycle { ignore_changes = [ values ] } }