Ansible
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 22.04 Jammy Jellyfish
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Artikel für fortgeschrittene Anwender
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Ansible ist ein Open-Source Automatisierungs-Werkzeug zur Orchestrierung und allgemeinen Konfiguration und Administration von Computern. Es kombiniert Softwareverteilung, Ad-hoc-Kommando-Ausführung und Konfigurationsmanagement.
Es verwaltet Netzwerkcomputer unter anderem über SSH und erfordert keine zusätzliche Agent-Software auf dem zu verwaltenden System. Module nutzen zur Ausgabe JSON und können in jeder beliebigen Programmiersprache geschrieben sein. Das System nutzt YAML zur Formulierung wiederverwendbarer Beschreibungen von Systemen.
Installation¶
aus den Ubuntu-Paketquellen¶
Ansible kann direkt aus den offiziellen Quellen installiert werden [1]
ansible (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install ansible
Oder mit apturl installieren, Link: apt://ansible
über das offizielle PPA¶
Je nach Ubuntu-Version erhält man unterschiedlich alte Versionen von Ansible. Für aktuelle Versionen steht ein PPA zur Verfügung.
Adresszeile zum Hinzufügen des PPAs:
ppa:ansible/ansible
Hinweis!
Zusätzliche Fremdquellen können das System gefährden.
Ein PPA unterstützt nicht zwangsläufig alle Ubuntu-Versionen. Weitere Informationen sind der PPA-Beschreibung des Eigentümers/Teams ansible zu entnehmen.
über PIP¶
Der Python-Paketmanager pip stellt häufig aktuellere Versionen von Programmen als in den Paketquellen bereit. Folgendermaßen lässt sich das Programm darüber installieren:
pip3 install ansible # Programm wird nur für den aktuellen Nutzer installiert
Ab Ubuntu 23.04 muss in eine virtuelle Umgebung für Python installiert werden:
python3 -m venv venv-name && source venv-name/bin/activate # venv-name durch den gewünschten Namen ersetzen pip3 install ansible # Programm ist nur bei aktiver virtueller Umgebung nutzbar
Hinweis!
Fremdsoftware kann das System gefährden.
aus dem Quellcode¶
Wer stets die aktuelle Entwicklungsversion nutzen möchte, kann die Software auch direkt aus dem GitHub-Repository ansible beziehen.
Bedienung¶
Ansible wird aus einem Terminal heraus genutzt. [3] Dabei kann Ansible in zwei Modi genutzt werden:
Ausführung eines Kommandos im Ad-Hoc-Modus:
ansible <host-pattern> [-m module_name] [-a args] [options]
Der Ad-hoc-Modus eignet sich dazu, bei Bedarf Konfigurationsänderungen an einem Host oder einer Gruppe von Hosts vorzunehmen.
Ausführung eines Ansible-Playbooks:
ansible-playbook <filename.yml> ... [options]
Playbooks sind dazu geeignet, Konfigurationsdeklarationen besonders einfach wiederzuverwenden und Ansible zur Orchestrierung zu nutzen.
Die Dokumentation zu Ansible findet man im Internet in der Ansible Documentation 🇬🇧 oder in den Manpages auf dem lokalen System.
1 2 3 | man ansible # Führt Tasks auf einem oder mehreren entfernten Hosts aus man ansible-playbook # Ausführung von Ansible-Playbooks man ansible-doc # Dokumentation zu Ansible-Modulen anzeigen |
Inventar¶
Ansible verwaltet zu kontrollierende bzw. zu steuernde Systeme in einem Inventar. Ein statisches Inventar ist eine einfache Textdatei, welche mit einem Texteditor erstellt und bearbeitet werden kann. [5] Hosts können im Inventar zu Gruppen zusammengefasst werden, wie das folgende Beispiel veranschaulicht:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | mail.example.com [webservers] foo.example.com bar.example.com [dbservers] one.example.com two.example.com three.example.com [dc1] merkur.example.com venus.example.com [dc2] neptun.example.com uranus.example.com [dc:children] dc1 dc2 |
Bei obigen Inventar handelt es sich um ein simples Beispiel. In der offiziellen Dokumentation 🇬🇧 finden sich weitere Anwendungsbeispiele, wie z.B. die Verwendung von Host- und Gruppen-Variablen im Inventar.
Playbooks¶
Playbooks sind das Herzstück von Ansible. Sie werden verwendet, um entfernte Rechner zu konfigurieren und um Deployments durchzuführen. Playbooks werden in YAML-Syntax unter Verwendung eines Texteditors geschrieben. [5] Zur Veranschaulichung soll folgendes Beispiel aus der offiziellen Dokumentation 🇬🇧 dienen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | --- - name: setup apache hosts: webservers vars: http_port: 80 max_clients: 200 remote_user: root tasks: - name: ensure apache is at the latest version ansible.builtin.apt: name: apache2 state: latest - name: write the apache config file ansible.builtin.template: src: /srv/httpd.j2 dest: /etc/httpd.conf notify: - restart apache - name: ensure apache is running (and enable it at boot) ansible.builtin.service: name: apache2 state: started enabled: true handlers: - name: restart apache ansible.builtin.service: name: httpd state: restarted |
Im Playbook wird zuerst die Gruppe von Hosts definiert, auf denen die folgenden Tasks ausgeführt werden sollen. In diesem Fall ist dies die Gruppe webservers
aus dem Inventar. Anschließend werden zwei Variablen definiert und der Benutzer (root
) spezifiziert, welcher für die SSH-Verbindung zu den Zielsystemen verwendet wird.
Darauf folgt eine Sektion mit Tasks. Hier wird definiert was auf den Zielsystemen getan werden soll. Dabei werden die Aufgaben in der Reihenfolge abgearbeitet, wie sie im Playbook spezifiziert sind. Die Ausführung erfolgt parallel auf den als Zielsystemen definierten Hosts.
Das obige Playbook führt dabei folgende Tasks auf den Hosts der Gruppe webservers
aus:
Stellt sicher, dass das Paket apache2 in der aktuellsten Version installiert ist
Erstellt die Apache-Konfigurationsdatei aus einer Vorlage und benachrichtigt einen
handler
namensrestart apache
Stellt sicher, dass der Apache-Dienst aktiviert und gestartet ist
Unter
handlers
werden Tasks definiert, welche nur ausgeführt werden, wenn sie von einem anderen Task im Playbook ausgelöst werden (siehe Handlers 🇬🇧).
Beispiele¶
Die folgenden Beispiele sollen die Nutzung von Ansible in den verschiedenen Modi verdeutlichen.
Dokumentation anzeigen¶
Die Dokumentation zum Ansible-Modul ping
im Terminal [3] anzeigen:
ansible-doc ping
Ad-hoc-Kommando ausführen¶
Folgendes Kommando führt das Modul ping
auf dem Host foo.example.com
aus:
ansible foo.example.com -m ping
Folgendes Kommando führt das Modul ping
auf der Gruppe webservers
aus:
ansible webservers -m ping
Ansible-Playbooks ausführen¶
ansible-playbook example.yml
Obiges Kommando führt das Ansible-Playbook namens example.yml aus.
Links¶
https://www.my-it-brain.de/wordpress/tag/ansible/ 🇩🇪 – Private Webseite mit weiteren Beispielen zur Nutzung