Een ansible playbook is een verzameling plays waarin taken staan die uitgevoerd dienen te worden op een host of een groep hosts. Om te beginnen maken we een eenvoudige playbook om de NTP service te installeren, mocht dat al niet het geval zijn. Het yaml-bestand maken we via:
vi ~/first-playbook.yml
en ziet er bv. zo uit:
---
- hosts: musicplayers
become: true
tasks:
- name: Install ntp daemon
apt:
name: ntp
state: latest
Zoals je ziet bij ‘hosts’ gebruiken we de groep met nodes om de ntp-service te installeren. De optie ‘become: true‘ is ervoor om de task via ‘sudo’ uit te voeren.
Tip: Controleer de syntax van je playbook met:
ansible-playbook first-playbook.yml --syntax-check
Tip: Controleer of je playbook kan ‘runnen’ (dry-run) met:
ansible-playbook first-playbook.yml --check
De –check zal controleren of het playbook überhaupt kan runnen en doet dat zonder wijzigingen aan te brengen op de node(s).
Het commando om het playbook daadwerkelijk uit te voeren:
ansible-playbook -K first-playbook.yml
De ‘-K’ optie wordt gebruikt om het sudo wachtwoord te vragen en mee te sturen naar de nodes. Deze hebben we nodig om de service te kunnen installeren. Met ‘state: latest’ zorgen we ervoor dat ook een oudere versie gelijk ge-update wordt. De output op het scherm laat het volgende zien:
[nico@ansible ~]$ ansible-playbook -K first_playbook.yml
SUDO password:
PLAY [musicplayers] *******************************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************************************
fatal: [tuin]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.1.34 port 22: No route to host\r\n", "unreachable": true}
ok: [demoruimte]
ok: [huiskamer]
ok: [badkamer]
TASK [Install ntp daemon] *************************************************************************************************************
ok: [huiskamer]
ok: [demoruimte]
ok: [badkamer]
PLAY RECAP ****************************************************************************************************************************
badkamer : ok=2 changed=0 unreachable=0 failed=0
demoruimte : ok=2 changed=0 unreachable=0 failed=0
huiskamer : ok=2 changed=0 unreachable=0 failed=0
tuin : ok=0 changed=0 unreachable=1 failed=0
De MusicPlayer ‘tuin’ staat uit want in de winter hoeven we geen muziek in de tuin te verzorgen. 😉 De overige nodes hadden de service al ingesteld staan, ‘changed=0‘ geeft dat aan.
In de demoruimte wil ik graag een gebruiker genaamd ‘nico’ toevoegen dus we gaan hiervoor een task toevoegen. Het playbook wordt dan alsvolgt:
---
- hosts: musicplayers
become: true
tasks:
- name: Install ntp daemon
apt:
name: ntp
state: latest
- hosts: demoruimte
become: true
tasks:
- name: Create user
user:
name: nico
Deze gaan we ook uitvoeren: (ik heb ‘tuin’ uit de hosts file gehaald)
ansible-playbook -K ./first-playbook.yml
De output op het scherm:
[nico@ansible ~]$ ansible-playbook -K first_playbook.yml SUDO password: PLAY [musicplayers] ******************************************************************************************************************* TASK [Gathering Facts] **************************************************************************************************************** ok: [demoruimte] ok: [huiskamer] ok: [badkamer] TASK [Install ntp daemon] ************************************************************************************************************* ok: [demoruimte] ok: [huiskamer] ok: [badkamer] PLAY [demoruimte] ********************************************************************************************************************* TASK [Gathering Facts] **************************************************************************************************************** ok: [demoruimte] TASK [Create user] ******************************************************************************************************************** changed: [demoruimte] PLAY RECAP **************************************************************************************************************************** badkamer : ok=2 changed=0 unreachable=0 failed=0 demoruimte : ok=4 changed=1 unreachable=0 failed=0 huiskamer : ok=2 changed=0 unreachable=0 failed=0 [nico@ansible ~]$
Je ziet nu de PLAY voor de demoruimte om een gebruiker toe te voegen en de RECAP laat zien dat dit gelukt is.
Er wordt de term ‘GATHERING FACTS’ weergegeven op het scherm en wat dit doet is, net zoals bij Puppet, de facters van de node(s) inlezen die dan in de play’s gebruikt kunnen worden. Opvragen van deze facters kan via de setup-module met het volgende commando:
ansible -m setup <hostname>
Om nu wat meer structuur aan te brengen en een beter overzicht te krijgen van de diverse tasks is het verstandig om een directory structuur aan te brengen voor Ansible. Kijk daarvoor op de volgende pagina.