Silumine (debug) ja selektiivne käivitamine¶
Ansible sisse on ehitatud ka terve hulk abivahendeid, et vähendada käivituse ohtu ja aidata süsteemide täpsema juhtimisega.
Praktiline osa 5 - silumine¶
Enne kui liigume keerukamate loogikate juurde, õpime kuidas Ansiblega muudatusi "kuivalt" (dry-run) läbi mängida ja kuidas jooksutada vaid osa playbookist.
See on kriitiline oskus, et vältida "oops" momente toodangus, eriti tundmatute moodulite ja rollidega.
Ansiblel on kolm väga võimsat lippu:
-
--syntax-check: Teeb algelise süntaktilise kontrolli ilma playbooki käivitamata. -
--check(või-C) - "Dry-run": Teeb kõik arvutused läbi, aga ei rakenda muudatusi sihtmasinas. -
--diff(või-D): Näitab täpselt, rida-realt, mis failides muutuks.
Syntax check¶
Hea meetod, näiteks peale muudatuste tegemist, kas playbookiga kõik korras:
ansible-playbook --syntax-check <playbook>
Pigem vajalik automaatsetes olukordades (enne CVS commiti/pushi, CI/CD sammu osana), aga tänapäeval veel võimsamaid variante olemas.
Check mode¶
Check mode'i primaarne kasutus on enne päriselt Ansible playbooki käima panemist kontrollida, kas miski muutub. Selleks pannakse Ansible playbook käima koos --check lipuga, ja Ansible näitab iga taski mis muutus.
Complete
Tee oma index.html failis väike muudatus. Näiteks muuda pealkirja.
Seejärel jooksuta playbooki uute lippudega:
ansible-playbook <playbook> -i hosts --check
Verify
Väljundis peaksid nägema index.html failiga seotud taski CHANGED staatust, aga veebileht ei oleks tohtinud päriselt muutuda.
Check mode ei ole perfektne - näiteks ei saa ta hakkama olukorraga kus üks task jookseb vastavalt teise taski väljundile. Sellisel juhul jäetakse taskid lihtsalt vahele.
Check mode'iga seoses on ka erinevad juhtimise konstruktsioone:
- Kui tahad sundida taski alati jooksma päriselt, isegi check mode'is, või vastupidi - ainult check mode'is, isegi kui playbooki jooksutatakse päriselt: Ansible docs
- Kui tahad jätta taskid check mode'is vahele, või peita errorid: Ansible docs
Diff mode¶
Diff mode (--diff) on teistsugune, seda kasutades jookseb playbook normaalselt, aga käivitusel prinditakse välja rohkem infot, mis täpselt failides muutus (kus saab, enamasti copy/template jms moodulid).
See võib suuremate playbookide puhul tekitada väga palju läbu.
Complete
Kasuta eelmise osa muutust, või tee uus muudatus index.html faili.
Seejärel jooksuta uute lippudega kogu oma playbooki:
ansible-playbook <playbook> -i hosts --diff
Verify
Väljundis peaksid nägema standartset diff väljundit, näidates mis kustutati, mis lisati.
Diff mode'il on viga, kus see võib konsoolis nähtavaks teha ka sensitiivset infot. Taskile saab diff mode'i keelata: Ansible docs
Diff + check¶
Kui check mode'i jooksutada, siis muudatusi ei toimu.
Kui diff mode'i jooksutada, siis muudatused toimuvad, aga näidatakse mis juhtus.
Tegelikult võib ka neid koos jooksutada:
ansible-playbook <playbook> -i hosts --diff --check
Sellisel juhul muudatused ei toimu, aga näidatakse mis juhtuks.
Praktiline osa 6 - selektiivne käivitamine¶
Playbookidega võib suhteliselt kiiresti jõuda olukorda, kus ei taha neid kogu aeg jooksutada terve inventory peale korraga, või tahaks jooksutada ainult ühte osa playbookist.
Kuigi saab teha tried-and-tested välja/sisse kommenteerimist, siis on Ansiblel selleks palju meeldivamad varjandid.
Sildid (tags)¶
Kui playbookid lähevad pikaks (sajad taskid), on tüütu oodata terve playbooki läbimist, et muuta vaid ühte konfiguratsioonifaili. Selleks on tags.
Complete
Ava oma playbook, lisa taskidele sildid. Kui playbooki enda tasks osa all pole ühtegi, kasuta näiteks debug moodulit, ning lisa sellele debug tag:
tasks:
- name: Debug message
debug:
msg: "Say a debug message"
tags: debug
Samuti lisa HTML faili kopeerimisele tag html:
- name: Copy HTML file
template:
src: index.html
dest: /usr/share/nginx/html/index.html
force: true
when: ansible_distribution == "CentOS"
tags: html
- name: Copy HTML file
template:
src: index.html
dest: /var/www/html/index.html
force: true
when: ansible_distribution == "Debian"
tags: html
Nüüd proovi jooksutada playbooki ainult kindlate siltidega:
ansible-playbook <playbook> -i hosts --tags debug
Verify
Ansible peaks käivitama ainult need taskid, millel on silt lisatud. Teised taskid jäävad vahele SKIPPED staatusega.
Eksisteerib ka eriline tag always, mis käivitatakse alati - isegi siis kui käivitada tagiga muu. See on variant näiteks info kogumise või eeldustaskide käivitamiseks.
Kui soovida panna tag tervele rollile (teeb lihtsamaks konkreetse rolli kasutuse), siis saab seda teha nii:
roles:
- name: nginx
tags: nginx
Piiramine (limit)¶
Kui --tags filtreerib mida tehakse, siis --limit filtreerib kellele tehakse.
Playbooki hosts osa piirab, mis seadmete pihta playbook jooksutatakse, aga vahel on vaja piirata veelgi.
Limit töötab kas defineeritud nime või grupinime alusel.
Complete
Ürita jooksutada Ansiblet ainult centos grupi vastu:
ansible-playbook <playbook> -i hosts --limit centos
Võid proovida ka konkreetse masina vastu:
ansible-playbook <playbook> -i hosts --limit <masina_ip>
Verify
Väljundis peaks näha olema, et playbook jooksis ainult ühe masina vastu, teisele ei tehta isegi ühenduskatset.
Limiidid töötavad ka inversiooniga, näiteks --limit !centos jookseb kõigi seadmete vastu, mis pole grupis centos.
Praktilise osa lõpp¶
Kui lõpetasite praktilise osa, siis võib kasutada ülejäänud aega sirutuspausina! Tubli töö!