Ansible

Net zoals Puppet is Ansible een content management systeem. Het grote voordeel van Ansible is dat er op de te beheren nodes, geen agent geïnstalleerd hoeft te worden, Ansible werkt via SSH. (en WinRM voor Windows). Daarnaast is het een voordeel dat Ansible werkt met Python (>2.4), in tegenstelling tot Puppet dat Ruby gebruikt.

De werking is nagenoeg hetzelfde, één of meerdere ‘tasks’ worden samengevat in een yaml-file dat een ‘play‘ wordt genoemd (te vergelijken met classes) en meerdere play’s kunnen uitgevoerd worden middels een ‘playbook‘. (vergelijk met manifests)

Ansible kan eenvoudig op een RedHat of CentOS systeem worden geïnstalleerd met:

sudo yum install -y epel-release
sudo yum install -y ansible

Het is ook mogelijk om Ansible met pip te installeren, vaak krijg je dan de laatste versie hetgeen met yum niet altijd het geval is.

sudo pip install ansible

Hierna dienen de nodes in een bestand gezet te worden, al dan niet gegroepeerd. Dat bestand is standaard: /etc/ansible/hosts maar ansible kijkt ook in de huidige directory naar een bestand genaamd ‘inventory‘. Via ansible.cfg is dit aan te passen:

[defaults]
inventory = ./inventory

Deze verwijzing mag trouwens ook een directory zijn met hierin bestanden voor verschillende environments, zoals in deze tree is te zien:

inventory/
├── acceptation
├── production
└── test

Bijvoorbeeld mijn Music Players in het inventory/production bestand:

[musicplayers]
huiskamer    ansible_host=192.168.1.21
demoruimte   ansible_host=192.168.1.31
badkamer     ansible_host=192.168.1.41
tuin         ansible_host=192.168.1.51

Deze nodes hebben allen het certificaat voor een veilige ssh-verbinding ingesteld en er kan met ssh-keygen eventueel een extra key voor de ansible-host/user aangemaakt worden.

Als test kunnen we de ping-module van ansible gebruiken om te zien of we de node kunnen bereiken:

[nico@ansible ~]$ ansible huiskamer -m ping
huiskamer | SUCCESS => {
 "changed": false,
 "failed": false,
 "ping": "pong"
}

Met de CLI methode kunnen commando’s gegeven worden voor ansible taken. Een overzicht is te zien met:

ansible-doc -l

Voor meer details kun je de module mee geven, bv. om iets met firewall te doen:

ansible-doc -l | grep firewall
ansible-doc firewalld

Een ander voorbeeld om een bestand te kopiëren via de CLI:

ansible -m copy huiskamer -a "src=./bestand dest=/home/nico/file owner=nico"

Nog een voorbeeld om als sudo (-b is ‘become’) en vraag om een sudo-wachtwoord met -K:

ansible -m service huiskamer -b -K -a "name=sshd state=restarted"

Om meerdere commando’s uit te voeren op één of meerdere hosts kunnen we een script aanmaken. Binnen ansible worden die script ‘playbooks’ genoemd.