Ansible
💡 Ansible automatisiert die Administration mehrerer Systeme über SSH. Diese Seite ist die kurze Übersicht; die Details stehen in den verlinkten Seiten.
Architektur
flowchart LR
subgraph Repo["Git-Repository"]
I[Inventory]
P[Playbooks]
M[Module]
end
Repo -->|clone/pull| C["Controller (Ansible)"]
C -->|SSH| T1[Target 1]
C -->|SSH| T2[Target 2]
C -->|SSH| Tn[Target n]
Der Controller (Steuerrechner) liest das Repository (selbstdokumentierende single source of truth) mit Inventory (Inventar), Playbooks (Ablaufbeschreibungen) und Modulen (Bibliotheken).
Er verbindet sich per SSH mit den Targets (Zielsystemen); dort ist kein dauerhaft laufender Ansible-Agent nötig.
Voraussetzungen
| System | Voraussetzung |
|---|---|
| Controller | Python 3, Ansible, SSH-Client, Git (Empfehlung: Linux, macOS oder WSL; eigener Benutzer, nicht root) |
| Target | SSH-Server, Python 3, Benutzer mit sudo, öffentlicher Schlüssel in ~/.ssh/authorized_keys(Empfehlung: eigener Ansible-Benutzer) |
| Netzwerk | SSH-Port erreichbar (Empfehlung: Port 22, Firewall freigegeben) |
🔐 Der SSH-Key ist der Zugang: Erst wenn der Key-Login ohne Passwort funktioniert, kann Ansible die Targets erreichen.
Module finden
Offizielle Ansible-Dokumentation (latest):
- Index (alle empfohlenen Module)
ansible.builtin(Grundausstattung von Ansible)- Collections (Sammlungen von Modulen, oft aus der Community)
Module statt Shell-Kommandos: Sie beschreiben den Sollzustand und sind idempotent.
Grundlagen
- 1 Grundlagen: SSH und YAML — die vier SSH-Dateien und die YAML-Regeln.
Deklarativ statt prozedural
Der Vorteil: Wir beschreiben das Ziel, nicht den Weg. Prozedural müssten wir jeden Befehl und jede Prüfung selbst schreiben. Bei Ansible sagen wir zum Beispiel „nginx soll installiert sein“, nicht „führe apt-get install nginx aus“. Das Modul entscheidet, was zu tun ist. Dadurch sind Playbooks kürzer, lesbarer und idempotent.
Ganz ehrlich: Playbooks werden von oben nach unten ausgeführt, und die Reihenfolge der Tasks ist wichtig. when, loop und notify steuern den Ablauf; command und shell sind prozedural. Ansible ist deshalb hybrid — deklarative Module, prozedurale Playbook-Steuerung.
Idempotenz
Idempotent heißt: Egal, wie oft wir ein Playbook ausführen — das Ergebnis bleibt gleich. Ist der Sollzustand schon erreicht, ändert Ansible nichts. Beispiel: state: present installiert ein Paket nur, wenn es noch fehlt; beim nächsten Lauf meldet Ansible changed=0.
Check-Mode und Diff
ansible-playbook --check --diff site.yml
--check ist der Probelauf und zeigt, was sich ändern würde; --diff zeigt die Dateiänderungen. Erst nach der Prüfung ohne diese Flags anwenden.
Ausblick
- Rollen (
roles) für wiederverwendbare Playbooks - Ansible Vault für Geheimnisse
- Collections für weitere Module
- Rechteausweitung mit
become: true(->sudo) ansible-lintfür die Qualitätssicherung