Skip to content

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öö!