- 1 Section
- 10 Lessons
- unbegrenzt
- CI/CD, Automatisierung & IaC10
- 1.1Was ist CI/CD?
- 1.2CI/CD-Pipeline aufbauen: Phasen und Stages
- 1.3GitHub Actions: Workflows und YAML
- 1.4GitLab CI/CD: Pipelines und Jobs
- 1.5Jenkins: Grundlagen und Jenkinsfile
- 1.6Automatisiertes Testen in der Pipeline
- 1.7Ansible: Playbooks und Inventory
- 1.8Terraform: Infrastructure as Code
- 1.9Monitoring der Pipeline
- 1.10Aufgaben CI/CD
Ansible: Playbooks und Inventory
Bisher haben wir uns auf CI/CD-Pipelines konzentriert – also Software bauen und ausliefern. Aber wer hilft uns, die Server selbst in den richtigen Zustand zu bringen? Genau dafür gibt es Configuration-Management-Tools, und das bekannteste ist Ansible.
Ansible ist Red Hats Open-Source-Tool für Configuration Management und Automatisierung. Anders als Terraform, das Infrastruktur provisioniert, sorgt Ansible dafür dass die Server-Konfiguration stimmt: richtige Pakete installiert, Config-Dateien an Ort und Stelle, Services aktiv. Diese Lektion deckt Playbooks, Inventory, Modules, Roles, Templates ab.
1) Was ist Configuration Management?
Stell dir vor, du musst 50 Webserver einrichten: Linux installieren, Nginx, PHP, MySQL, Firewall-Regeln, User anlegen, Backup-Skripte einrichten. Manuell? Wochen Arbeit, jeder Server leicht anders, Fehler vorprogrammiert. Mit Configuration Management automatisierst du das: ein Script-File beschreibt den Soll-Zustand, das Tool sorgt dafür dass die Server diesen Zustand erreichen.
Wichtige Eigenschaften:
- Deklarativ: du beschreibst was sein soll, nicht wie man dahin kommt
- Idempotent: das gleiche Skript mehrfach laufen lassen ändert nichts (wenn Soll-Zustand schon erreicht)
- Reproduzierbar: gleicher Input erzeugt gleichen Output
- Versionierbar: Konfiguration als Code in Git
Konkurrenten: Puppet, Chef, SaltStack. Ansible hat sich durchgesetzt weil es agentless arbeitet – auf den verwalteten Servern braucht's keine Software, nur SSH-Zugriff und Python.
2) Push vs. Pull
Bei Configuration-Management gibt's zwei grundsätzliche Architektur-Ansätze. Ansible folgt dem Push-Modell, was es deutlich einfacher zu starten macht:
3) Die zentralen Konzepte
Ansible hat eine eigene Terminologie die man verstehen muss. Hier die wichtigsten Begriffe als Übersicht – sie werden in den folgenden Abschnitten alle vertieft:
| Begriff | Bedeutung |
|---|---|
| Control Node | Der Rechner auf dem Ansible läuft (dein Laptop oder ein CI-Server) |
| Managed Nodes | Die Server die du verwaltest (Webserver, DBs, etc.) |
| Inventory | Datei mit der Liste aller Managed Nodes, gruppiert |
| Playbook | YAML-Datei mit Tasks die ausgeführt werden sollen |
| Task | Eine einzelne Aktion: „installiere Nginx", „starte Service" |
| Module | Plugin das eine Aktion ausführt: apt, service, file, … |
| Role | Wiederverwendbare Sammlung von Tasks und Variablen für einen Zweck |
| Vars | Variablen die in Tasks und Templates genutzt werden |
| Handler | Task der nur läuft wenn andere Tasks „benachrichtigen" (z.B. Service-Restart) |
4) Inventory: deine Server-Liste
Das Inventory ist die Datei in der du deine Server organisierst. In INI-Format oder YAML. Du gruppierst Server nach Funktion und kannst pro Gruppe Variablen vergeben:
[production:children] erstellst du Meta-Gruppen die andere Gruppen zusammenfassen. So kannst du im Playbook sagen „auf allen production-Servern" und alle drei Untergruppen werden adressiert. Sehr praktisch für komplexe Setups. Inventories können auch dynamisch sein – z.B. via Skript Server aus AWS oder Azure abrufen.Ein einfaches Inventory als YAML-Variante:
5) Playbook: das Herzstück
Ein Playbook ist die Hauptdatei – beschreibt was getan werden soll. YAML-Datei mit einer Liste von Plays, die jeweils Tasks auf bestimmten Hosts ausführen. Schauen wir uns ein realistisches Playbook für Nginx-Setup an:
Vier Tasks: apt-Cache aktualisieren, Nginx installieren, Konfig kopieren, Service aktivieren. Plus ein Handler der Nginx neu startet – aber nur wenn die Konfig sich geändert hat (durch notify ausgelöst).
Ausgeführt wird das Playbook mit ansible-playbook. So sieht die Ausgabe aus:
6) Idempotenz: das Schlüssel-Konzept
Das wichtigste Konzept in Ansible: Idempotenz. Tasks sind so geschrieben, dass mehrfaches Ausführen dasselbe Ergebnis hat. Erstes Run installiert Nginx – zweites Run sieht „ist schon installiert" und tut nichts:
apt, file, service sind alle idempotent. Achtung: das command- und shell-Modul sind NICHT idempotent! Die laufen jedes Mal. Daher Konditionen mit when:, changed_when:, creates: nutzen.7) Wichtige Module
Ansible hat über 3.000 Module für alle möglichen Aufgaben. Die wichtigsten die du täglich brauchen wirst:
command oder shell. apt: name=nginx ist besser als shell: apt install nginx – ersteres ist idempotent, Letzteres läuft jedes Mal. Bei shell/command immer mit Bedingungen arbeiten.8) Roles: Wiederverwendung im Großen
Bei größeren Setups packst du Tasks in Roles – wiederverwendbare Bausteine mit fester Verzeichnis-Struktur. Eine Role bündelt alles was du für eine bestimmte Funktion brauchst (z.B. einen kompletten Webserver) und kann in verschiedenen Playbooks wiederverwendet werden:
roles: [webserver, database] – das spart enorm Code-Duplikation.Im Playbook nutzt du Roles so:
Es gibt auch öffentliche Roles im Ansible Galaxy – wie der Marketplace bei GitHub Actions. ansible-galaxy install geerlingguy.nginx installiert eine fertige Webserver-Role.
9) Jinja2-Templates: dynamische Konfig-Dateien
Template-Dateien sind ein mächtiges Feature: du schreibst eine Config-Datei mit Platzhaltern, Ansible füllt die Variablen ein. Verwendet wird Jinja2, dieselbe Template-Sprache wie in Django/Flask:
Templates können Variablen einsetzen ({{ var }}), Bedingungen haben ({% if %}) und Schleifen nutzen ({% for %}). Damit erzeugst du komplexe Config-Dateien dynamisch, je nach Server unterschiedlich. Facts wie ansible_hostname, ansible_os_family, ansible_memory_mb stehen automatisch zur Verfügung – Ansible sammelt sie zu Beginn jedes Plays über das Gathering Facts-Task.
10) Ansible Vault: Geheimnisse schützen
Passwörter und API-Keys gehören nie im Klartext in Playbooks. Ansible Vault verschlüsselt sensible Daten:
Die verschlüsselte Datei kannst du gefahrlos in Git committen – ohne Passwort ist sie nutzlos. Beim Playbook-Run gibst du das Passwort ein (oder lädst es aus einer Passwort-Datei). Mehr zu Krypto in K08.
11) Best Practices
Aus der Praxis – was du tun und lassen solltest:
- Roles für Wiederverwendung: nicht alles in ein Mega-Playbook stopfen, in Rollen aufteilen
- Group_vars und host_vars: Variablen pro Gruppe oder pro Host in
group_vars/undhost_vars/ - Tags nutzen:
tags: [config]erlaubt selektives Ausführen:--tags config - Check-Mode:
--checksimuliert die Ausführung ohne Änderungen – „Dry Run" - Diff-Mode:
--diffzeigt Datei-Änderungen an - Linter nutzen:
ansible-lintprüft Playbooks auf Best-Practice-Verstöße - Vault für Secrets: niemals Passwörter im Klartext
- Idempotenz testen: Playbook zweimal laufen lassen – beim zweiten Run sollte alles „ok" sein
- Roles aus Ansible Galaxy: für Standard-Setups nicht das Rad neu erfinden
12) Ansible in CI/CD-Pipelines
Ansible wird oft direkt in CI/CD-Pipelines genutzt – z.B. zum Deployment nach einem erfolgreichen Build:
So vereinst du Build (CI) und Deploy (Ansible): jeder Push auf main triggert die Pipeline, baut die App, und Ansible konfiguriert die Server und startet die neue Version.
13) Ansible Tower / AWX
Für Enterprise-Umgebungen gibt's Ansible Tower (kommerziell, von Red Hat) bzw. AWX (Open-Source-Variante). Das bietet zusätzlich:
- Web-UI für Playbook-Ausführung
- Scheduling (regelmäßige Runs)
- Rollenbasierte Zugriffsrechte (RBAC)
- Audit-Logs (wer hat wann was ausgeführt)
- Workflows (mehrere Playbooks verketten)
- Notification-Integrationen (Slack, E-Mail)
Für kleine Projekte ist Tower Overkill – da reicht die CLI. Bei größeren Teams mit vielen Playbooks und Compliance-Anforderungen lohnt's sich.
Zusammenfassung
Ansible ist Red Hats Open-Source-Tool für Configuration Management. Agentless – braucht nur SSH und Python auf den Zielservern. Push-Modell: Control Node steuert Managed Nodes. Konzepte: Inventory (Server-Liste mit Gruppen), Playbook (YAML mit Tasks), Module (apt, file, service, template), Roles (wiederverwendbare Task-Sammlungen mit fester Struktur), Handler (Tasks die bei Änderungen ausgelöst werden). Idempotenz ist Schlüsselprinzip: Tasks tun nur was nötig, mehrfaches Ausführen ändert nichts. Templates mit Jinja2 für dynamische Configs. Vault verschlüsselt Secrets. Ansible Galaxy als Marketplace für vorgefertigte Roles. Best Practices: spezifische Module statt shell, Idempotenz testen, Vault für Secrets, ansible-lint nutzen. Sehr beliebt in CI/CD-Pipelines als Deploy-Schritt. Für Enterprise: Tower/AWX mit Web-UI und RBAC.
