# Terraform HCL: Syntax, Struktur & Configuration-Management

TL;DR / Management Summary HCL (HashiCorp Configuration Language) ist die Sprache, mit der wir in Terraform unsere Infrastruktur beschreiben. Sie ist für Menschen lesbar wie YAML, aber so mächtig wie eine Programmiersprache. Ein Senior Admin nutzt HCL, um komplexe Umgebungen modular aufzubauen. Wir trennen dabei strikt zwischen Providern (der API-Anschluss), Ressourcen (das eigentliche Objekt) und Variablen (die Parameter), um den Code wartbar und wiederverwendbar zu halten.


# 1. Die Anatomie einer .tf Datei

Die Grundbausteine.

Eine Terraform-Konfiguration besteht aus vier Haupt-Elementen:

  1. Provider: Welches System steuern wir? (z.B. proxmox).
  2. Resource: Was wollen wir erstellen? (z.B. proxmox_vm_qemu).
  3. Variable: Welche Werte ändern sich? (z.B. vm_memory).
  4. Output: Welche Informationen brauchen wir nach dem Lauf? (z.B. die ip_address).

# 2. HCL Syntax in der Praxis

Schreiben statt Klicken.

# Beispiel: Eine einfache VM-Definition

resource "proxmox_vm_qemu" "my_server" {
  name        = "web-prod-01"
  target_node = "pve01"
  clone       = "debian-template"
  
  # Ressourcen-Zuweisung
  cores   = 2
  memory  = 2048
  
  # Netzwerk-Block
  network {
    model  = "virtio"
    bridge = "vmbr0"
  }
}

# 3. Deep Dive: Variablen & Datentypen

Den Code flexibel machen.

Vermeiden Sie fest kodierte Werte (Hardcoding).

variable "instance_count" {
  type    = number
  default = 3
  description = "Anzahl der zu erstellenden Webserver"
}

# 4. Day-2 Operations: Interpolation & Functions

Logik im Code.

HCL bietet eingebaute Funktionen:


# 5. Troubleshooting & “War Stories”

Wenn die Syntax beißt.

# Top 3 Fehlerbilder

  1. Symptom: “Missing required argument”.

    • Ursache: Der Provider hat sich aktualisiert und erfordert nun ein neues Feld (z.B. ipconfig0 bei Cloud-Init).
    • Lösung: Dokumentation des Providers (z.B. Telmate/Proxmox) prüfen.
  2. Symptom: Variablen werden nicht gefunden.

    • Ursache: Terraform liest nur Dateien mit der Endung .tf. Variablen in .tfvars müssen explizit mit -var-file geladen werden (außer sie heißen terraform.tfvars).
  3. Symptom: “Duplicate resource name”.

    • Fix: Jede Ressource muss eine eindeutige Kombination aus Typ und lokalem Namen haben.

# “War Story”: Der “String-Integer” Wahnsinn

Ein Admin übergab die VM-ID als String ("100") statt als Zahl (100). Das Ergebnis: Die Proxmox-API akzeptierte den Wert, aber Terraform konnte die VM beim nächsten Lauf nicht mehr im State (Artikel 789) zuordnen, da der Datentyp-Mismatch zu einer falschen Prüfsumme führte. Terraform versuchte daraufhin, die produktive VM zu löschen und neu zu erstellen. Lehre: Seien Sie in HCL streng mit Datentypen. Nutzen Sie type = number oder type = bool in Ihren Variablen-Definitionen, um solche Seiteneffekte zu verhindern.


# 6. Monitoring & Reporting

Code-Qualität sichern.

# Terraform Validate & Format

Nutzen Sie die eingebauten Tools:


# 7. Fazit & Empfehlung

HCL ist die mächtigste Waffe im Arsenal des Cloud-Admins.


# Anhang: Cheatsheet (HCL Basics)

Begriff Beispiel Zweck
Block resource "..." { ... } Definition einer Einheit
Argument name = "value" Zuweisung eines Wertes
Attribute self.ipv4_address Rückgabewert einer Ressource
Local locals { env = "prod" } Interne Zwischenvariable

# Referenzen