Ansible: DevOps leicht gemacht

Das Problem ist schon etwas älter: Eine größere Anzahl von Servern muss auf aufgesetzt oder Homogenisiert werden am besten mit wenig Aufwand. Diese Problem wurde nun schon mehrfach gelöst. Sogenannte Orchestrierungs-Tools führen anhand von vordefinierten Anweisungen bestimmte Befehle auf mehreren System aus.

Beispiele für solche Tools sind Puppet, Chef oder CFEngine. Doch vor diese Vertreter haben für mich einen großen Nachteil: Sie benötigen für die Ausführung einen Client der auf der Gegenseite installiert werden muss.

Hier kommt Ansible ins Bild. Ansible nutzt für die Ausführung der Skripte oder Playbooks auf den Clients lediglich eine SSH-Verbindung.

Der beste Weg um die Einfachheit von Ansible zu demonstrieren ist ein kleines Beispiel, in dem eine Liste von Paketen über apt installiert wird. Zuerst legen wir die Grundstruktur an

mkdir ansible
cd ansible

Also nächstes müssen wir ein inventory anlegen, welches eine Liste von Servern und Gruppen ist, auf denen die Playbooks ausgeführt werden.

# ansible/inventory
[group1]
server1
server2
server3

In diesem Beispiel haben wir einen Gruppe namens group1 welche die Server 1-3 enthält.

Als nächstes müssen wir ein Playbook anlegen welches die Anweisungen für Ansible beinhaltet

# ansible/site.yml
---
- hosts: all                 # Server wählen
  become: yes                # also sudo ausführen
  tasks:                     # Liste von Tasks
    - name: Install packages # Name für den Task
      apt:                   # APT-Modul nutzen
        name: "{{ items }}"  # Name des Pakets.
        state: present       # Status des Pakets
      with_items:            # Loop mit einer Liste. Füllt {{ items }}
        - program1
        - program2
        - program3

Dieses Playbook installiert die Programme propgram1-3 über apt.

Um dies Playbook müssen wir nur noch ausführen mit

ansible-playbook site.yml

Falls man keine SSH-Key Authentifizierung ingerichtet hat muss man noch die Option -k anhängen. Um sich mit einem anderen Nutzer als dem momentan angemeldeten Nutzer zu authentifizieren muss die Option -u <username> genutzt werden.

Das war auch schon alles. Ansible sollte sich nun per SSH mit allen Servern verbinden und die gelisteten Pakete installieren. Falls die Pakete schon installiert sind wird Ansible diese einfach überspringen.

Ansible hat mittlerweile eine riesige Anzahl von Modulen zur Auswahl die es einem ermöglichen Ansible in unterschiedlichsten Anwendungsfällen zu nutzen.