terraform { required_providers { helm = { source = "hashicorp/helm" version = "~> 2.11.0" } kubernetes = { source = "hashicorp/kubernetes" version = "~> 2.23.0" } keycloak = { source = "mrparkers/keycloak" version = "4.3.1" } } backend "kubernetes" { secret_suffix = "tfstate" config_path = "~/.kube/config" namespace = "dan-terraform" } } provider "kubernetes" { config_path = "~/.kube/config" } provider "helm" { kubernetes { config_path = "~/.kube/config" } } provider "keycloak" { client_id = "terraform" client_secret = var.keycloak_client_secret url = "https://keycloak.${var.domain_suffix}" } resource "helm_release" "keycloak" { name = "keycloak" namespace = var.keycloak_namespace repository = "https://charts.bitnami.com/bitnami/" chart = "keycloak" create_namespace = true values = [ <<-EOT auth: adminPassword: ${var.keycloak_admin_pass} adminUser: admin global: storageClass: ${var.storageclass} ingress: annotations: cert-manager.io/cluster-issuer: letsencrypt-prod traefik.ingress.kubernetes.io/router.middlewares: default-redirect-https@kubernetescrd enabled: true hostname: keycloak.${var.domain_suffix} tls: true postgresql: auth: password: ${var.postgres_password} proxy: edge EOT ] } resource "keycloak_realm" "realm" { realm = var.keycloak_realm display_name = var.keycloak_realm_display_name enabled = true default_signature_algorithm = "RS256" } resource "keycloak_openid_client" "gitea_client" { realm_id = keycloak_realm.realm.id client_id = "gitea" enabled = true access_type = "CONFIDENTIAL" standard_flow_enabled = true implicit_flow_enabled = true client_secret = var.keycloak_gitea_secret valid_redirect_uris = [ "https://git.${var.domain_suffix}/*" ] } resource "helm_release" "gitea" { name = "gitea" repository = "https://dl.gitea.com/charts/" chart = "gitea" namespace = var.gitea_namespace create_namespace = true values = [ <<-EOT gitea: oauth: - autoDiscoverUrl: https://keycloak.${var.domain_suffix}/realms/${keycloak_realm.realm.realm}/.well-known/openid-configuration key: ${keycloak_openid_client.gitea_client.client_id} name: md1clv.im provider: openidConnect secret: ${keycloak_openid_client.gitea_client.client_secret} global: storageClass: ${var.storageclass} ingress: annotations: traefik.ingress.kubernetes.io/router.middlewares: default-redirect-https@kubernetescrd cert-manager.io/cluster-issuer: letsencrypt-prod enabled: true hosts: - host: git.${var.domain_suffix} paths: - path: / pathType: Prefix tls: - hosts: - git.${var.domain_suffix} secretName: tls-gitea persistence: enabled: true storageClass: ${var.storageclass} EOT ] } resource "keycloak_openid_client" "nautobot_client" { realm_id = keycloak_realm.realm.id client_id = "nautobot" enabled = true access_type = "CONFIDENTIAL" standard_flow_enabled = true implicit_flow_enabled = true client_secret = var.keycloak_nautobot_secret valid_redirect_uris = [ "/*", "https://nautobot.${var.domain_suffix}", "https://nautobot.${var.domain_suffix}/*" ] } resource "helm_release" "nautobot" { name = "nautobot" namespace = var.nautobot_namespace repository = "https://nautobot.github.io/helm-charts/" chart = "nautobot" create_namespace = true values = [ <