Sobes.tech
Middle+

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:

  1. 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.
  2. register ja changed_when kasutamine: Ülesande väljundi salvestamine muutujasse (register) ja selle kasutamine järgnevates ülesannetes või „muutuse“ määramine (changed_when) on samuti imperatiivne element.
  3. Käsu täitvad moodulid: command, shell, script moodulid 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.