Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
gitpod-io
GitHub Repository: gitpod-io/gitpod
Path: blob/main/dev/preview/infrastructure/modules/dns/certificate-zerossl.tf
2506 views
locals {
  zerossl_enabled = var.cert_issuer == "zerossl-issuer-gitpod-core-dev"
}

data "google_secret_manager_secret_version" "zerossl_eab" {
  provider = google
  count    = local.zerossl_enabled ? 1 : 0

  secret = "zerossl-eab"
}

resource "tls_private_key" "zerossl" {
  count = local.zerossl_enabled ? 1 : 0

  algorithm = "RSA"
}

resource "acme_registration" "zerossl" {
  provider = acme.zerossl
  count    = local.zerossl_enabled ? 1 : 0

  account_key_pem = tls_private_key.zerossl[0].private_key_pem
  email_address   = "[email protected]"

  external_account_binding {
    key_id      = jsondecode(data.google_secret_manager_secret_version.zerossl_eab[0].secret_data).kid
    hmac_base64 = jsondecode(data.google_secret_manager_secret_version.zerossl_eab[0].secret_data).hmac
  }
}

resource "acme_certificate" "zerossl" {
  provider = acme.zerossl
  count    = local.zerossl_enabled ? 1 : 0

  account_key_pem = acme_registration.zerossl[0].account_key_pem
  common_name     = "${var.preview_name}.${local.non_fully_qualified_dns_name}"
  subject_alternative_names = [
    "*.${var.preview_name}.${local.non_fully_qualified_dns_name}",
    "*.ws-dev.${var.preview_name}.${local.non_fully_qualified_dns_name}"
  ]
  preferred_chain = ""

  dns_challenge {
    provider = "gcloud"
    config = {
      GCE_PROJECT = var.gcp_project_dns
    }
  }
}

resource "google_secret_manager_secret" "zerossl" {
  count     = local.zerossl_enabled ? 1 : 0
  secret_id = "certificate-${var.preview_name}"

  labels = {
    label = "preview-certificate"
  }

  replication {
    auto {}
  }
}
resource "google_secret_manager_secret_version" "zerossl" {
  count  = local.zerossl_enabled ? 1 : 0
  secret = google_secret_manager_secret.zerossl[0].id

  secret_data = jsonencode({
    "tls.crt" = base64encode("${lookup(acme_certificate.zerossl[0], "certificate_pem")}${lookup(acme_certificate.zerossl[0], "issuer_pem")}")
    "tls.key" = base64encode("${lookup(acme_certificate.zerossl[0], "private_key_pem")}")
  })

  depends_on = [
    acme_certificate.zerossl[0]
  ]
}