From 7b95705c0709e06244de65951098e0dae65336a1 Mon Sep 17 00:00:00 2001 From: chrischristiansen-glitch Date: Sun, 31 May 2026 15:47:02 +0200 Subject: [PATCH] feat(terraform): add vauco-platform module with domain mappings + CG3 variables --- .../terraform/modules/vauco-platform/main.tf | 91 +++++++++++++++++++ .../modules/vauco-platform/outputs.tf | 19 ++++ .../modules/vauco-platform/variables.tf | 30 ++++++ infrastructure/terraform/platform.tf | 31 +++++++ 4 files changed, 171 insertions(+) create mode 100644 infrastructure/terraform/modules/vauco-platform/main.tf create mode 100644 infrastructure/terraform/modules/vauco-platform/outputs.tf create mode 100644 infrastructure/terraform/modules/vauco-platform/variables.tf create mode 100644 infrastructure/terraform/platform.tf diff --git a/infrastructure/terraform/modules/vauco-platform/main.tf b/infrastructure/terraform/modules/vauco-platform/main.tf new file mode 100644 index 0000000..6bc14d5 --- /dev/null +++ b/infrastructure/terraform/modules/vauco-platform/main.tf @@ -0,0 +1,91 @@ +# ============================================================================== +# vauco-platform — Vauco sin egen plattforminfrastruktur +# Scope: propane-will-491900-m5 / europe-west1 +# Håndterer: Cloud Run domain mappings, salgsmodul-subdomener +# ============================================================================== + +locals { + labels = { + managed-by = "terraform" + team = "vauco" + environment = "prod" + } +} + +# ------------------------------------------------------------------------------ +# Eksisterende Cloud Run-service (data source — ikke opprettet av Terraform) +# ------------------------------------------------------------------------------ +data "google_cloud_run_service" "platform" { + name = var.cloud_run_service_name + location = var.region + project = var.project_id +} + +# ------------------------------------------------------------------------------ +# Domain mapping — opax.vauco.no (primær) +# ------------------------------------------------------------------------------ +resource "google_cloud_run_domain_mapping" "opax" { + name = "opax.vauco.no" + location = var.region + project = var.project_id + + metadata { + namespace = var.project_id + labels = local.labels + } + + spec { + route_name = data.google_cloud_run_service.platform.name + certificate_mode = "AUTOMATIC" + force_override = false + } + + lifecycle { + # Ikke slett mappingen ved rename — Cloud Run domain mappings er sårbare + prevent_destroy = true + } +} + +# ------------------------------------------------------------------------------ +# Domain mapping — costguard.oss.vauco.no (CG3 — salgsmodul) +# ------------------------------------------------------------------------------ +resource "google_cloud_run_domain_mapping" "costguard_oss" { + name = var.costguard_domain + location = var.region + project = var.project_id + + metadata { + namespace = var.project_id + labels = merge(local.labels, { module = "costguard" }) + } + + spec { + route_name = data.google_cloud_run_service.platform.name + certificate_mode = "AUTOMATIC" + force_override = false + } +} + +# ------------------------------------------------------------------------------ +# Domain mapping — dynamisk per salgsmodul +# Brukes når nye moduler legges til i var.salesmodule_domains +# Eks: ["threadstone.oss.vauco.no", "invoicepilot.oss.vauco.no"] +# ------------------------------------------------------------------------------ +resource "google_cloud_run_domain_mapping" "salesmodules" { + for_each = toset(var.salesmodule_domains) + + name = each.value + location = var.region + project = var.project_id + + metadata { + namespace = var.project_id + labels = merge(local.labels, { module = split(".", each.value)[0] }) + } + + spec { + route_name = data.google_cloud_run_service.platform.name + certificate_mode = "AUTOMATIC" + force_override = false + } +} diff --git a/infrastructure/terraform/modules/vauco-platform/outputs.tf b/infrastructure/terraform/modules/vauco-platform/outputs.tf new file mode 100644 index 0000000..89c454c --- /dev/null +++ b/infrastructure/terraform/modules/vauco-platform/outputs.tf @@ -0,0 +1,19 @@ +output "opax_domain" { + description = "OPAX operator hub URL" + value = "https://${google_cloud_run_domain_mapping.opax.name}" +} + +output "costguard_domain" { + description = "CostGuard salgsmodul URL" + value = "https://${google_cloud_run_domain_mapping.costguard_oss.name}" +} + +output "salesmodule_domains" { + description = "Alle aktive salgsmodul-URLer" + value = { for k, v in google_cloud_run_domain_mapping.salesmodules : k => "https://${v.name}" } +} + +output "cloud_run_service_name" { + description = "Cloud Run-service alle domener peker på" + value = data.google_cloud_run_service.platform.name +} diff --git a/infrastructure/terraform/modules/vauco-platform/variables.tf b/infrastructure/terraform/modules/vauco-platform/variables.tf new file mode 100644 index 0000000..81b9674 --- /dev/null +++ b/infrastructure/terraform/modules/vauco-platform/variables.tf @@ -0,0 +1,30 @@ +variable "project_id" { + description = "Vauco platform GCP project ID" + type = string + default = "propane-will-491900-m5" +} + +variable "region" { + description = "Cloud Run region" + type = string + default = "europe-west1" +} + +variable "cloud_run_service_name" { + description = "Navn på eksisterende Cloud Run-service" + type = string + default = "osvauco-agent" +} + +variable "costguard_domain" { + description = "Primærdomene for CostGuard salgsmodul" + type = string + default = "costguard.oss.vauco.no" +} + +variable "salesmodule_domains" { + description = "Liste over salgsmodul-subdomener som skal mappes til Cloud Run" + type = list(string) + default = [] + # Eksempel: ["threadstone.oss.vauco.no", "invoicepilot.oss.vauco.no"] +} diff --git a/infrastructure/terraform/platform.tf b/infrastructure/terraform/platform.tf new file mode 100644 index 0000000..fb04f54 --- /dev/null +++ b/infrastructure/terraform/platform.tf @@ -0,0 +1,31 @@ +# ============================================================================== +# platform.tf — Vauco sin egen plattform (propane-will-491900-m5) +# Kjøres fra: infrastructure/terraform/ +# State: terraform.tfstate (samme workspace som vauco-bootstrap/medioteq) +# +# For å kjøre kun denne modulen: +# terraform apply -target=module.vauco_platform +# ============================================================================== + +module "vauco_platform" { + source = "./modules/vauco-platform" + + project_id = "propane-will-491900-m5" + region = "europe-west1" + cloud_run_service_name = "osvauco-agent" + costguard_domain = "costguard.oss.vauco.no" + + # Legg til nye salgsmodul-subdomener her etter hvert: + salesmodule_domains = [ + # "threadstone.oss.vauco.no", + # "invoicepilot.oss.vauco.no", + ] +} + +output "platform_opax_url" { + value = module.vauco_platform.opax_domain +} + +output "platform_costguard_url" { + value = module.vauco_platform.costguard_domain +}