Einführung in Collections und Ansible Galaxy

Ansible ist ein unverzichtbares Tool für die Automatisierung von IT-Prozessen, das in der Lage ist, große und komplexe Umgebungen effizient zu verwalten. Im Laufe der Zeit sind immer mehr Module und Integrationen in Ansible entstanden, was die Verwaltung von Ansible-Komponenten zu einer Herausforderung machen kann. Um dieser Herausforderung zu begegnen, hat Ansible das Konzept der Collections eingeführt. Collections ermöglichen es, Inhalte wie Rollen, Module, Playbooks und Plugins in wiederverwendbare und austauschbare Einheiten zu organisieren.

Zusätzlich dazu bietet Ansible Galaxy eine zentrale Plattform, auf der Benutzer ihre eigenen Collections teilen und auf vorgefertigte Collections zugreifen können. In diesem Blog-Beitrag erfährst du, was Ansible Collections sind, wie du sie verwendest und wie du Ansible Galaxy nutzen kannst, um deine Automatisierungsaufgaben zu optimieren.

1. Was sind Ansible Collections?

Ansible Collections bieten eine strukturierte Möglichkeit, alle Ansible-Komponenten zu bündeln, die zur Automatisierung eines bestimmten Anwendungsbereichs erforderlich sind. Sie fassen Module, Plugins, Rollen, Playbooks, Dokumentationen und weitere Inhalte in einer einzigen, wiederverwendbaren Einheit zusammen.

Der Hauptvorteil von Collections liegt in ihrer Modularität und Wiederverwendbarkeit. Anstatt viele einzelne Rollen oder Module zu verwalten, kannst du eine Collection verwenden, die alle benötigten Komponenten enthält.

Eine typische Collection kann enthalten:

  • Rollen: Wiederverwendbare Automatisierungseinheiten für bestimmte Aufgaben (z. B. Webserver-Konfiguration).
  • Module: Spezifische Funktionen wie das Installieren von Paketen, Ändern von Dateien oder Verwalten von Diensten.
  • Plugins: Zusätzliche Erweiterungen wie Lookup- oder Connection-Plugins.
  • Playbooks: Vorgefertigte Automatisierungs-Skripte, die mehrere Aufgaben kombinieren.
  • Dokumentation: Informationen zur Verwendung der Collection und ihrer Bestandteile.

Die Einführung von Collections bietet zudem eine bessere Namensraumtrennung. Anstatt alle Module und Rollen im globalen Namensraum zu haben, werden sie unter dem Namen der Collection organisiert, was Namenskollisionen vermeidet.

2. Struktur einer Ansible Collection

Eine Ansible Collection folgt einer klar definierten Verzeichnisstruktur, die ähnlich wie Rollen organisiert ist, aber erweiterte Funktionalitäten bietet. Eine typische Verzeichnisstruktur einer Collection sieht wie folgt aus:

my_namespace.my_collection/
├── docs/
├── plugins/
│   ├── modules/
│   └── other_plugins/
├── roles/
│   └── myrole/
├── playbooks/
├── meta/
│   └── runtime.yml
├── README.md
├── galaxy.yml
└── tests/
  • docs/: Dokumentation der Collection.
  • plugins/: Hier werden Plugins wie Module, Lookup-Plugins und Filter gespeichert.
  • roles/: Enthält Rollen, die innerhalb der Collection verwendet werden.
  • playbooks/: Playbooks, die direkt mit der Collection ausgeliefert werden.
  • meta/: Informationen zur Collection, einschließlich Abhängigkeiten zu anderen Collections.
  • galaxy.yml: Die Datei, die Metadaten über die Collection enthält, wie Name, Version und Abhängigkeiten.

3. Verwendung von Collections in Ansible

Die Verwendung von Collections in Ansible ist einfach. Zunächst musst du eine Collection installieren. Du kannst dies über Ansible Galaxy tun, Ansible’s zentrale Plattform für vorgefertigte Rollen und Collections.

Collection installieren

Um eine Collection von Ansible Galaxy zu installieren, kannst du den folgenden Befehl verwenden:

ansible-galaxy collection install <namespace>.<collection_name>

Ein Beispiel für die Installation der beliebten Community-Collection community.general:

ansible-galaxy collection install community.general




Die installierte Collection wird im Verzeichnis /home/<user>/.ansible/collections/ gespeichert. Alternativ kannst du ein Verzeichnis für Collections in deiner Projektstruktur angeben und es in deiner ansible.cfg-Datei konfigurieren:

