Files
hcornet f8201d9d06
Terraform Apply / Terraform Apply (push) Successful in 2m26s
New update
2026-07-31 12:57:49 +02:00

76 lines
3.1 KiB
HCL

# =============================================================================
# TESTS TERRAFORM NATIFS (terraform test)
# =============================================================================
# Exécutés par la CI (validate.yml) avec des providers MOCKÉS : aucun appel
# réel à Cloudflare, Vault, ou autre. On vérifie la logique de construction
# (locals, for_each) — notamment le bug historique "hostname construit avec
# le zone ID au lieu du nom de domaine", qui ne peut plus revenir.
# =============================================================================
mock_provider "cloudflare" {}
mock_provider "tls" {}
mock_provider "http" {}
mock_provider "vault" {
# Les data sources vault_generic_secret renvoient ces valeurs factices
# (les clés couvrent secret/cloudflare ET secret/authentik)
mock_data "vault_generic_secret" {
defaults = {
data = {
api_token = "mock-api-token"
account_id = "mock-account-id"
zone_id_org = "0123456789abcdef0123456789abcdef"
email = "[email protected]"
client_id_cloudflare = "mock-client-id"
secret_cloudflare = "mock-secret"
directory_id = "mock-directory-id"
}
}
}
}
variables {
vault_token = "mock-token"
}
run "hostnames_utilisent_le_nom_de_zone" {
command = plan
# Les URLs publiques sont construites avec le NOM de la zone…
assert {
condition = output.applications_urls["homeassistant"] == "https://home.tips-of-mine.org"
error_message = "L'URL publique de homeassistant doit être https://home.tips-of-mine.org (nom de zone, pas zone ID)"
}
# …et les règles d'ingress du tunnel aussi (le bug historique utilisait
# le zone ID hexadécimal ici)
assert {
condition = contains(
[for r in cloudflare_zero_trust_tunnel_cloudflared_config.home_tunnel_config.config.ingress : try(r.hostname, "")],
"home.tips-of-mine.org"
)
error_message = "L'ingress du tunnel doit contenir le hostname home.tips-of-mine.org"
}
# Aucun hostname d'ingress ne doit contenir le zone ID mocké
assert {
condition = length([
for r in cloudflare_zero_trust_tunnel_cloudflared_config.home_tunnel_config.config.ingress :
r if can(regex("0123456789abcdef", try(r.hostname, "")))
]) == 0
error_message = "Un hostname d'ingress contient le zone ID : régression du bug zone ID vs nom de domaine"
}
# La règle catch-all 404 doit rester la dernière règle d'ingress
assert {
condition = element(cloudflare_zero_trust_tunnel_cloudflared_config.home_tunnel_config.config.ingress, length(cloudflare_zero_trust_tunnel_cloudflared_config.home_tunnel_config.config.ingress) - 1).service == "http_status:404"
error_message = "La dernière règle d'ingress doit être le catch-all http_status:404"
}
# Chaque application du tfvars a bien son enregistrement DNS
assert {
condition = length(cloudflare_dns_record.applications) == length(var.applications)
error_message = "Chaque application doit avoir exactement un enregistrement DNS"
}
}