boday_tf/main.tf

121 lines
3.1 KiB
Terraform
Raw Permalink Normal View History

2026-11-01 00:43:19 +00:00
terraform {
required_providers {
kubernetes = {
source = "hashicorp/kubernetes"
version = "~> 2.26"
}
helm = {
source = "hashicorp/helm"
version = "~> 2.12"
}
}
2026-11-02 17:03:48 +00:00
2026-11-08 01:32:47 +00:00
# Der State-Pfad pro Umgebung wird beim init gesetzt:
# terraform init -backend-config=envs/test.backend.hcl (k3s, terraform/states/boday_tf – unverändert)
# terraform init -backend-config=envs/prod.backend.hcl (Talos, terraform/states/boday_tf_prod)
2026-11-02 17:03:48 +00:00
backend "consul" {
address = "consul:8500"
}
2026-11-01 00:43:19 +00:00
}
2026-11-08 01:32:47 +00:00
# --- Variablen ---------------------------------------------------------------
2026-11-01 00:43:19 +00:00
variable "app_version" {
2026-11-08 01:32:47 +00:00
description = "Image-Tag (Git-SHA aus der Pipeline)"
type = string
default = "latest"
}
variable "environment" {
description = "test (k3s) oder prod (Talos)"
type = string
}
variable "kubeconfig_path" {
type = string
default = "./kind_kubeconfig"
}
# Nur für k3s nötig (überschreibt den Server aus der Kubeconfig). Bei Talos null lassen.
variable "kube_host" {
2026-11-01 00:43:19 +00:00
type = string
2026-11-08 01:32:47 +00:00
default = null
}
# k3s-Test: true. Talos: false – die Kubeconfig von talosctl enthält die CA.
variable "kube_insecure" {
type = bool
default = false
2026-11-01 00:43:19 +00:00
}
2026-11-08 01:32:47 +00:00
variable "namespace" {
type = string
default = "default"
}
# Leer = Wert aus values.yaml bleibt (k3s-Test). Für Prod als Forgejo-Secret übergeben.
variable "django_secret_key" {
type = string
default = ""
sensitive = true
}
variable "postgres_password" {
type = string
default = ""
sensitive = true
}
# --- Provider ----------------------------------------------------------------
2026-11-01 00:43:19 +00:00
provider "kubernetes" {
2026-11-08 01:32:47 +00:00
config_path = var.kubeconfig_path
host = var.kube_host
insecure = var.kube_insecure
2026-11-01 00:43:19 +00:00
}
provider "helm" {
kubernetes {
2026-11-08 01:32:47 +00:00
config_path = var.kubeconfig_path
host = var.kube_host
insecure = var.kube_insecure
}
}
# --- Deployment --------------------------------------------------------------
2026-11-01 00:43:19 +00:00
resource "helm_release" "boday_website" {
2026-11-08 01:32:47 +00:00
name = "boday-it"
chart = "./charts/boday-it"
namespace = var.namespace
create_namespace = var.namespace != "default"
2026-11-12 22:29:50 +00:00
timeout = 600 # 10 min instead of 5 (first Longhorn volume, slow pulls)
atomic = true # on failure: automatic rollback instead of a "failed" release
2026-11-08 01:32:47 +00:00
# Umgebungsspezifische Werte (Ingress-Klasse, StorageClass, ...)
values = [file("${path.module}/charts/boday-it/values-${var.environment}.yaml")]
2026-11-01 00:43:19 +00:00
set {
name = "image.tag"
value = var.app_version
}
2026-11-08 01:50:44 +00:00
# Secrets nur setzen, wenn sie übergeben wurden (sonst gilt values.yaml).
# nonsensitive() gibt nur "gesetzt ja/nein" frei, nicht den Wert selbst.
dynamic "set_sensitive" {
for_each = nonsensitive(var.django_secret_key != "") ? ["secrets.djangoSecretKey"] : []
content {
name = set_sensitive.value
value = var.django_secret_key
}
}
2026-11-08 01:32:47 +00:00
dynamic "set_sensitive" {
2026-11-08 01:50:44 +00:00
for_each = nonsensitive(var.postgres_password != "") ? ["secrets.postgresPassword"] : []
2026-11-08 01:32:47 +00:00
content {
2026-11-08 01:50:44 +00:00
name = set_sensitive.value
value = var.postgres_password
2026-11-08 01:32:47 +00:00
}
}
}