Anlegen eigener Rollen mit ansible-galaxy

Ansible bietet ein flexibles und skalierbares Rollenkonzept, das es uns ermöglicht, komplexe Automatisierungsaufgaben in wiederverwendbare, modulare Einheiten zu unterteilen. Die Erstellung eigener Rollen ist eine der effizientesten Möglichkeiten, um Konfigurationsmanagement mit Ansible zu organisieren und wiederverwendbar zu machen. In diesem Blog-Beitrag zeige ich, wie du eigene Ansible-Rollen mit Hilfe von ansible-galaxy erstellst.


Was ist Ansible Galaxy?

Ansible Galaxy ist eine Plattform, die von der Ansible-Community bereitgestellt wird, um vorgefertigte Rollen zu teilen. Neben der Plattform wird das Kommandozeilen-Tool ansible-galaxy verwendet, um Rollen lokal zu verwalten und zu erstellen.

Mit dem ansible-galaxy-Befehl kannst du:

  • Eigene Rollen lokal erstellen.
  • Rollen aus der Ansible Galaxy-Community herunterladen.
  • Rollen verwalten und aktualisieren.

In diesem Beitrag konzentrieren wir uns auf die Erstellung eigener Rollen.


Warum sollte man eigene Rollen erstellen?

Das Erstellen eigener Rollen bietet mehrere Vorteile:

  1. Modularität: Rollen ermöglichen es, Aufgaben in kleinere, logische Teile zu zerlegen.
  2. Wiederverwendbarkeit: Eine gut geschriebene Rolle kann in mehreren Projekten verwendet werden.
  3. Wartbarkeit: Rollen helfen dabei, Konfigurationen übersichtlich und strukturiert zu halten, was die Wartung erleichtert.
  4. Teamarbeit: Rollen erlauben es verschiedenen Teams, unabhängig an bestimmten Aspekten einer Infrastruktur zu arbeiten.

Schritte zum Anlegen einer eigenen Rolle

1. Voraussetzungen

Bevor wir mit der Erstellung einer Rolle beginnen, stelle sicher, dass Ansible auf deinem System installiert ist. Du kannst dies mit folgendem Befehl überprüfen:

ansible --version

Falls Ansible nicht installiert ist, kannst du es auf einem Linux-System mit dem folgenden Befehl installieren:

sudo apt install ansible

2. Anlegen einer Rolle mit ansible-galaxy init

Um eine eigene Rolle anzulegen, verwenden wir den Befehl ansible-galaxy init. Dies erstellt eine Verzeichnisstruktur, die alle erforderlichen Komponenten für die Rolle enthält.

ansible-galaxy init <rollenname>

Beispiel:

ansible-galaxy init apache_webserver

Dieser Befehl erzeugt die folgende Verzeichnisstruktur:

apache_webserver/
├── defaults/
│   └── main.yml
├── files/
├── handlers/
│   └── main.yml
├── meta/
│   └── main.yml
├── tasks/
│   └── main.yml
├── templates/
├── tests/
│   ├── inventory
│   └── test.yml
└── vars/
    └── main.yml

3. Verzeichnisstruktur einer Rolle

Die Verzeichnisstruktur mag auf den ersten Blick umfangreich erscheinen, aber jede Komponente hat ihren eigenen Zweck:

  • tasks/: Enthält die Hauptaufgaben der Rolle. In der Datei main.yml werden die Aktionen definiert, die Ansible ausführen soll.
  • handlers/: Definiert Handler, die bei Änderungen ausgeführt werden, wie z.B. das Neustarten eines Dienstes.
  • files/: Hier werden Dateien abgelegt, die auf das Zielsystem kopiert werden sollen.
  • templates/: Hier werden Jinja2-Templates gespeichert, die mit Variablen gefüllt und auf das Zielsystem übertragen werden.
  • vars/: Enthält benutzerdefinierte Variablen für die Rolle.
  • defaults/: Enthält Standardwerte für Variablen. Diese können von anderen Variablen überschrieben werden.
  • meta/: Hier werden Metadaten der Rolle gespeichert, z.B. Abhängigkeiten von anderen Rollen.
  • tests/: Ermöglicht die Definition von Tests für die Rolle.

Beispiel: Eigene Apache-Webserver-Rolle

Um die Rolle besser zu verstehen, werden wir nun eine einfache Rolle erstellen, die den Apache-Webserver auf einem Server installiert und konfiguriert.

1. Aufgaben definieren (tasks/main.yml)

Beginnen wir mit der Definition der Aufgaben, die die Rolle ausführt. In diesem Fall wollen wir Apache installieren, starten und sicherstellen, dass es bei einem Neustart des Servers automatisch gestartet wird.

---
- name: Installiere Apache
  apt:
    name: apache2
    state: present
  become: true

- name: Starte Apache und sorge dafür, dass es beim Booten aktiviert ist
  systemd:
    name: apache2
    enabled: true
    state: started
  become: true

2. Variablen hinzufügen (defaults/main.yml)

Es ist sinnvoll, bestimmte Werte wie den Server-Administrator oder den Dokumentenpfad als Variablen zu definieren, damit sie bei Bedarf angepasst werden können.

---
server_admin: "webmaster@localhost"
doc_root: "/var/www/html"

3. Apache-Konfigurationsvorlage erstellen (templates/apache2.conf.j2)

Jetzt erstellen wir eine Vorlage für die Apache-Konfiguration, die mit den oben definierten Variablen gefüllt wird.

<VirtualHost *:80>
    ServerAdmin {{ server_admin }}
    DocumentRoot {{ doc_root }}
</VirtualHost>

4. Vorlagendatei anwenden (tasks/main.yml)

Nun fügen wir eine Aufgabe hinzu, die diese Konfigurationsvorlage auf dem Zielsystem bereitstellt.

- name: Übertrage Apache-Konfiguration
  template:
    src: apache2.conf.j2
    dest: /etc/apache2/sites-available/000-default.conf
  notify: Starte Apache neu

5. Handler definieren (handlers/main.yml)

Ein Handler wird ausgelöst, wenn sich die Konfiguration ändert. Hier definieren wir einen Handler, der Apache neu startet.

---
- name: Starte Apache neu
  systemd:
    name: apache2
    state: restarted

6. Rolle testen

Du kannst die Rolle in einem Playbook verwenden, um die Installation auf einem Host durchzuführen. Erstelle dazu ein Playbook site.yml:

---
- hosts: webserver
  become: true
  roles:
    - apache_webserver

Führe das Playbook dann mit Ansible aus:

ansible-playbook -i inventory site.yml

Fazit

Das Anlegen eigener Rollen mit ansible-galaxy ist eine hervorragende Möglichkeit, die Ansible-Projekte modular und wiederverwendbar zu gestalten. Durch die klare Struktur und die Möglichkeit, Rollen einfach zu verteilen und zu testen, wird die Verwaltung von Konfigurationen deutlich vereinfacht.

In diesem Beitrag haben wir Schritt für Schritt gezeigt, wie du eine eigene Rolle erstellen und diese in einem Playbook verwenden kannst. Du kannst dieses Konzept erweitern und komplexere Rollen für spezifische Anforderungen entwickeln. Indem du deine Rollen gut strukturierst und modular aufbaust, wird deine Ansible-Umgebung effizienter und leichter wartbar.


Ich hoffe, dieser Beitrag hat dir einen klaren Einstieg in die Erstellung eigener Rollen mit ansible-galaxy gegeben! Wenn du Fragen oder Anregungen hast, hinterlasse gerne einen Kommentar!

Schreibe einen Kommentar

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