Pourquoi dans Ansible, ne pouvons-nous pas utiliser pleinement l'approche déclarative dans tous les playbooks?
sobes.tech IA
Réponse de l'IA
Ansible vise la déclarativité en décrivant l’état souhaité du système. Cependant, la déclaration complète est limitée en raison de la nécessité d’exécuter une séquence d’opérations et de dépendances entre les tâches, ce qui nécessite parfois une approche impérative pour atteindre correctement l’état final. Certains modules ou tâches peuvent nécessiter d’effectuer des actions dans un ordre spécifique ou dépendre de la sortie des tâches précédentes.
Par exemple :
- Exécution conditionnelle des tâches : L’utilisation de
when:pour exécuter une tâche uniquement dans certaines conditions peut violer la pureté déclarative, car la condition est souvent basée sur l’état actuel (et non sur l’état final souhaité) ou sur le résultat d’une tâche précédente. - Utilisation de
registeretchanged_when: Enregistrer la sortie d’une tâche dans une variable (register) et utiliser cette sortie dans des tâches ultérieures ou pour déterminer si un changement a eu lieu (changed_when) est également un élément impératif. - Modules qui exécutent des commandes : Les modules comme
command,shell,scriptsont par nature impératifs, car ils exécutent simplement une commande donnée sans garantir ni décrire l’état final.
Exemple d’un élément impératif :
- name: S’assurer que le service fonctionne
systemd:
name: my_service
state: started
register: service_status
- name: Redémarrer le service si en cours d’exécution
command: systemctl restart my_service
when: service_status.changed
Ici, la deuxième tâche ne s’exécute que si la première a modifié l’état du service (par exemple, l’a démarré). C’est une condition impérative dépendant du résultat de l’action précédente.
En général, Ansible propose une approche hybride : il essaie d’être aussi déclaratif que possible, mais laisse de la place (parfois nécessaire) à l’utilisation de constructions impératives là où la logique de déploiement et de gestion de la configuration l’exige.