J'utilise Ansible pour provisionner mon serveur de développement.
Je veux qu'il démarre toujours certains services pour moi. J'ai des gestionnaires à cet effet, mais quelle est la meilleure façon de déclencher l'exécution du gestionnaire sans condition, par exemple pour que cela fonctionne toujours?
Quelque chose comme ça:
tasks:
- name: Trigger handler
run_handler: name=nginx-restart
Réponses:
Si vous devez absolument déclencher un gestionnaire à chaque fois, voici deux options:
1) Exécutez une commande Noop Shell qui sera toujours signalée comme modifiée
2) utilisez debug avec changed_when: pour déclencher un gestionnaire
En outre de la note pour l' option 1 et vérifiez le mode: Vous pouvez utiliser
check_mode: no
si vous utilisez la version Ansible 2.2 ou supérieur oualways_run: yes
si vous utilisez les versions antérieures à cela pour que la tâche ne soit pas sautée en mode contrôle. D'après mes tests manuels, il semble que les gestionnaires restent en mode de vérification, mais faites attention car votre cas peut différer.la source
changed_when
avec plus de logique pour implémenter une tâche non idempotente [qui peut être invoquée plus d'une fois dans certains cas] en tant que gestionnaire plutôt qu'en tant que tâche.Ansible propose plusieurs options pour forcer les gestionnaires:
1) Pour forcer toujours tous les gestionnaires, exécutez
ansible-playbook playbook.yml --force-handlers
, comme indiqué ici: https://github.com/ansible/ansible/issues/47772) Pour forcer les gestionnaires qui ont été notifiés à un point spécifique d'un playbook, vous pouvez utiliser une méta-tâche https://docs.ansible.com/playbooks_intro.html :
3) Cependant, il semble que vous souhaitiez simplement vous assurer qu'un service est en cours d'exécution ou redémarré, quel que soit le résultat d'une autre tâche. Dans ce cas, n'utilisez pas de gestionnaire, utilisez une nouvelle tâche qui appelle le
service
module d'Ansible : http://docs.ansible.com/service_module.htmlla source
Redémarrer un service est une chose; s'assurer qu'il fonctionne est une autre. Si vous voulez
ansible
pour vous assurernginx
est en cours d' exécution, vous faites ceci:la source