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.