terraform { required_version = "> 0.8.0" } provider "kubernetes" { config_path = "~/.kube/config" } variable "shunt_kubernetes" { type = bool default = true } variable "nginx_sites" { type = map(object({ service = string docker_service = optional(string) enabled = optional(bool, true) proxy_cache = optional(bool, false) extra-value = optional(string, "") extra-value-location = optional(string, "") http2_bool = optional(bool, false) proxy_pass_https = optional(bool, false) authentication_required = optional(bool, false) redirect_to_https_bool = optional(bool, true) listen_port_80_bool = optional(bool, false) geoip_blocking = optional(bool, false) geoip_allow = optional(list(string), ["FR", "GB"]) redirect_to_root_domain = optional(bool, true) })) } resource "kubernetes_config_map" "automatic-configmap" { #avoiding this to create if the shunt_kubernetes is on count = var.shunt_kubernetes ? 0 : 1 metadata { name = "sites-terraform" namespace = "reverse-proxy" annotations = { "reloader.stakater.com/match" : "true", } } data = { for key, value in var.nginx_sites : "${key}.conf" => templatefile("nginx_config.tftpl", { name_site = key name_service = value.service proxy_cache = value.proxy_cache extra-value = value.extra-value extra-value-location = value.extra-value-location http2_bool = value.http2_bool proxy_pass_https = value.proxy_pass_https authentication_required = value.authentication_required redirect_to_https_bool = value.redirect_to_https_bool listen_port_80_bool = value.listen_port_80_bool geoip_blocking = value.geoip_blocking geoip_allow = value.geoip_allow redirect_to_root_domain = value.redirect_to_root_domain }) if value.enabled == true } } resource "local_file" "nginx_configs" { for_each = { for key, value in var.nginx_sites : key => value if value.enabled == true && value.docker_service != null } filename = "/data/kubernetes/reverse-proxy/reverse-proxy-sites/${each.key}.conf" content = templatefile("nginx_config.tftpl", { name_site = each.key name_service = each.value.docker_service proxy_cache = each.value.proxy_cache extra-value = each.value.extra-value extra-value-location = each.value.extra-value-location http2_bool = each.value.http2_bool proxy_pass_https = each.value.proxy_pass_https authentication_required = each.value.authentication_required redirect_to_https_bool = each.value.redirect_to_https_bool listen_port_80_bool = each.value.listen_port_80_bool redirect_to_root_domain = each.value.redirect_to_root_domain }) }