Ubuntu 18.04 Bionic Beaver
Ubuntu 16.04 Xenial Xerus
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
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 keinerlei zusätzliche 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.
Ansible kann direkt aus den offiziellen Quellen installiert werden [1]
ansible (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install ansible
sudo aptitude install ansible
Je nach Ubuntu-Version ist erhält man eine ältere Version von Ansible. Für aktuelle Versionen steht ein PPA zur Verfügung.
Adresszeile zum Hinzufügen des PPAs:
ppa:ansible/ansible
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.
Damit Pakete aus dem PPA genutzt werden können, müssen die Paketquellen neu eingelesen werden.
Wer die neueste Version installieren möchte, kann das Programm über den Python-Paketmanager pip installieren:
Fremdsoftware kann das System gefährden.
pip3 install --user ansible # Programm wird nur für den aktuellen Nutzer installiert
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]
Ausführung eines Ansible-Playbooks:
ansible-playbook <filename.yml> ... [options]
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 |
Während sich der Ad-hoc-Modus eignet um bei Bedarf Konfigurationsänderungen an einem Host oder einer Gruppe von Hosts vorzunehmen, sind Playbooks dazu geeignet Konfigurationsdeklarationen besonders einfach wiederzuverwenden und Ansible zur Orchestrierung zu nutzen.
Ansible verwaltet zu kontrollierende bzw. zu steuernde Systeme in einem Inventar. Ein statisches Inventar ist eine einfach 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 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 | --- - hosts: webservers vars: http_port: 80 max_clients: 200 remote_user: root tasks: - name: ensure apache is at the latest version apt: name=apache2 state=latest - name: write the apache config file template: src=/srv/httpd.j2 dest=/etc/httpd.conf notify: - restart apache - name: ensure apache is running (and enable it at boot) service: name=apache2 state=started enabled=yes handlers: - name: restart apache 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
namens 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 🇬🇧).
Die folgenden Beispiele sollen die Nutzung von Ansible in den verschiedenen Modi verdeutlichen.
Die Dokumentation zum Ansible-Modul ping
im Terminal [3] anzeigen:
ansible-doc ping
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-playbook example.yml
Obiges Kommando führt das Ansible-Playbook namens example.yml aus.
https://www.ansible.com/ 🇬🇧 - Offizielle Ansible-Webseite
https://docs.ansible.com/ 🇬🇧 - Dokumentation zu Ansible Core und Tower
https://docs.ansible.com/ansible/latest/playbooks_best_practices.html 🇬🇧 - Ansible Best Practices
https://galaxy.ansible.com 🇬🇧 - die offizielle Plattform zum Austausch von Ansible Rollen
https://www.my-it-brain.de/wordpress/tag/ansible/ 🇩🇪 - Private Webseite mit weiteren Beispielen zur Nutzung
Diese Revision wurde am 26. Juni 2018 23:00 von BillMaier erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen:
System, Netzwerk