Muutujad¶
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
fileskaustasttemplateskausta. NB! Ansible template'ide puhul on hea tava nad nimetada kas.tplvõi.j2lõpuga, aga ei pea. - Muudame seda template kaustas HTML faili, lisame
Welcome!osa asemelWelcome {{ inimese_nimi }}!. - Võtame oma
copymooduli käsu asemel kasutuseletemplatemooduli.- Kui muutsid faili nime, siis tuleb siin
srcparameetrit ka muuta.
- Kui muutsid faili nime, siis tuleb siin
- Defineeri mõnes lubatud kohas (
host_vars,group_vars,inventory,playbook) ära muutujainimese_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:
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_distributionmuutuja.
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öö!