Ansible Collections – Mehr Übersichtlichkeit und einfachere Teilhabe bei Ansible

Ansible ist dieser Tage das am schnellsten wachsende Konfigurationsmanagementtool. Dadurch ist auch eine stetig wachsende Community entstanden. Aufgrund der simplen Architektur und der dadurch einfachen Erweiterbarkeit stellen immer mehr Unternehmen und Privatpersonen ihre Rollen, Module und Playbooks für ihre Produkte und Projekte bereit.  

Das Ansible Core Projekt hat auf Github mittlerweile eine vierstellige Anzahl an offenen Pull Requests und Issues. Das ist nicht nur aus Sicht Red Hats mittlerweile unübersichtlich..

Für geläufigere Anwendungsfälle von Ansible – zum Beispiel die Installation des Docker Daemons oder des apache-Webservers – hat Red Hat vor einiger Zeit die Ansible Galaxy erschaffen: Ein Ort, an dem Mitglieder der Community generische Rollen für die freie Nutzung zur Verfügung stellen. Somit muss das Rad nicht jedes Mal neu erfunden werden. Die Community entwickelt aber nicht nur Rollen, sondern auch Module und weitere Plugins für teilweise sehr spezielle Fälle. Um mehr Struktur und eine bessere Teilhabemöglichkeit der Community im Ansible Projekt zu gewährleisten, hat Red Hat Ansible Collections geschaffen: Das sind Produkt- bzw. projektspezifische Sammlungen von Playbooks, Rollen, Modulen und Plugins. Diese werden wie bisher Rollen über die Ansible Galaxy bereitgestellt. Die Einführung von Collections ermöglicht Unternehmen oder Projekten mehr Kontrolle über den selbst bereitgestellten Ansible Code. Dadurch können die eigenen Module oder Plugins schneller Upstream gebracht werden: die Pull Requests laufen weniger Gefahr nach unten in der Liste abzurutschen oder in Vergessenheit zu geraten. Sind sie einmal gemerged, muss man nicht mehr den nächsten Release von Ansible abwarten, sondern kann einfach die neueste Version seiner Collection einbinden. Gleichzeitig bleibt durch die Ansible Galaxy die Sichtbarkeit der Collection erhalten. Red Hat hat den ersten Schritt in die Richtung gemacht und zu einer Reihe von Projekten Collections erstellt. Diese werden auch von offizieller Seite gewartet. Dazu zählen u.a. Ansible Tower, Amazon AWS und Red Hat Satellite. Die Ansible Module, die wir für unseren orcharhino verwenden und aktiv weiterentwickeln sind mittlerweile auch als Collection verfügbar.

Verwendung

Die Handhabe ist ähnlich zu denen der Rollen in der Ansible Galaxy. Installiert wird eine Collection entweder via Kommandozeile:

ansible-galaxy collection install my_namespace.my_collection:1.0.0

oder, wenn man mehrere auf einmal installieren will über eine requirements-Datei:

---
collections:
# With just the collection name
- my_namespace.my_collection

# With the collection name, version, and source options
- name: my_namespace.my_other_collection
 version: 1.0.3 # version range identifiers (default: ``*``)
 source: https://galaxy.ansible.com # The Galaxy URL to pull the collection from (default: ``--api-server`` from cmdline)
...

Ist die Collection einmal installiert können die darin enthaltenen Module, Rollen und Plugins ganz einfach eingebunden werden:

---
- hosts: all
 tasks:
 - import_role:
 name: my_namespace.my_collection.role1

 - my_namespace.mycollection.mymodule:
 option1: value

 - debug:
 msg: '{{ lookup("my_namespace.my_collection.lookup1", 'param1')| my_namespace.my_collection.filter1 }}'
...

Um sich nicht die Finger wund zu tippen kann man die Collection am Anfang des Plays auch einfach komplett importieren und dann alle darin enthaltenen Module und Rollen (nicht jedoch Filter und Lookup-Plugins!) verwenden:

---
- hosts: all
 collections:
 - my_namespace.my_collection
 tasks:
 - import_role:
 name: role1

 - mymodule:
 option1: value

 - debug:
 msg: '{{ lookup("my_namespace.my_collection.lookup1", 'param1')| my_namespace.my_collection.filter1 }}'
...

Quelle der Codebeispiele

Die bisherigen Ansible Versionen (≤2.9) enthalten zusätzlich zu den von Red Hat offiziell unterstützten sowie gepflegten Modulen und Plugins auch eine Vielzahl von der Community gepflegter Plugins und Modulen. Mit Ansible 2.10 werden all die Community-gepflegten Inhalte in eine community.general Collection ausgegliedert. Ansibles Prämisse war bisher immer “batteries included”, d.h. dass nach der Installation von Ansible nichts mehr nachinstalliert werden muss. Die Standardinstallation von Ansible 2.10 enthält weiterhin die >3000 Module und Plugins, sodass die meisten Playbooks mit dem Upgrade auf 2.10 wahrscheinlich nur kleinerer Änderungen bedürfen. So stimmt diese Prämisse weiterhin. Die großen Veränderungen passieren mit 2.10 unter der Haube. Daher werden sie nach und nach in Erscheinung treten, sobald die Community immer mehr Collections bereitstellt.

Mehr über die Verwendung und das Erstellen von Ansible Collections erfahfen Sie in unseren Ansible Trainings. Auch an unserem OSAD wird es einen Advanced Ansible Workshop geben, in dem wir auf Collections näher eingehen werden.

The following two tabs change content below.
ATIX-Crew

ATIX-Crew

Der ATIX-Crew gehören Mitglieder aus den unterschiedlichsten Bereichen an. Neben Consultants und Entwicklern schließt sie auch die Kollegen aus dem Support sowie aus Vertrieb und Marketing mit ein.

This post is also available in: English