92 lines
3.1 KiB
Markdown
92 lines
3.1 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```yaml
|
|
- 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.
|