Files
coder/scaletest/terraform/action/k8s_coder_asia.tf
T
Ethan 5145cd002d chore(scaletest): add tls to infrastructure (#19412)
Closes https://github.com/coder/internal/issues/850

This PR has the scaletest infrastructure retrieve and use TLS certificates from the persistent observability cluster.

To support creating multiple instances of the infrastructure simultaneously, `var.name` can be set to `alpha`, `bravo` or `charlie`, which retrieves the corresponding certificates.

Also:
- Adds support for wildcard apps.
- Retrieves the Cloudflare token from GCP secrets.
2025-08-25 12:25:09 +10:00

132 lines
4.5 KiB
Terraform

resource "kubernetes_namespace" "coder_asia" {
provider = kubernetes.asia
metadata {
name = local.coder_namespace
}
lifecycle {
ignore_changes = [timeouts, wait_for_default_service_account]
}
depends_on = [google_container_node_pool.node_pool["asia_misc"]]
}
resource "kubernetes_secret" "provisionerd_psk_asia" {
provider = kubernetes.asia
type = "Opaque"
metadata {
name = "coder-provisioner-psk"
namespace = kubernetes_namespace.coder_asia.metadata.0.name
}
data = {
psk = random_password.provisionerd_psk.result
}
lifecycle {
ignore_changes = [timeouts, wait_for_service_account_token]
}
}
resource "kubernetes_secret" "proxy_token_asia" {
provider = kubernetes.asia
type = "Opaque"
metadata {
name = "coder-proxy-token"
namespace = kubernetes_namespace.coder_asia.metadata.0.name
}
data = {
token = trimspace(data.local_file.asia_proxy_token.content)
}
lifecycle {
ignore_changes = [timeouts, wait_for_service_account_token]
}
}
resource "kubernetes_secret" "coder_tls_asia" {
provider = kubernetes.asia
type = "kubernetes.io/tls"
metadata {
name = "coder-tls"
namespace = kubernetes_namespace.coder_asia.metadata.0.name
}
data = {
"tls.crt" = data.kubernetes_secret.coder_tls["asia"].data["tls.crt"]
"tls.key" = data.kubernetes_secret.coder_tls["asia"].data["tls.key"]
}
lifecycle {
ignore_changes = [timeouts, wait_for_service_account_token]
}
}
resource "helm_release" "coder_asia" {
provider = helm.asia
repository = local.coder_helm_repo
chart = local.coder_helm_chart
name = local.coder_release_name
version = var.coder_chart_version
namespace = kubernetes_namespace.coder_asia.metadata.0.name
values = [templatefile("${path.module}/coder_helm_values.tftpl", {
workspace_proxy = true,
provisionerd = false,
primary_url = local.deployments.primary.url,
proxy_token = kubernetes_secret.proxy_token_asia.metadata.0.name,
db_secret = null,
ip_address = google_compute_address.coder["asia"].address,
provisionerd_psk = null,
access_url = local.deployments.asia.url,
wildcard_access_url = local.deployments.asia.wildcard_access_url,
node_pool = google_container_node_pool.node_pool["asia_coder"].name,
release_name = local.coder_release_name,
experiments = var.coder_experiments,
image_repo = var.coder_image_repo,
image_tag = var.coder_image_tag,
replicas = local.scenarios[var.scenario].coder.replicas,
cpu_request = local.scenarios[var.scenario].coder.cpu_request,
mem_request = local.scenarios[var.scenario].coder.mem_request,
cpu_limit = local.scenarios[var.scenario].coder.cpu_limit,
mem_limit = local.scenarios[var.scenario].coder.mem_limit,
deployment = "asia",
tls_secret_name = kubernetes_secret.coder_tls_asia.metadata.0.name,
})]
depends_on = [null_resource.license]
}
resource "helm_release" "provisionerd_asia" {
provider = helm.asia
repository = local.coder_helm_repo
chart = local.provisionerd_helm_chart
name = local.provisionerd_release_name
version = var.provisionerd_chart_version
namespace = kubernetes_namespace.coder_asia.metadata.0.name
values = [templatefile("${path.module}/coder_helm_values.tftpl", {
workspace_proxy = false,
provisionerd = true,
primary_url = null,
proxy_token = null,
db_secret = null,
ip_address = null,
provisionerd_psk = kubernetes_secret.provisionerd_psk_asia.metadata.0.name,
access_url = local.deployments.primary.url,
wildcard_access_url = null,
node_pool = google_container_node_pool.node_pool["asia_coder"].name,
release_name = local.coder_release_name,
experiments = var.coder_experiments,
image_repo = var.coder_image_repo,
image_tag = var.coder_image_tag,
replicas = local.scenarios[var.scenario].provisionerd.replicas,
cpu_request = local.scenarios[var.scenario].provisionerd.cpu_request,
mem_request = local.scenarios[var.scenario].provisionerd.mem_request,
cpu_limit = local.scenarios[var.scenario].provisionerd.cpu_limit,
mem_limit = local.scenarios[var.scenario].provisionerd.mem_limit,
deployment = "asia",
tls_secret_name = null,
})]
depends_on = [null_resource.license]
}