Skip to content

Praktiline osa 3

Erilised muutujad

Siiamaani oleme Ansiblega masinasse logimise jaoks kasutanud parooli, mida Ansible meilt küsib. See on võrdlemisi tüütu.

Selle vältimiseks on kaks varianti - kas kasutada SSH avaliku võtme autentimist, või anda parool juba enne Ansible-le ette.

Ansible toetab tervet hulka muutujaid, et kontrollida kuidas mingi kindla seadme peal käituda: https://docs.ansible.com/ansible/latest/inventory_guide/intro_inventory.html#connecting-to-hosts-behavioral-inventory-parameters

Complete

Võta inventarifail, ja defineeri mõlema masina jaoks ära muutujad ansible_user ja ansible_password. Kasutajaks võiks jääda root, ja parooliks pane masina root kasutaja parool.

Kui on muid muutujaid, mis elu lihtsaks teevad, siis võib neid ka kasutada.

Verify

Testimiseks tuleks kasutada kas näiteks ping ad-hoc käsku, või proovida playbooki jooksutada ilma -k liputa. Mõlemad peaksid ilusti käima minema ilma paroolita.

Muutujate kasutamine

Proovime muutujaid Ansible sees. Ansible sees muutuja kasutamiseks tuleb järgida süntaksi:

{{ muutuja }}

Kus muutuja on siis defineeritud muutuja nimi. See muutuja peab olema defineeritud, muidu playbook failib sammu juures, kus seda üritatakse kasutada. Muutujaid saab kasutada mitmes kohas - playbookis endas, templiitimiseks, aga ka näiteks teiste muutujate defineerimisel.

Alustame sellega kuidas kasutada ise defineeritud muutujaid templiitimiseks - faili kopeerimisel juppide dünaamiliselt välja vahetamiseks.

Selleks on meil vaja teha järgnevat:

  • Liigutame HTML faili files kaustast templates kausta. NB! Ansible template'ide puhul on hea tava nad nimetada kas .tpl või .j2 lõpuga, aga ei pea.
  • Muudame seda template kaustas HTML faili, lisame Welcome! osa asemel Welcome {{ inimese_nimi }}!.
  • Võtame oma copy mooduli käsu asemel kasutusele template mooduli.
    • Kui muutsid faili nime, siis tuleb siin src parameetrit ka muuta.
  • Defineeri mõnes lubatud kohas (host_vars, group_vars, inventory, playbook) ära muutuja inimese_nimi, pane väärtuseks enda nimi.

Complete

Tee vajalikud muudatused oma projekti, ning pane playbook käima ja lase sellel lõpuni joosta.

Üks väga hea käsk testimiseks, kas kõik on õigesti defineeritud, on enne kasutatud ansible-inventory --list käsk. See käsk toob ilusti välja, mis muutujad millise masina kohta defineeritud on, hostvars osas.

Kui jäi midagi segaseks või on vaja abi, ava LISAINFO aken allpool.

LISAINFO

Faili liigutamiseks saab kasutada mv käsku, näiteks: mv files/index.html templates/index.html.tpl.

Teise mooduli kasutusele võtmiseks tuleb lihtsalt kustutada copy osa ja kirjutada asemele template:

- name: Copy HTML file
  template:
    src: index.html.tpl
    dest: /usr/share/nginx/html/index.html
    force: true

Ära unusta muutmast ka src parameetris failinime.

Muutuja defineerimiseks tuleks valida üks võimalikust variantidest, ning seda kasutada. Näiteks inventary failiga defineerimine:

[centos]
193.40.11.124 ANSIBLE_PASSWORD="parool" inimese_nimi="Sander"

Või kasutades group_vars-i:

group_vars/centos.yml
inimese_nimi: Sander

Kindlasti ära unusta ka templiiti muuta, muidu seda muutujat ei kasutata. Muuda ära rida:

<h2>Welcome!</h2>
<h2>Welcome {{ inimese_nimi }}!</h2>

Siis kasutatakse templiidi renderdamiseks seda muutujat.

Ja siis tuleks playbook panna samamoodi käima, nagu varem:

