Ansible Playbooks: Von einfachen Aufgaben zu komplexen Automatisierungen

Nach der Einführung in die Grundlagen von Ansible widmen wir uns nun dem Herzstück der Automatisierung: den Playbooks. Mit ihnen lassen sich komplexe Abläufe in klar strukturierten YAML-Dateien beschreiben und auf beliebig viele Systeme gleichzeitig anwenden.


Aufbau eines Ansible Playbooks

Ein Playbook besteht aus einer oder mehreren Plays, die jeweils:

  • eine Zielgruppe (z. B. Servergruppe im Inventory),
  • eine Reihe von Tasks (auszuführende Aufgaben) und
  • eventuell Variablen oder Rollen enthalten.

Beispiel für ein einfaches Playbook:

---
- name: Webserver installieren
  hosts: webserver
  become: yes
  tasks:
    - name: Apache installieren
      apt:
        name: apache2
        state: present

    - name: Apache starten
      service:
        name: apache2
        state: started
        enabled: yes

Dieses Playbook installiert und startet den Apache-Webserver auf allen Hosts in der Gruppe webserver.


Module: Die Bausteine von Ansible

Ansible stellt eine Vielzahl an Modulen bereit, die typische Aufgaben abdecken:

  • Systemverwaltung: user, group, service
  • Paketmanagement: apt, yum, dnf, pip
  • Dateiverwaltung: copy, file, template
  • Netzwerk und Cloud: Module für AWS, Azure, GCP, Docker, Kubernetes
  • Datenbanken: mysql_db, postgresql_db

Module werden in Playbooks aufgerufen und führen einzelne Tasks aus.


Variablen und Templates

Mit Variablen lassen sich Playbooks flexibel gestalten:

vars:
  web_package: apache2

tasks:
  - name: Webserver installieren
    apt:
      name: "{{ web_package }}"
      state: present

Templates mit Jinja2 ermöglichen dynamische Konfigurationsdateien, z. B. für Webserver oder Datenbanken.


Idempotenz und Wiederholbarkeit

Ein zentrales Prinzip von Ansible ist die Idempotenz:

  • Mehrfaches Ausführen eines Playbooks führt zu keinen unerwarteten Änderungen.
  • Systeme werden nur dann angepasst, wenn es wirklich nötig ist.

Dies garantiert stabile und vorhersehbare Automatisierungen.


Beispiel: Kombination mehrerer Aufgaben

---
- name: Komplettes Setup für Webserver
  hosts: webserver
  become: yes
  tasks:
    - name: Apache installieren
      apt:
        name: apache2
        state: present

    - name: Konfigurationsdatei bereitstellen
      template:
        src: apache.conf.j2
        dest: /etc/apache2/sites-available/000-default.conf
      notify:
        - Apache neu laden

  handlers:
    - name: Apache neu laden
      service:
        name: apache2
        state: reloaded

Mit Handlern kann man Dienste nur dann neu starten, wenn sich Konfigurationsdateien geändert haben.


Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert