Überblick
Ansible® Roles sind eigenständige, portierbare Einheiten von Ansible-Automatisierungen und die bevorzugte Methode für das Gruppieren von zusammenhängenden Aufgaben und den dazugehörigen Variablen, Dateien, Handler und anderen Assets in einer bekannten Dateistruktur. Automatisierungsaufgaben können zwar auch ausschließlich in einem Ansible Playbook geschrieben werden, aber mit Ansible Roles können Sie ganze Pakete von Automatisierungsinhalten erstellen. Diese lassen sich dann in 1 oder auch mehreren Plays ausführen, für mehrere Playbooks wiederverwenden und in Sammlungen sogar mit anderen Nutzenden teilen.
Wie funktionieren Ansible Roles?
Ansible Roles werden in YAML ausgedrückt – einer von Menschen lesbaren Datenserialisierungssprache, die zum Schreiben von Konfigurationsdateien genutzt wird. Wenn eine Rolle in einer Aufgabe oder einem Play enthalten ist, sucht Ansible nach einer main.yml-Datei in mindestens 1 von 8 Standardrollenverzeichnissen. Wie unten mit erklärenden Anmerkungen dargestellt, beinhalten diese Verzeichnisse Rollen, Aufgaben, Handler, Module, Standardwerte, Variablen, Dateien, Vorlagen und Metadaten.
roles/ common/ # Diese Hierarchie stellt eine „Rolle“ dar tasks/ # main.yml # <-- Aufgabendateien können kleinere Dateien beinhalten, falls notwendig handlers/ # main.yml # <-- Handler-Datei templates/ # <-- Mit der Vorlagenressource zu verwendende Dateien ntp.conf.j2 # <------- Vorlagen enden auf .j2 files/ # bar.txt # <-- Mit der Textressource zu verwendende Dateien foo.sh # <-- Mit der Skriptressource zu verwendende Skriptdateien vars/ # main.yml # <-- Mit der Rolle zusammenhängende Variablen defaults/ # main.yml # <-- Nachrangige Standardvariablen für diese Rolle meta/ # main.yml # <-- Rollenabhängigkeiten library/ # Rollen können auch benutzerdefinierte Module enthalten module_utils/ # Rollen können auch benutzerdefinierte module_utils enthalten lookup_plugins/ # oder auch andere Arten von Plugins, in diesem Fall lookup webtier/ # Dieselbe Art von Struktur wie „common“ oben, für die Rolle der Webschicht monitoring/ # "" fooapp/ # ""
Sie können eine Ansible Role in einem Playbook aufrufen, indem Sie sie unter den Rollenoptionen auflisten oder indem Sie sie im Abschnitt Rollenaufgaben mit dem Befehl include_role oder import_role hinzufügen. Rollen, die unter den Rollenoptionen aufgelistet oder mit import_role hinzugefügt wurden, werden vor sämtlichen anderen Aufgaben in einem Play ausgeführt. Rollen, die mit include_role hinzugefügt wurden, werden hingegen in der Reihenfolge ausgeführt, in der sie innerhalb einer Aufgabenliste definiert sind.
Wann sollten Sie Ansible Roles statt Ansible Playbooks verwenden?
Sowohl Ansible Roles als auch Ansible Playbooks sind Tools zum Organisieren und Ausführen von Automatisierungsaufgaben. Sie dienen aber jeweils unterschiedlichen Zwecken. Ob Sie Ansible Roles erstellen oder sämtliche Aufgaben in ein Ansible Playbook schreiben, hängt von Ihrem spezifischen Use Case und Ihrer Ansible-Erfahrung ab.
Die meisten Automatisierungsentwicklungs- und Systemadministrationsteams erstellen zunächst Automatisierungsinhalte mit individuellen Playbooks. Ein Playbook ist eine Liste von Automatisierungsaufgaben, die für ein definiertes Inventory ausgeführt werden. Aufgaben können in einem Play organisiert werden – einer Gruppierung von 1 oder mehreren Aufgaben, die einem bestimmten Host zugeordnet sind und der Reihenfolge nach ausgeführt werden. Ein Playbook kann 1 oder mehrere Plays enthalten und bietet so eine flexible Möglichkeit für das Ausführen von Ansible-Automatisierungen in einer einzigen Datei.
Playbooks sind zwar ein leistungsstarkes Tool für die Automatisierung mit Ansible, aber sämtliche Aufgaben in ein Playbook zu schreiben, ist nicht immer der beste Ansatz. Wenn der Umfang und die Variablen komplex sind und es nützlich ist, geschriebene Inhalte wiederzuverwenden, ist es möglicherweise sinnvoller, den Großteil Ihrer Automatisierungsinhalte in Ansible Roles zu erstellen und diese in einem Playbook aufzurufen.
Das folgende Beispiel veranschaulicht die Verwendung der Rolle linux-system-roles.timesync in einem Playbook. Hier wären mehr als 4 Aufgaben erforderlich, um das zu erreichen, was eine einzige Rolle erzielen kann.
- name: Manage timesync with 3 servers hosts: targets vars: timesync_ntp_servers: - hostname: foo.example.com iburst: true - hostname: bar.example.com iburst: true - hostname: baz.example.com iburst: true roles: - linux-system-roles.timesync
Ansible Roles zu nutzen, anstatt den gesamten Automatisierungsinhalt in ein einziges Playbook zu schreiben, bietet mehrere Vorteile:
Wiederverwendbarkeit und Teilen
Rollen sind Einheiten von Automatisierung, die darauf ausgelegt sind, wiederverwendet zu werden. Mit Rollen können Sie logische Gruppierungen von Automatisierungsaufgaben vom Kontext eines einzigen Plays oder Playbooks trennen. Dadurch lassen sich die Rollen für mehrere Plays oder Playbooks wiederverwenden und auch zur Wiederverwendung in anderen Projekten teilen.
Modularität
Der Einsatz von Rollen fördert einen modularen Automatisierungsansatz, bei dem eine bestimmte Rolle für eine ganz bestimmte Funktionalität verantwortlich ist. Mit einem solchen Ansatz ist es leichter, Automatisierungscode zu verstehen, zu warten und Probleme im Code zu beheben.
Organisation
Mit Ansible Roles lassen sich Aufgaben, Vorlagen, Dateien und Variablen auf strukturierte Weise organisieren. Diese Struktur erleichtert das Verwalten komplexer Automatisierungseinrichtungen, da sämtliche mit einer bestimmten Rolle zusammenhängenden Komponenten im jeweiligen Verzeichnis enthalten sind.
Parametrisierung
Mit Rollen lassen sich Standardvariablen definieren, die überschrieben werden können, wenn die Rolle in einem Ansible Playbook verwendet wird. So kann das Verhalten einer Rolle einfacher für verschiedene Umgebungen oder Use Cases angepasst werden, ohne die Rolle selbst zu verändern.
Versionierung und Abhängigkeitsmanagement
Sie können Rollen versionieren und Rollenabhängigkeiten in einer meta/main.yml-Datei innerhalb einer Rolle angeben. Dadurch lassen sich Versionen und Abhängigkeiten explizit verwalten, was die Stabilität und Konsistenz in verschiedenen Umgebungen sicherstellt.
Tests
Die Struktur von Rollen erleichtert das Anwenden von Testmethoden. Sie können Tests auch für eine bestimmte Rolle schreiben und so sicherstellen, dass die Rolle sich wie erwartet verhält, bevor Sie sie in größere Playbooks integrieren.
Einfachheit
Bei größeren oder komplexeren Projekten vereinfachen Rollen den Einsatz von Ansible Playbooks. Anstelle eines sehr großen Playbooks, das sämtliche Aufgaben, Handler und Vorlagen enthält, können Sie ein viel kompakteres Playbook schreiben, das für andere einfach lesbar und zu verstehen ist. Dadurch lassen sich auch einfacher Rollen identifizieren, die in neuen Projekten wiederverwendet werden können, was wiederum das Schreiben von Automatisierungsinhalten beschleunigt und Workflows vereinfacht.
Ein Guide für den Einstieg in Red Hat Ansible Automation Platform
Erstellen von Ansible Roles
Sie können eine neue Rolle mit dem Befehl „ansible-galaxy role init role_name“ erstellen. Daraufhin wird ein Verzeichnis eingerichtet, das der Standardstruktur für Rollenverzeichnisse folgt. Nachdem Sie das Verzeichnis überprüft haben, können Sie Aufgaben, Standardvariablen und andere Komponenten definieren. Außerdem können Sie Dokumentation zu einer README.md-Datei und in meta/main.yml hinzufügen, auch wenn dies für das ordnungsgemäße Funktionieren der Rolle nicht erforderlich ist.
Das Erstellen einer neuen Rolle erfordert möglicherweise erweiterte Ansible-Kenntnisse und kann eine Herausforderung für Teams sein, die gerade erst lernen, Automatisierungsinhalte zu erstellen. Um sich das Erstellen von Inhalten zu erleichtern, können neue ebenso wie erfahrene Automatisierungsentwicklungsteams Red Hat® Ansible Lightspeed with IBM watsonx Code Assistant nutzen. Dieser generative KI-Service stellt Codeempfehlungen basierend auf Best Practices für Ansible bereit. Sie können die gewünschte Automatisierung mit Prompts in natürlicher Sprache beschreiben und erhalten dann Vorschläge für Inhalte mit einzelnen oder mehreren Aufgaben von Ansible Lightspeed with watsonx Code Assistant. Die generierten Aufgaben können dann in eine Ansible Role oder ein Playbook integriert werden.
Mit Ansible Lightspeed with watsonx Code Assistant können Sie Ansible-Code mit weniger Aufwand erstellen, warten und verbessern, was wiederum zu einer höheren Produktivität und kürzeren Einführungszeiten führt.
Teilen von Ansible Roles
Da sich Ansible Roles unkompliziert teilen lassen, können Sie gut gewartete und getestete Rollen in Ihre Automatisierung integrieren. Rollen lassen sich mithilfe der folgenden Repositories teilen:
- Ansible Galaxy: Über dieses kostenlose Repository lassen sich Rollen und andere Ansible-Inhalte mit der gesamten Ansible-Community teilen. Rollen können über die Befehlszeile (CLI) in Ansible Galaxy hochgeladen werden, während Sammlungen über die Webschnittstelle geteilt werden können. Da es sich bei Ansible Galaxy um eine Community-Site handelt, werden Inhalten nicht von Red Hat unterstützt, zertifiziert oder geprüft.
- Ansible Automation Hub: Mit einer Subskription für Red Hat Ansible Automation Platform erhalten Sie auch Zugriff auf Ansible Automation Hub, einem zentralen Repository, in dem Sie Ansible Content Collections finden, herunterladen und teilen können. Ansible Automation Hub wird von Red Hat gehostet und beinhaltet sowohl zertifizierte als auch validierte Inhalte von Red Hat und unseren ISV-Partnern (unabhängige Softwareanbieter).
- Privater Automation Hub: Als On-Premise-Repository ermöglicht der private Automation Hub Unternehmen das interne Verwalten, Teilen und Kuratieren von Inhalten – nur für Ihr Unternehmen. Durch das Teilen von Rollen und anderen Automatisierungsinhalten innerhalb Ihres Unternehmens können Ihre Teams Workflows vereinfachen und die Automatisierung beschleunigen.
Warum Red Hat?
Red Hat Ansible Automation Platform ist eine einheitliche Plattform, die entwickelt wurde, um Unternehmen bei der Beschleunigung, Orchestrierung und Innovation durch Automatisierung zu unterstützen. Mit Ihrer Red Hat Subskription erhalten Sie Zugriff auf Red Hat Certified Content Collections und Ansible Validated Content – verfügbar über Ansible Automation Hub.
Red Hat Ansible Lightspeed with IBM watsonx Code Assistant ist ebenfalls Bestandteil Ihrer Subskription. Diese Komponente optimiert den Schreibprozess und verbessert so die Aufgaben, die in Ihren Ansible Roles enthalten sind. Dadurch können Ihre Automatisierungsteams Inhalte effizienter erstellen. Ansible Lightspeed ist vollständig in Visual Studio Code integriert und erleichtert die Automatisierungsentwicklung – Sie können Ansible Roles und Playbooks gemäß Best Practices erstellen, ohne je zwischen Entwicklungsumgebungen hin- und herwechseln zu müssen.
Ansible Lightspeed verfügt außerdem über Funktionen zum Abgleich der Inhaltsquellen. Dadurch können Sie die Quelltrainingsdaten für die erhaltenen Vorschläge prüfen und bessere Entscheidungen treffen, wenn Sie Rollen für Ihre Nutzenden erstellen. Die Modelle von Ansible Lightspeed werden an Tausenden von Rollen aus der Ansible-Community und an von Red Hat bereitgestellten Datenpunkten trainiert. So können Sie Ansible-Code auf genaue und transparente Weise erstellen und verbessern – und damit Unternehmensanforderungen gerecht werden und die Einführung beschleunigen.