Ansible ist ein Open-Source-Konfigurationsmanagement- und Orchestrierungstool, das die Automatisierung von IT-Aufgaben in einer mehrstufigen IT-Umgebung vereinfacht. Mit einem einzigen Befehl können Sie mehrere Server konfigurieren und Anwendungen bereitstellen, ohne sich bei jedem der Server anzumelden und die Konfiguration selbst vorzunehmen. Dabei vereinfacht Ansible Aufgaben, die sonst zeitraubend und mühsam wären.
Mit der Zunahme der Anzahl von Playbook-Dateien, die verschiedene Automatisierungsaufgaben ausführen, können die Dinge etwas komplex werden. Und hier kommen Ansible-Rollen ins Spiel.
Was ist eine Ansible-Rolle?
Eine Ansible-Rolle ist ein Konzept in Ansible, das sich eher mit Ideen als mit Ereignissen befasst. Im Wesentlichen ist eine Rolle eine Abstraktionsebene, die verwendet wird, um das Schreiben von Playbook-Dateien zu vereinfachen. Eine Rolle bietet ein Gerüst für wiederverwendbare Komponenten wie Variablen, Module, Aufgaben und Fakten, die in eine Playbook-Datei geladen werden können.
Praktische Anwendung
Um besser zu verstehen, wie Rollen verwendet werden, betrachten wir ein Szenario, in dem Sie 8 Aufgaben haben, die auf 2 Remote-Knoten ausgeführt werden müssen. Ein Ansatz wäre, alle Aufgaben, die auf den Remote-Hosts ausgeführt werden sollen, in einer einzigen Playbook-Datei zu definieren. Dies ist jedoch mühsam und wird höchstwahrscheinlich die Komplexität des Playbooks erhöhen. Ein besserer Ansatz wäre es, 8 separate Rollen zu erstellen, wobei jede Rolle eine einzelne Aufgabe ausführt und diese Rollen später in der Ansible-Playbook-Datei aufruft.
Einer der größten Vorteile der Verwendung von Rollen besteht darin, dass jede Rolle unabhängig von der anderen ist. Die Ausführung einer Rolle hängt nicht von der Ausführung einer anderen Rolle ab. Außerdem können Rollen geändert und wiederverwendet werden, wodurch die Notwendigkeit entfällt, die Spiele und Aufgaben in der Playbook-Datei neu zu schreiben.
Nehmen wir also an, Sie möchten eine Playbook-Datei erstellen, um den LAMP-Stack auf einem Debian-Server zu installieren. Eine bessere Möglichkeit, dies zu tun, besteht darin, zunächst drei separate Rollen zu erstellen, in denen jeweils Apache, MariaDB und PHP auf dem Remote-Host installiert werden. Schreiben Sie dann ein Playbook und rufen Sie die Rollen in der Playbook-Datei auf. Angenommen, Sie haben einen zweiten Debian-Server, den Sie für die Installation von Drupal CMS benötigen. Anstatt die Rollen erneut zu schreiben, können Sie einfach die 3 zuvor erstellten Rollen wiederverwenden und weitere Rollen für die Installation von Drupal hinzufügen.
Verstehst du?
Sehen wir uns nun an, wie Sie Ansible-Rollen erstellen können.
So erstellen Sie Ansible-Rollen
Um eine Ansible-Rolle von Grund auf neu zu erstellen, führen Sie den Befehl Ansible Galaxy aus, das Beispiel ist unten gezeigt:
$ ansible-galaxy init Rollenname
Um beispielsweise eine Rolle namens my-role zu erstellen, rufen Sie den Befehl auf.
$ ansible-galaxy init my-role
Auf dem Bildschirm oben erstellt der Befehl das my-role-Verzeichnis. Dieses Rollenverzeichnis enthält standardmäßig die folgenden Verzeichnisse oder Ordner.
- Der Ordner „Standards“ – Dieser enthält die Standardvariablen, die von der Rolle verwendet werden.
- Der Ordner „Dateien“ – Enthält Dateien, die von der Rolle bereitgestellt werden können.
- Der Ordner „Handler“ – Speichert Handler, die von dieser Rolle verwendet werden können.
- der „Meta“-Ordner – Enthält Dateien, die die Rollenabhängigkeiten festlegen.
- Der Ordner „Tasks“ – Er enthält eine YAML-Datei, die die Aufgaben für die Rolle selbst enthält. Normalerweise ist dies die main.yml-Datei.
- Der Ordner „Vorlagen“ – Enthält Vorlagendateien, die geändert und dem bereitgestellten Remote-Host zugewiesen werden können.
- Der Ordner „Tests“ – integriert Tests mit Ansible-Playbook-Dateien.
- Der Ordner „vars“ – Enthält Variablen, die von der Rolle verwendet werden. Sie können sie in der Playbook-Datei definieren, aber es wird empfohlen, sie in diesem Verzeichnis zu definieren.
Um die Rollenverzeichnisstruktur anzuzeigen, führen Sie den Baumbefehl gefolgt vom Rollennamen aus.
$ tree <role-name>
Jetzt werden wir zur Demonstration drei Ansible-Rollen wie folgt erstellen:
- Die vorausgesetzte Rolle – Installiert Git
- Die Mongodb-Rolle – Installiert die MongoDB-Datenbank-Engine
- Die Apache-Rolle – Installiert den Apache-Webserver
Unter Verwendung der gleichen Syntax, die wir zuvor verwendet haben, werden wir die Rollen wie folgt erstellen:
$ sudo ansible-galaxy init prerequisites $ sudo ansible-galaxy init mongodb $ sudo ansible-galaxy init apache
Im nächsten Schritt definieren Sie jede Rolle, die Sie erstellt haben. Um dies zu erreichen, müssen Sie die Datei main.yml bearbeiten, die sich im Ordner „tasks“ für jede Rolle befindet.
Rolle —> Aufgaben —> main.yml
Um beispielsweise die Voraussetzungsrolle zu bearbeiten, navigieren Sie wie gezeigt:
$ cd prerequisites/tasks/
Bearbeiten Sie dann die Datei main.yml.
$ sudo vim main.yml
Die Rolle für die Installation von Git ist wie gezeigt definiert:
- name: Install git apt: name: git state: present update_cache: yes
Für MongoDB haben wir 2 Aufgaben. Installieren von MongoDB und Starten des Mongod-Daemons.
- name: Install MongoDB apt: name: mongodb state: present update_cache: yes - name: Start Mongod daemon shell: "mongod &"
Und schließlich für den Apache-Webserver:
- name: install Apache web server apt: name=apache2 state=present update_cache=yes
Zuletzt erstellen wir eine Playbook-Datei namens stack.yml und benennen die Rollen wie gezeigt.
--- - hosts: all become: yes roles: - prerequisites - mongodb - apache
Wie Sie sehen können, sieht die Playbook-Datei im Vergleich zur Definition der einzelnen Aufgaben für den Host ziemlich einfach aus.
Um sicherzustellen, dass unsere Rollen wie erwartet funktionieren, führen Sie die ansible Playbook-Datei wie gezeigt aus.
$ sudo ansible-playbook /etc/ansible/stack.yml
Das Playbook führt alle Rollen wie gezeigt aus.
Um sicherzustellen, dass die Pakete erfolgreich installiert wurden, überprüfen wir ihre Versionen wie gezeigt:
$ mongod --version $ apachectl -v $ git --version
Die obige Ausgabe bestätigt, dass die Rollen tatsächlich erfolgreich ausgeführt werden und dass das Paket installiert wurde. Perfekt!
Abschluss:
Ansible-Rollen vereinfachen Playbook-Dateien, insbesondere wenn mehrere Aufgaben auf mehreren Hosts ausgeführt werden müssen. Darüber hinaus können Sie Rollen für mehrere Hosts wiederverwenden, ohne die Playbook-Datei ändern zu müssen. Wenn Sie diesen Leitfaden nützlich fanden, senden Sie uns eine Nachricht und teilen Sie ihn mit Ihren Freunden.