Verschiedene Ansible Versionen lassen sich gleichzeitig unter Ubuntu, oder mit dieser Herangehensweise unter jedem Linux mit python, ganz einfach mit pip installieren.
Dafür richte ich pro Ansible Version eine eigene virtuelle python Umgebung mit virtualenv ein. Vorteil dieser Herangehensweise ist, dass ich zwischen den Ansible Versionen einfach wechseln und neue Versionen ausprobieren kann. Kommt ja schon mal vor, dass Optionen deprecated werden und man seine Config erst mal anpassen muss.
Abhängigkeiten
apt install libssl-dev python-setuptools python-pip easy_install pip pip install --upgrade pip virtualenv virtualenvwrapper
Ansible 2.1
virtualenv ansible2.1 source ansible2.1/bin/activate pip install ansible==2.1
Ansible 2.0
virtualenv ansible2.0 source ansible2.0/bin/activate pip install ansible==2.0.1.0
Ansible Vorbereiten
Nach der Installation von Ansible müssen noch Configs und Ordner erstellt werden.
Ordnerstruktur anlegen
Meine komplette Ansible Config habe ich, wie vom Debian Ansible Paket auch vorgegeben, unter /etc/ansible angelegt.
mkdir -p /etc/ansible/{files,group_vars,host_vars,playbooks} mkdir -p /var/log/ansible touch /var/log/ansible/ansible.log
Mehr Informationen zur Ordnerstruktur finden sich in den offiziellen Best Practices.
Download Ansible.cfg
wget -O /etc/ansible/ansible.cfg https://raw.githubusercontent.com/ansible/ansible/devel/examples/ansible.cfg
Folgende Parameter habe ich in der CFG angepasst:
inventory = /etc/ansible/hosts remote_tmp = /tmp roles_path = /etc/ansible/roles sudo_exe = sudo log_path = /var/log/ansible/ansible.log ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host}
Die Parameter sind im offiziellen Guide des Configuration file erklärt.
Ergebnis
Die Ordnerstruktur sieht danach so aus:
(ansible2.1) root@server:/etc/ansible# ll total 44K drwxr-xr-x 7 root root 4.0K Jan 26 12:07 . drwxr-xr-x 113 root root 4.0K Jan 24 06:51 .. drwxr-xr-x 2 root root 4.0K Jan 25 10:03 files drwxr-xr-x 2 root root 4.0K Jan 22 22:27 group_vars drwxr-xr-x 2 root root 4.0K Jan 25 18:22 host_vars drwxr-xr-x 2 root root 4.0K Jan 25 19:35 playbooks drwxr-xr-x 2 root root 4.0K Jan 25 09:22 roles -rw-r--r-- 1 root root 8.1K Jan 25 19:27 ansible.cfg
Wie geht es weiter?
Nachdem alles vorbereitet wurde, muss für Ansible ein Inventory erstellt und es müssen Playbooks / Roles geschrieben werden. Das Inventory beinhaltet alle Hosts, die bearbeitet, und Playbooks / Roles die Tasks, die auf den jeweiligen Hosts ausgeführt werden sollen. Roles bekommt man z.B. von Ansible Galaxy oder Github.com.
Fazit
Mit der hier beschriebenen Herangehensweise kann ich quasi jede über pip verfügbare Ansible Version installieren und zwischen ihnen wechseln. Wenn ich mit einer bestimmten Version arbeiten möchte, gebe ich einfach folgenden Befehl ein:
source <PFAD_ZUM_VIRTUAL_PYTHON_DIR>/ansible2.1/bin/activate
Man erkennt direkt am Eingabe Prompt mit welcher Ansible Version, bzw. python environment, gerade gearbeitet wird.
(ansible2.1) root@server:~#
Mit which ansible-playbook lässt sich noch kontrollieren, welche Ansible executables genutzt werden.
Der Pfad sollte, wenn man die python virtualenvironment geladen hat, den Pfad zu dieser enthalten:
(ansible2.1) root@server:~# which ansible-playbook /root/ansible2.1/bin/ansible-playbook