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.