Ansible - Server-Konfiguration reproduzierbar machen
Wer Server manuell konfiguriert hat irgendwann das Problem: der zweite Server sieht anders aus als der erste. Drei Monate später weiß niemand mehr warum. Ansible löst das.
Was Ansible macht
Ansible verbindet sich per SSH zu Servern und führt Tasks aus. Kein Agent, kein Daemon. Nur SSH und Python auf dem Zielserver.
Tasks werden in YAML-Dateien beschrieben. Idempotent — mehrfach ausführen ändert nichts wenn der Zielzustand schon erreicht ist.
Installation
pip install ansible
Inventory
# hosts.ini [webservers] web1.example.com web2.example.com [dbservers] db1.example.com
Erstes Playbook
# setup.yml
- name: Webserver konfigurieren
hosts: webservers
become: true
tasks:
- name: Nginx installieren
apt:
name: nginx
state: present
update_cache: true
- name: Nginx-Konfiguration kopieren
copy:
src: files/nginx.conf
dest: /etc/nginx/nginx.conf
owner: root
mode: '0644'
notify: nginx reload
- name: Nginx aktivieren
systemd:
name: nginx
enabled: true
state: started
handlers:
- name: nginx reload
systemd:
name: nginx
state: reloaded
ansible-playbook -i hosts.ini setup.yml
Variables
vars:
php_version: "8.3"
tasks:
- name: PHP installieren
apt:
name: "php{{ php_version }}-fpm"
state: present
Warum das besser ist als Bash-Scripts
Bash-Scripts scheitern wenn ein Paket schon installiert ist oder eine Datei schon existiert. Ansible prüft erst den aktuellen Zustand.
Das Playbook ist gleichzeitig die Dokumentation was auf dem Server läuft. Kein "was haben wir da nochmal manuell gemacht?" mehr.