diff --git a/scaletest/terraform/gcp_cluster.tf b/scaletest/terraform/infra/gcp_cluster.tf similarity index 95% rename from scaletest/terraform/gcp_cluster.tf rename to scaletest/terraform/infra/gcp_cluster.tf index d83ab99c8cb74..577894790d7ff 100644 --- a/scaletest/terraform/gcp_cluster.tf +++ b/scaletest/terraform/infra/gcp_cluster.tf @@ -3,7 +3,9 @@ data "google_compute_default_service_account" "default" { } locals { - cluster_kubeconfig_path = "${abspath(path.module)}/../.coderv2/${var.name}-cluster.kubeconfig" + abs_module_path = abspath(path.module) + rel_kubeconfig_path = "../../.coderv2/${var.name}-cluster.kubeconfig" + cluster_kubeconfig_path = abspath("${local.abs_module_path}/${local.rel_kubeconfig_path}") } resource "google_container_cluster" "primary" { diff --git a/scaletest/terraform/gcp_db.tf b/scaletest/terraform/infra/gcp_db.tf similarity index 81% rename from scaletest/terraform/gcp_db.tf rename to scaletest/terraform/infra/gcp_db.tf index 8855d24f6d82b..1a02324ce071f 100644 --- a/scaletest/terraform/gcp_db.tf +++ b/scaletest/terraform/infra/gcp_db.tf @@ -42,6 +42,14 @@ resource "google_sql_database" "coder" { deletion_policy = "ABANDON" } +resource "random_password" "coder-postgres-password" { + length = 12 +} + +resource "random_password" "prometheus-postgres-password" { + length = 12 +} + resource "google_sql_user" "coder" { project = var.project_id instance = google_sql_database_instance.db.id @@ -61,3 +69,7 @@ resource "google_sql_user" "prometheus" { # required for postgres, otherwise user fails to delete deletion_policy = "ABANDON" } + +locals { + coder_db_url = "postgres://${google_sql_user.coder.name}:${urlencode(random_password.coder-postgres-password.result)}@${google_sql_database_instance.db.private_ip_address}/${google_sql_database.coder.name}?sslmode=disable" +} diff --git a/scaletest/terraform/gcp_project.tf b/scaletest/terraform/infra/gcp_project.tf similarity index 88% rename from scaletest/terraform/gcp_project.tf rename to scaletest/terraform/infra/gcp_project.tf index c233042e66acb..1073a621c33e0 100644 --- a/scaletest/terraform/gcp_project.tf +++ b/scaletest/terraform/infra/gcp_project.tf @@ -1,8 +1,3 @@ -provider "google" { - region = var.region - project = var.project_id -} - locals { project_apis = [ "cloudtrace", diff --git a/scaletest/terraform/gcp_vpc.tf b/scaletest/terraform/infra/gcp_vpc.tf similarity index 100% rename from scaletest/terraform/gcp_vpc.tf rename to scaletest/terraform/infra/gcp_vpc.tf diff --git a/scaletest/terraform/infra/main.tf b/scaletest/terraform/infra/main.tf new file mode 100644 index 0000000000000..1724692b19f3a --- /dev/null +++ b/scaletest/terraform/infra/main.tf @@ -0,0 +1,20 @@ +terraform { + required_providers { + google = { + source = "hashicorp/google" + version = "~> 4.36" + } + + random = { + source = "hashicorp/random" + version = "~> 3.5" + } + } + + required_version = "~> 1.5.0" +} + +provider "google" { + region = var.region + project = var.project_id +} diff --git a/scaletest/terraform/infra/outputs.tf b/scaletest/terraform/infra/outputs.tf new file mode 100644 index 0000000000000..f5e619eca384d --- /dev/null +++ b/scaletest/terraform/infra/outputs.tf @@ -0,0 +1,73 @@ +output "coder_db_url" { + description = "URL of the database for Coder." + value = local.coder_db_url + sensitive = true +} + +output "coder_address" { + description = "IP address to use for the Coder service." + value = google_compute_address.coder.address +} + +output "kubernetes_kubeconfig_path" { + description = "Kubeconfig path." + value = local.cluster_kubeconfig_path +} + +output "kubernetes_nodepool_coder" { + description = "Name of the nodepool on which to run Coder." + value = google_container_node_pool.coder.name +} + +output "kubernetes_nodepool_misc" { + description = "Name of the nodepool on which to run everything else." + value = google_container_node_pool.misc.name +} + +output "kubernetes_nodepool_workspaces" { + description = "Name of the nodepool on which to run workspaces." + value = google_container_node_pool.workspaces.name +} + +output "prometheus_external_label_cluster" { + description = "Value for the Prometheus external label named cluster." + value = google_container_cluster.primary.name +} + +output "prometheus_postgres_dbname" { + description = "Name of the database for Prometheus to monitor." + value = google_sql_database.coder.name +} + +output "prometheus_postgres_host" { + description = "Hostname of the database for Prometheus to connect to." + value = google_sql_database_instance.db.private_ip_address +} + +output "prometheus_postgres_password" { + description = "Postgres password for Prometheus." + value = random_password.prometheus-postgres-password.result + sensitive = true +} + +output "prometheus_postgres_user" { + description = "Postgres username for Prometheus." + value = google_sql_user.prometheus.name +} + +resource "local_file" "outputs" { + filename = "${path.module}/../../.coderv2/infra_outputs.tfvars" + content = <