Ansible playbooks

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.178.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.