ansible-playbook playbook.yml -i <inventarifail>

Verify

Kui playbook on ära jooksnud, peaks veebilehe pealt vastu vaatama personaliseeritud tervitus.

Faktid ja setup moodul

Ansible playbooki jooksutades vaikimisi esimene samm on Gathering Facts. See on automaatselt tehtud käsk, mis kogub masina kohta terve hulga informatsiooni, mis teeb meie elu lihtsamaks.

Ansible kutsub neid muutujaid, mis masina kohta kogutakse, "faktideks" - seda siis seetõttu, et neid muuta ei saa. Need on loodud masina kohta info saamiseks.

Complete

Ansible teeb seda faktide kogumist kasutades setup moodulit. Seda võib ka ise vabalt jooksutada:

ansible -m setup centos -i <inventarifail>

Seda jooksutades peaks vastu tulema tõsine hulk muutujaid. Need ongi faktid.

Soovitus on pilk peale visata, et näha, mis töö Ansible sinu eest ära teeb, aga eriti tähtis on vaadata mõlemal masinal ansible_distribution muutujat, sest kasutame seda järgmises ülesandes.

Tingimuslaused

Fakte saab väga lihtsasti ära kasutada selleks, et teha erinevaid tegevusi erinevate distributsioonide või isegi operatsioonisüsteemidega seadmete peal, ilma et peaks kirjutama eraldi playbooki.

Selleks on Ansible-l olemas tingimuslaused, mida kasutatakse when: deklaratsiooniga.

näide tingimuslause kasutusest

Proovi oma test.yml-is järgmiseid käske, ja pane käima. Mis juhtub?

- name: Tingimuslause - centos
  debug:
    msg: "Olen CentOS masin!"
  when: ansible_distribution == "CentOS"

- name: Tingimuslause - debian
  debug:
    msg: "Olen Debiani masin!"
  when: ansible_distribution == "Debian"

Nagu näha, siis kui Ansible käivitab esimest käsku Debiani masina peal, siis saab käsk staatuseks skipping. Seda käsku ei käivitata selle masina peal, vaid lihtsalt jäetakse vahele, sest ansible_distribution fakti väärtus ei võrdu CentOS.

See on kogu when klausli loogika - kui käivitamise ajal when-ile järgnev loogika hinnatakse tõeseks, siis pannakse käsk masina peal käima. Muidu jäetakse vahele.

Kasutades neid teadmisi, ehita olemasolev playbook.yml ümber nii, et see jookseks ilusti ka Debian masina peal. Selleks on vaja:

  • CentOS osad panna käima ainult CentOS peal.
  • CentOS kasutab pakihaldurina dnf-i.
  • CentOS-i vaikimisi veebi fail on /usr/share/nginx/html/index.html.
  • Debian osad panna käima ainult Debian peal
  • Debian kasutab pakihaldurina apt-i.
  • Debian-i vaikimisi veebi fail on /var/www/html/index.html.
  • Boonus: Lisaefekti saamiseks võib HTML templiiti lisada sellesama ansible_distribution muutuja.

Complete

Tee vajalikud muudatused, pane playbook käima, seekord mõlema masina peal.

Rohkema info jaoks klikka elemendi nimega "LISAINFO" peale - see avab rohkem infot.

LISAINFO
- name: Install NGINX
  dnf:
    name: nginx
    state: present
  when: ansible_distribution == "CentOS"

- name: Install NGINX
  apt:
    name: nginx
    state: present
  when: ansible_distribution == "Debian"

- name: Copy HTML file
  template:
    src: index.html
    dest: /usr/share/nginx/html/index.html
    force: true
  when: ansible_distribution == "CentOS"

- name: Copy HTML file
  template:
    src: index.html
    dest: /var/www/html/index.html
    force: true
  when: ansible_distribution == "Debian"

Verify

Peale Ansible läbi käimist mõlema seadme peal, peaksid nad mõlemad nüüd vastama brauseris veebilehega.

Praktilise osa lõpp

Kui lõpetasite praktilise osa, siis võib kasutada ülejäänud aega sirutuspausina! Tubli töö!