Blokid ja veahaldus¶
Ansible block on võimas konstruktsioon, mis võimaldab loogiliselt grupeerida mitu taski üheks tervikuks. Sellel on kaks peamist eesmärki:
- Grupeerimine: Rakendada ühiseid tingimusi (when) või seadeid (become, tags) mitmele taskile korraga, ilma koodi kordamata.
- Veahaldus: Ehitada "Try / Catch / Finally" loogikat, et tegeleda ootamatute vigadega ilma playbooki peatamata.
Grupeerimine¶
Selle asemel, et kirjutada when: ansible_os_family == 'Debian' iga taski taha, saame need panna blokki:
- name: Seadista Debianipõhised asjad
when: ansible_os_family == 'Debian'
block:
- name: Installi apache2
apt:
name: apache2
state: present
- name: Kopeeri konf
template:
src: apache.conf.j2
dest: /etc/apache2/apache2.conf
Veahaldus¶
Keerulisemates süsteemides võib juhtuda vigu, mida me tahame kinni püüda (näiteks: teenuse restart ebaõnnestub, aga me tahame proovida teist meetodit, mitte peatada skripti).
Selleks on struktuur (sarnane programmeerimiskeeltele):
- block (Try): Kood, mida üritame jooksutada.
- rescue (Catch): Kood, mis käivitub ainult siis, kui block osas tekkis viga (failed staatus).
- always (Finally): Kood, mis käivitub alati, olenemata sellest, kas tekkis viga või mitte. Üldiselt kasutusel cleanup-iks.
Praktiline ülesanne¶
Simuleerime olukorda, kus üritame paigaldada tarkvara, mis võib ebaõnnestuda (näiteks vale nimega pakk), ja tegeleme selle veaga viisakalt.
Complete
Loo uus playbook (või täienda olemasolevat) järgneva struktuuriga.
Me üritame installida pakki nimega kalahirv, mida ei eksisteeri. Kui see ebaõnnestub, püüame vea kinni ja prindime teate. Lõpuks teatame, et protsess on läbi.
- hosts: all
tasks:
- name: Riskantne tarkvara paigaldus
block:
- name: Ürita installida olematut pakki
package:
name: kalahirv
state: present
- name: See task ei tohiks kunagi käivituda
debug:
msg: "Seda teadet ei tohiks näha, kui eelmine task feilis!"
rescue:
- name: Püüa viga kinni
debug:
msg: "Paigaldus ebaõnnestus! Aga pole hullu, liigume edasi."
# Siin võiks olla näiteks alternatiivne installimeetod (nt compile from source)
always:
- name: Koristustööd
debug:
msg: "See jookseb alati - olgu tulemus roheline või punane."
Verify
Jooksuta playbooki. Jälgi väljundit hoolikalt:
Ürita installida...peaks olema punane (failed), aga Ansible ei peata tööd.See task ei tohiks kunagi käivitudajäetakse vahele.Püüa viga kinni(Rescue) käivitatakse ja on roheline/kollane.Koristustööd(Always) käivitatakse lõpus.
Lõpptulemusena peaks playbooki kokkuvõttes (Play Recap) olema failed=0, sest rescue blokk lahendas vea ära.