Files
JonnyBravo 05968a9db9
Ansible Deploy (ubuntu-test-2) / deploy (push) Successful in 8s
gitea action
2026-10-14 10:39:57 +02:00
..
2026-09-14 11:36:01 +02:00
2026-10-14 10:39:57 +02:00
2026-09-14 11:36:01 +02:00
2026-10-14 10:39:57 +02:00
2026-10-05 11:54:31 +02:00
2026-10-14 10:39:57 +02:00

Ansible-Beispiel: Rolle, Variablen & Templating (localhost)

Ein vollständiges Beispiel-Projekt, das alle Konzepte aus der Präsentation demonstriert:

  • Rollen-Struktur (roles/webserver/)
  • Variablen-Vergabe mit Präzedenz (defaults → vars → group_vars → host_vars)
  • Templating mit Jinja2 (.j2-Dateien, Schleifen, Filter)
  • FQCN (ansible.builtin.*)
  • Facts (ansible_facts['distribution'], ansible_facts['hostname'], …)
  • Handler (notify → Dienst neu starten)

Verzeichnisstruktur

Beispiel/
├── ansible.cfg                  # Ansible-Konfiguration
├── inventory.yml                # Ziel-Hosts (localhost)
├── site.yml                     # Haupt-Playbook
├── group_vars/
│   └── all.yml                  # Variablen für ALLE Hosts
├── host_vars/
│   └── localhost.yml            # Host-spezifische Variablen
└── roles/
    └── webserver/
        ├── tasks/main.yml       # Aufgaben
        ├── handlers/main.yml    # Neustart-Aktionen (notify)
        ├── templates/
        │   ├── nginx.conf.j2    # Jinja2-Template
        │   └── index.html.j2    # Template mit Schleife + Filter
        ├── defaults/main.yml    # Standard-Variablen (niedrigste Priorität)
        ├── vars/main.yml        # Rollen-Variablen (höhere Priorität)
        └── meta/main.yml        # Rollen-Metadaten

Ausführen

# Trockenlauf — zeigt nur, was passieren würde
ansible-playbook site.yml --check

# Echt ausführen (benötigt sudo wegen Paket-Installation)
ansible-playbook site.yml

# Variable per CLI überschreiben (HÖCHSTE Priorität!)
ansible-playbook site.yml -e "nginx_port=9090"

Wichtig: Das Playbook läuft über connection: local direkt auf diesem Rechner — „localhost" ist kein echter Host im Netzwerk, es gibt nichts, wohin per SSH verbunden werden müsste. (Zusätzlich ist ansible_connection: local auch im inventory.yml hinterlegt.)


Variablen-Präzedenz im Beispiel

Dieselbe Variable (nginx_port) ist an mehreren Stellen definiert — wer gewinnt?

Priorität Ort Wert
1 (höchste) Extra-Variablen -e 9090 (wenn gesetzt)
2 host_vars/localhost.yml 8080
3 group_vars/all.yml —
4 roles/.../vars/main.yml nginx_user
5 (niedrigste) roles/.../defaults/main.yml 80 (Default)

→ Ergebnis: nginx_port wird 8080, weil host_vars Vorrang vor defaults hat (die Default 80 wird überschrieben).


Für Manjaro / Arch Linux anpassen

Das Beispiel nutzt apt (Debian/Ubuntu). Auf Manjaro ersetzt Du in roles/webserver/tasks/main.yml das Modul:

- name: Pakete installieren
  community.general.pacman:
    name: "{{ packages }}"
    state: present
    update_cache: true

und passt die Paketnamen (nginx, git, curl bleiben gleich) sowie nginx_user ggf. an.