feat(terraform): add vauco-platform module with domain mappings + CG3 variables

This commit is contained in:
chrischristiansen-glitch 2026-05-31 15:47:02 +02:00
parent cb9a887f1d
commit 7b95705c07
4 changed files with 171 additions and 0 deletions

View File

@ -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
}
}

View File

@ -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
}

View File

@ -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"]
}

View File

@ -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
}