Miks Ansible'is ei saa täielikult kasutada deklaratiivset lähenemist kõigis playbook'ides?
sobes.tech AI
Vastus AI-lt
Ansible püüab olla deklaratiivne, kirjeldades soovitud süsteemi olekut. Kuid täielik deklaratiivsus on piiratud operatsioonide järjekorra ja ülesannete vaheliste sõltuvuste vajadusega, mis mõnikord nõuab imperatiivset lähenemist õige lõppseisundi saavutamiseks. Mõned moodulid või ülesanded võivad nõuda toimingute teostamist kindlas järjekorras või sõltuda eelnevate ülesannete väljundist.
Näited:
- Tingimuslikud ülesannete täitmine:
when:kasutamine, et täita ülesanne ainult teatud tingimustel, võib rikkuda puhta deklaratiivsuse, kuna tingimus põhineb sageli praegusel (mitte soovitud lõpp-) seisundil või eelneva ülesande tulemusel. registerjachanged_whenkasutamine: Ülesande väljundi salvestamine muutujasse (register) ja selle kasutamine järgnevates ülesannetes või „muutuse“ määramine (changed_when) on samuti imperatiivne element.- Käsu täitvad moodulid:
command,shell,scriptmoodulid on oma olemuselt imperatiivsed, kuna nad lihtsalt täidavad määratud käsu, mitte ei taga ega kirjelda lõppseisundit.
Imperatiivse elemendi näide:
- nimi: Veenduge, et teenus töötab
systemd:
nimi: my_service
seisund: käivitatud
registreeri: teenuse_seisund
- nimi: Taaskäivitage teenus, kui see on käivitatud
käsk: systemctl restart my_service
when: teenuse_seisund.changed
Siin täidetakse teine ülesanne ainult juhul, kui esimene ülesanne muutis teenuse seisundit (näiteks käivitades selle). See on imperatiivne tingimus, mis sõltub eelmisest tegevusest.
Üldiselt pakub Ansible paindlikku lähenemist: ta püüab olla võimalikult deklaratiivne, kuid võimaldab kasutada imperatiivseid struktuure seal, kus see on loogiliselt vajalik konfiguratsiooni haldamiseks.