[[Vorlage(Getestet, jammy)]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Programme_starten: Starten von Programmen] [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] [:Editor: Einen Editor verwenden] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Ansible_logo.png, 100, align=left)]] [wikipedia:Ansible:] ist ein Open-Source Automatisierungs-Werkzeug zur [wikipedia:Dienstekomposition#Orchestrierung:Orchestrierung] und allgemeinen Konfiguration und Administration von Computern. Es kombiniert [wikipedia:Softwareverteilung:], Ad-hoc-Kommando-Ausführung und [wikipedia:Konfigurationsmanagement:]. Es verwaltet Netzwerkcomputer unter anderem über [:SSH:] und erfordert keine zusätzliche Agent-Software auf dem zu verwaltenden System. Module nutzen zur Ausgabe [wikipedia:JSON:] und können in jeder beliebigen Programmiersprache geschrieben sein. Das System nutzt [wikipedia:YAML:] zur Formulierung wiederverwendbarer Beschreibungen von Systemen. = Installation = === aus den Ubuntu-Paketquellen === Ansible kann direkt aus den offiziellen Quellen installiert werden [1] {{{#!vorlage Paketinstallation ansible, universe }}} === über das offizielle PPA === Je nach Ubuntu-Version erhält man unterschiedlich alte Versionen von Ansible. Für aktuelle Versionen steht ein [launchpad:~ansible/+archive/ubuntu/ansible:PPA] zur Verfügung. [[Vorlage(PPA, ansible, ansible)]] === über PIP === {{{#!vorlage PipInstallation ansible }}} === aus dem Quellcode === Wer stets die aktuelle Entwicklungsversion nutzen möchte, kann die Software auch direkt aus dem GitHub-Repository [github:ansible/ansible: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: {{{#!vorlage Befehl ansible [-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: {{{#!vorlage Befehl ansible-playbook ... [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 [http://docs.ansible.com/ansible/latest/index.html Ansible Documentation] {en} oder in den [:man:Manpages] auf dem lokalen System. {{{#!code bash 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 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: {{{#!code ini 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 [http://docs.ansible.com/ansible/latest/intro_inventory.html Dokumentation] {en} 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 [wikipedia:YAML:]-Syntax unter Verwendung eines Texteditors geschrieben. [5] Zur Veranschaulichung soll folgendes Beispiel aus der [http://docs.ansible.com/ansible/latest/playbooks_intro.html#playbook-language-example offiziellen Dokumentation] {en} dienen: {{{#!code yaml --- - 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: 1. Stellt sicher, dass das Paket '''apache2''' in der aktuellsten Version installiert ist 1. Erstellt die Apache-Konfigurationsdatei aus einer Vorlage und benachrichtigt einen `handler` namens `restart apache` 1. Stellt sicher, dass der Apache-Dienst aktiviert und gestartet ist 1. Unter `handlers` werden Tasks definiert, welche nur ausgeführt werden, wenn sie von einem anderen Task im Playbook ausgelöst werden (siehe [https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_handlers.html#handlers Handlers] {en}). = 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: {{{#!vorlage Befehl ansible-doc ping }}} == Ad-hoc-Kommando ausführen == Folgendes Kommando führt das Modul `ping` auf dem Host `foo.example.com` aus: {{{#!vorlage Befehl ansible foo.example.com -m ping }}} Folgendes Kommando führt das Modul `ping` auf der Gruppe `webservers` aus: {{{#!vorlage Befehl ansible webservers -m ping }}} == Ansible-Playbooks ausführen == {{{#!vorlage Befehl ansible-playbook example.yml }}} Obiges Kommando führt das Ansible-Playbook namens '''example.yml''' aus. = Links = * [https://docs.ansible.com/ Dokumentation zu Ansible Core und Tower] {en} * [https://docs.ansible.com/ansible/latest/tips_tricks/ansible_tips_tricks.html Allgemeine Tipps für Ansible Playbooks] * [https://galaxy.ansible.com Offizielle Plattform zum Austausch von Ansible Rollen] {en} * [wikipedia:Ansible:] * [https://www.my-it-brain.de/wordpress/tag/ansible/] {de} -- Private Webseite mit weiteren Beispielen zur Nutzung #tag: Netzwerk, System