Waarom kunnen we in Ansible niet volledig gebruik maken van de declaratieve aanpak in alle playbooks?
sobes.tech AI
Antwoord van AI
Ansible streeft naar declarativiteit door de gewenste toestand van het systeem te beschrijven. Echter, volledige declarativiteit is beperkt vanwege de noodzaak om een reeks operaties en afhankelijkheden tussen taken uit te voeren, wat soms een imperatieve aanpak vereist om de uiteindelijke toestand correct te bereiken. Sommige modules of taken kunnen vereisen dat acties in een bepaalde volgorde worden uitgevoerd of afhankelijk zijn van de output van eerdere taken.
Bijvoorbeeld:
- Voorwaardelijke uitvoering van taken: Het gebruik van
when:om een taak alleen onder bepaalde voorwaarden uit te voeren, kan de zuiverheid van declarativiteit schaden, omdat de voorwaarde vaak gebaseerd is op de huidige (en niet op de gewenste uiteindelijke) toestand of het resultaat van een eerdere taak. - Gebruik van
registerenchanged_when: Het opslaan van de output van een taak in een variabele (register) en het gebruik van deze output in latere taken of om te bepalen of er een verandering heeft plaatsgevonden (changed_when) is ook een imperatief element. - Modules die commando's uitvoeren: Modules zoals
command,shell,scriptzijn van nature imperatief, omdat ze gewoon een gegeven commando uitvoeren zonder de uiteindelijke toestand te garanderen of te beschrijven.
Voorbeeld van een imperatief element:
- name: Zorg dat de service draait
systemd:
name: my_service
state: started
register: service_status
- name: Herstart de service als deze draait
command: systemctl restart my_service
when: service_status.changed
Hier wordt de tweede taak alleen uitgevoerd als de eerste de status van de service heeft gewijzigd (bijvoorbeeld, deze gestart heeft). Dit is een imperatieve voorwaarde die afhankelijk is van het resultaat van de vorige actie.
Over het algemeen biedt Ansible een hybride aanpak: probeert zo declaratief mogelijk te zijn, maar laat ruimte (soms noodzakelijk) voor het gebruik van imperatieve constructies waar de logica van implementatie en configuratiebeheer dat vereist.