[defaults]
collections_paths = ./collections
Verwendung von Modulen aus Collections

Nachdem du eine Collection installiert hast, kannst du Module oder Rollen aus dieser Collection in deinen Playbooks verwenden. Hier ist ein Beispiel, wie du ein Modul aus der community.general-Collection verwendest:

---
- name: Verwenden eines Moduls aus der community.general Collection
  hosts: localhost
  tasks:
    - name: Systemdatum und -zeit abrufen
      community.general.date:
        format: "%Y-%m-%d %H:%M:%S"
      register: current_time

    - name: Datum und Zeit anzeigen
      debug:
        msg: "Aktuelle Zeit: {{ current_time }}"

In diesem Beispiel wird das date-Modul aus der Collection community.general verwendet. Die Namenskonvention für Module aus einer Collection ist immer <namespace>.<collection_name>.<modul_name>.

Verwendung von Rollen aus Collections

Auch Rollen aus einer Collection können leicht eingebunden werden. Hier ein Beispiel:

---
- name: Rolle aus der Collection verwenden
  hosts: all
  roles:
    - my_namespace.my_collection.myrole

Dies zeigt, wie eine Rolle aus einer Collection genutzt wird. Die Struktur ist immer <namespace>.<collection_name>.<role_name>.

4. Erstellung einer eigenen Collection

Wenn du eine eigene Ansible Collection erstellen möchtest, kannst du dies ganz einfach mit dem Ansible Galaxy CLI-Tool tun. Der folgende Befehl erstellt die Grundstruktur einer neuen Collection:

ansible-galaxy collection init <namespace>.<collection_name>

Beispiel:

ansible-galaxy collection init mynamespace.mycollection

Das erstellt ein Verzeichnis mit der Standardstruktur für deine Collection, wie oben beschrieben.

Sobald deine Collection erstellt wurde, kannst du deine Rollen, Module und Plugins in die entsprechenden Verzeichnisse einfügen. Die Datei galaxy.yml enthält die Metadaten zu deiner Collection:

namespace: mynamespace
name: mycollection
version: 1.0.0
license: MIT
dependencies:
  community.general: ">= 2.0.0"

Hier legst du den Namespace, den Sammlungsnamen und die Version fest. Du kannst auch Abhängigkeiten zu anderen Collections definieren.

Veröffentlichen einer Collection auf Ansible Galaxy

Wenn deine Collection fertig ist, kannst du sie auf Ansible Galaxy veröffentlichen, damit sie anderen Benutzern zur Verfügung steht. Dazu benötigst du einen Account auf Ansible Galaxy.

Zunächst musst du die Collection packen:

ansible-galaxy collection build

Dieser Befehl erstellt ein tar.gz-Archiv, das du dann mit folgendem Befehl hochladen kannst:

ansible-galaxy collection publish <pfad_zur_tar.gz_datei>

5. Ansible Galaxy – Eine Schatzkammer für Ansible-Rollen und -Collections

Ansible Galaxy ist die zentrale Plattform, auf der du vorgefertigte Rollen und Collections finden und nutzen kannst. Es erleichtert die Wiederverwendung von Automatisierungscode und reduziert den Aufwand für die Entwicklung neuer Automatisierungslösungen.

Du kannst auf Galaxy zugreifen, indem du die Webseite besuchst (https://galaxy.ansible.com/) oder das Ansible Galaxy CLI verwendest, um nach Rollen und Collections zu suchen, sie zu installieren und in deinen Projekten zu nutzen.

Beispiel, um nach einer Collection zu suchen:

ansible-galaxy collection search <suchbegriff>

6. Fazit

Ansible Collections und Ansible Galaxy bieten eine leistungsstarke Möglichkeit, Automatisierungslösungen effizient zu organisieren, zu teilen und zu wiederverwenden. Collections ermöglichen es, alle notwendigen Komponenten in einem sauberen und modularen Format zu bündeln, was die Skalierbarkeit und Wartbarkeit deiner Automatisierungsprojekte erheblich verbessert.

Durch die Nutzung von Ansible Galaxy kannst du schnell auf bereits entwickelte Rollen und Collections zugreifen, was den Entwicklungsprozess beschleunigt und dir Zeit spart. Ob du eine kleine Automatisierungsaufgabe löst oder eine große Infrastruktur verwaltest – Ansible Collections und Galaxy sind zentrale Werkzeuge für eine erfolgreiche Automatisierung.

Schreibe einen Kommentar

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