Konfig-Templates: envsubst, gomplate und drift control

In modernen Container-Umgebungen müssen Konfigurationen flexibel, reproduzierbar und versionskontrollierbar bereitgestellt werden. Einfaches Mounten von statischen .env-Dateien reicht oft nicht aus, insbesondere wenn unterschiedliche Umgebungen (dev, stage, prod) unterstützt werden sollen oder Konfigurationsdrift verhindert werden muss. In diesem Artikel zeigen wir, wie man mit Tools wie envsubst und gomplate Konfigurations-Templates effizient nutzt und gleichzeitig Drift kontrolliert.

1. Grundlagen von Konfigurations-Templates

Templates ermöglichen es, Platzhalter in Konfigurationsdateien zu definieren, die zur Laufzeit mit Umgebungsvariablen oder anderen Werten ersetzt werden. Dies schafft folgende Vorteile:

  • Eine zentrale Quelle für Konfigurationswerte
  • Flexibilität beim Deployen in unterschiedlichen Umgebungen
  • Vermeidung von Duplikaten und Fehlern durch manuelles Editieren
  • Automatisierte Drift-Kontrolle, da Templates versioniert werden können

2. envsubst: Einfaches Substitutionswerkzeug

envsubst ist ein kleines CLI-Tool, das Platzhalter in Dateien durch Umgebungsvariablen ersetzt. Es ist besonders praktisch, wenn man nur wenige Variablen ersetzen möchte.

Beispiel

# Template-Datei config.tmpl
DB_HOST=${DB_HOST}
DB_USER=${DB_USER}
DB_PASS=${DB_PASS}

Substitution zur Laufzeit

export DB_HOST=localhost
export DB_USER=myuser
export DB_PASS=mypass
envsubst < config.tmpl > config.yml

Vor- und Nachteile

  • Vorteile: Minimal, keine zusätzliche Abhängigkeit, schnell
  • Nachteile: Keine komplexen Bedingungen, Schleifen oder Includes möglich

3. gomplate: Mächtiges Template-Tool

gomplate bietet eine leistungsfähige Template-Engine für Go-Templates. Es unterstützt Bedingungen, Schleifen, externe Datenquellen (JSON, YAML, ENV) und Funktionen.

Beispiel

# Template config.tmpl
database:
  host: {{ env "DB_HOST" }}
  user: {{ env "DB_USER" }}
  password: {{ env "DB_PASS" }}

Ausführung

gomplate -f config.tmpl -o config.yml

Vorteile

  • Unterstützt komplexe Logik, Bedingungen und Schleifen
  • Daten aus externen Quellen wie Vault, JSON oder REST API nutzbar
  • Automatisierbar in CI/CD-Pipelines

4. Drift Control: Änderungen erkennen und verhindern

Drift tritt auf, wenn Konfigurationen manuell geändert werden und von der Version im Repository abweichen. Templates in Kombination mit CI/CD ermöglichen Drift-Kontrolle:

  • Templates werden versioniert und in Git gespeichert
  • CI/CD generiert die endgültige Konfiguration aus Template + ENV
  • Automatisierte Validierung prüft, ob live Configs mit Template-Output übereinstimmen

Praktisches Beispiel mit GitOps

# CI-Job prüft Drift
gomplate -f config.tmpl -o generated.yml
diff -u generated.yml deployed.yml
if [ $? -ne 0 ]; then
  echo "Config Drift detected!"
  exit 1
fi

5. Best Practices

  • Templates immer versionieren, niemals Secrets direkt im Template
  • Environment-spezifische Werte via .env oder Secret Management
  • CI/CD Pipeline für automatische Generierung und Validation nutzen
  • Einheitliche Namenskonventionen für Variablen zur Vermeidung von Fehlern
  • Fallback-Werte im Template definieren, z. B. {{ envOr "DB_HOST" "localhost" }}

6. Integration in Docker Compose

Templates können vor dem Start des Compose-Stacks gerendert werden, z. B. via Entrypoint-Skript oder CI/CD Pipeline:

version: '3.8'
services:
  app:
    image: myapp:latest
    volumes:
      - ./config/generated.yml:/app/config.yml:ro
    environment:
      - CONFIG_PATH=/app/config.yml

Vorteile

  • Keine Secrets oder ENV direkt im Compose-File
  • Stabile Reproduzierbarkeit
  • Einfache Anpassung zwischen dev/stage/prod

7. Troubleshooting

  • Fehlende ENV-Variablen: Template-Rendering schlägt fehl – prüfen mit env | grep VAR
  • Ungültige YAML/JSON: Gomplate kann Syntax-Fehler aufzeigen
  • Diff zeigt Abweichungen: Prüfen, ob Template korrekt gerendert wurde

8. Fazit

Durch den Einsatz von Tools wie envsubst oder gomplate lassen sich Docker- und Compose-Konfigurationen flexibel und reproduzierbar gestalten. Drift Control über CI/CD-Pipelines verhindert unerwünschte Änderungen in produktiven Umgebungen und sorgt für konsistente Deployments über alle Environments hinweg.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles