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