Konfigurationsmanagement mit Ansible

Ursprünglich habe ich meine Rechner mit ein paar Bash-Skripten automatisiert eingerichtet. Via SSH ist das alles kein Problem, aber mit der Zeit etwas fummelig. Daher war ich auf der Suche nach einem echten Konfigurationshilfsmittel für (virtuelle) Server.

Ansible

Wer Anwendungen im Internet bereitstellt, nutzt in der Regel mehrere Server. Um im Bedarfsfalle schnell einzelne Server auszutauschen und neu aufzusetzen, eignen sich Werkzeuge wie Ansible. Es gibt heute zahllose kostenfrei verfügbare Tools (siehe auch unten). Ansible habe ich besonders wegen seines schlanken Ansatzes (kein Daemon auf dem Server notwendig) ausgewählt. Auch, dass ich nicht extra eine weitere Programmiersprache lernen muss, ist ein großes Plus.

Szenario

Ich plane zwei Systeme mit Ansible zu nutzen. Die Anzahl der Server ist grundsätzlich beliebig anpassbar – entscheidend ist, dass ein Rechner (hier Laptop) für die Administration genutzt wird und alle Änderungen an bestimmte (oder bei Bedarf auch alle) Server verteilt werden:

  • Laptop – ein Mac OS X MacBook, von welchem aus ich den entfernten Server einrichten will
  • Wheezy – ein Debian 7 System

Ansible auf Mac OS X installieren

MacPorts und Ansible

Ansible baut auf Python auf. Nutzer der MacPorts haben es leicht, hier reicht ein simples

laptop$ sudo port install ansible  

Nutzer von Homebrew haben noch keinen solch einfachen Weg – hier braucht es ein paar Schritte mehr.

Homebrew und Ansible

Achtung, jetzt wird es etwas unsauber. Mit ansible.rb als brew-Formel klappt die Installation nur mit einem kleinen Trick (sicher geht es auch sauberer, aber dafür ist mir die Python-Verwirrung zu groß).

laptop$ brew install python  
laptop$ sudo easy_install pip  
laptop$ pip install Distutils2  
laptop$ brew install libyaml  
laptop$ pip install PyYAML  
laptop$ pip install paramiko  
laptop$ pip install Jinja2  
laptop$ sudo mkdir -p /usr/share/ansible/  
laptop$ sudo chmod -R 777 /usr/share/ansible/  
laptop$ brew install ansible  

Hosts anlegen

laptop$ sudo mkdir /etc/ansible  
laptop$ sudo vim /etc/ansible/hosts  

In der Datei /etc/ansible/hosts sollten alle zu verwaltenden Systeme stehen. In diesem Beispiel gibt es nur ein System (natürlich ist die IP-Adresse anzupassen):

laptop$ cat /etc/ansible/hosts  
[testnode]
400.300.200.100  

Ansible auf Debian Wheezy installieren

Das Ziel ist nun, ein möglichst minimales System bereitzuhalten, um bei Bedarf mit Playbooks das System für bestimmte Aufgaben einzurichten. Der Release von Debian 7 (Wheezy) steht kurz bevor, und da ich bislang alle meine Server unter Debian laufen lasse, ist es für mich die erste Wahl für neue Server.

Alle Abhängigkeiten werden installiert:

$ sudo apt-get install python python-yaml python-paramiko python-jinja2 gcc make

Dann folgt Ansible

wheezy$ git clone git://github.com/ansible/ansible.git  
wheezy$ cd ./ansible  
wheezy$ sudo make install  

Verbindung testen

Um zu sehen, ob die Verbindung klappt, nutze ich einen einfachen Test auf meinem Laptop:

laptop$ ansible all -m ping --ask-pass  
SSH password:  
400.300.200.100 | success >> {  
    "changed": false, 
    "ping": "pong"
}

Nächste Schritte

Als nächstes kann die eigentliche Konfiguration in Form von Playbooks definiert und angewendet werden. Mehr dazu später (oder in der offiziellen Dokumentation).

Zum Beispiel können Pakete (hier: vim) auf allen Server installiert werden:

laptop$ ansible all -m apt -a "name=vim state=latest"  
400.300.200.100 | success >> {  
    "changed": false
}

Alternativen zu Ansible

Neben Ansible gibt es noch zahlreiche ähnliche Lösungen: Chef, Puppet, Sprinkle, Salt, Quattor und wie sie alle heißen. Auch ausgefallenere Szenarien werden durch Blueprint (aktuelle Debian-Konfiguration als Ausgangsbasis für weitere Systeme) oder Boxen (Mac OS X Rechner als Entwicklungsmaschinen einrichten) abgedeckt.

Mehr Lesestoff

Author image
Blogging since 2003 about life, tech, yoga. Passionate about the details and eager to know more. Systems theory meets empathy.
Bochum. Germany.
top