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.