{"id":128,"date":"2019-04-23T21:23:24","date_gmt":"2019-04-23T19:23:24","guid":{"rendered":"https:\/\/jochem.jochemenbianca.nl\/?p=128"},"modified":"2019-05-01T08:47:12","modified_gmt":"2019-05-01T06:47:12","slug":"ansible-playbooks","status":"publish","type":"post","link":"https:\/\/jochem.jochemenbianca.nl\/?p=128","title":{"rendered":"Ansible playbooks"},"content":{"rendered":"<p>Om lekker met Ansible te kunnen werken is het gebruik van playbooks aan te raden.<br \/>\nEen eenvoudig playbook, met toch een aantal leuke features kan er als volgt uit zien:<\/p>\n<pre>--- # Test playbook\r\n- hosts: '{{ myhosts }}'\r\n  remote_user: ansible\r\n  become: yes\r\n  become_method: sudo\r\n  connection: ssh\r\n  gather_facts: '{{ gather }}'\r\n  vars:\r\n    myhosts: test12\r\n    gather: yes\r\n    pkg: telnet\r\n  tasks:\r\n  - name: Some description of what we are doing\r\n    yum:\r\n      name: '{{ pkg }}'\r\n      state: '{{ mystate }}'\r\n<\/pre>\n<p>Zoals je kunt zien zijn er een aantal dingen. Als eerste gebruiken we een aantal variables. Hiermee kunnen we dus leuke dingen doen, maar zoals je ook kunt zien wordt er 1 variable niet gezet. Dat leg ik later uit.<br \/>\nRegel 2. Hier geven we met een variabele aan welke host we willen gaan gebruiken.<br \/>\nRegel 3-6. Hiermee regelen we dat we met privileged rechten dingen kunnen doen, doormiddel van sudo.<br \/>\nRegel 7. Hiermee halen we informatie op vanuit onze hosts<br \/>\nRegel 8-11. Hier declareren we de variabelen. Zoals je kunt zien 1 minder dan je zou verwachten.<br \/>\nRegel 12-16. Geven we de taak aan, het installeren van het pakket dat we onder de variable pkg gedeclareerd hebben.<br \/>\nSla vervolgens dit bestand op onder \/home\/ansible\/ansible\/playbook\/test.yaml<\/p>\n<p>Wat is hier nou het idee van. Ik wil dat ik snel telnet kan installeren maar ook weer kan deinstalleren. Dit doen we door het volgende commando te geven.<\/p>\n<pre>ansible-playbook test.yaml --extra-vars \"mystate=latest\"\r\n<\/pre>\n<p>Hiermee wordt telnet op alle hosts ge\u00efnstalleerd. Daarna kunnen we de volgende opdracht geven, waarna telnet op alle hosts weer gede\u00efnstalleerde wordt.<\/p>\n<pre>ansible-playbook test.yaml --extra-vars \"mystate=absent\"\r\n<\/pre>\n<p>Probleem is nu dat we alleen maar kunnen zien dat een tasks wel op niet gelukt is, we kunnen echter niet zien wat er precies wordt uitgevoerd. Dit kunnen we realiseren door een aantal regels toe te voegen aan het playbook.<\/p>\n<pre>--- # Test playbook\r\n- hosts: '{{ myhosts }}'\r\n  remote_user: ansible\r\n  become: yes\r\n  become_method: sudo\r\n  connection: ssh\r\n  gather_facts: '{{ gather }}'\r\n  vars:\r\n    myhosts: test12\r\n    gather: yes\r\n    pkg: telnet\r\n  tasks:\r\n  - name: Some description of what we are doing\r\n    yum:\r\n      name: '{{ pkg }}'\r\n      state: '{{ mystate }}'\r\n    register: result\r\n  - debug: var=result\r\n<\/pre>\n<p>Hiermee maken we een nieuwe task welke de debug informatie over onze andere task ophaalt.<\/p>\n<p>Ook kan het wel eens nodig zijn om wat meer controle te krijgen over of task wel of niet gestart moeten worden. Dit kan met behulp van notification en handlers. Het idee hierbij is dat een handler gestart wordt aan de hand van de status van een task.<\/p>\n<p>Een playbook kan er dan als volgt uitzien. Sla dit bestand op als nginx.yaml<\/p>\n<pre>--- # Test playbook\r\n- hosts: '{{ myhosts }}'\r\n  remote_user: ansible\r\n  become: yes\r\n  become_method: sudo\r\n  connection: ssh\r\n  gather_facts: '{{ gather }}'\r\n  vars:\r\n    myhosts: test12\r\n    gather: yes\r\n  tasks:\r\n  - name: Some description of what we are doing\r\n    yum:\r\n      name: nginx\r\n      state: latest\r\n    notify: \r\n    - restart nginx\r\n  handler:\r\n  - name: restart nginx\r\n    service: \r\n      name: nginx\r\n      enable: yes\r\n      state: restart\r\n<\/pre>\n<p>Hierbij zien we dus dat nginx gestart wordt en als dat gebeurd is, dan pas wordt de service nginx herstart.<br \/>\nAls we nu dit playbook start met<\/p>\n<pre>ansible-playbook nginx.yaml\r\n<\/pre>\n<p>Dan zullen we zie dat nginx geinstalleerd en gestart wordt, de handler wordt uitgevoerd. Als we nogmaals het commando geven zullen we zien dat alleen de task uitgevoerd wordt maar de handler niet. We hebben dus een soort if&#8230;then&#8230; statement gemaakt.<br \/>\nAls je nginx vervolgens toch wil deinstalleren, kun je het volgende commando gebruiken:<\/p>\n<pre>ansible -s -m yum -a \"name=nginx state=absent\"\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Om lekker met Ansible te kunnen werken is het gebruik van playbooks aan te raden. Een eenvoudig playbook, met toch een aantal leuke features kan er als volgt uit zien: &#8212; # Test playbook &#8211; hosts: &#8216;{{ myhosts }}&#8217; remote_user: ansible become: yes become_method: sudo connection: ssh gather_facts: &#8216;{{ gather [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,3],"tags":[],"class_list":["post-128","post","type-post","status-publish","format-standard","hentry","category-ansible","category-open-source"],"_links":{"self":[{"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/posts\/128","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=128"}],"version-history":[{"count":5,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/posts\/128\/revisions"}],"predecessor-version":[{"id":136,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/posts\/128\/revisions\/136"}],"wp:attachment":[{"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=128"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=128"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=128"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}