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 faire fonctionner toujours?
Quelque chose comme ça:
tasks:
- name: Trigger handler
run_handler: name=nginx-restart
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
- name: trigger nginx-restart
command: /bin/true
notify: nginx-restart
2) utilisez le débogage avec changed_when: pour déclencher un gestionnaire
- debug: msg="trigger nginx-restart"
notify: nginx-restart
changed_when: true
Aussi de note pour l'option 1 et le mode de vérification: vous pouvez utiliser check_mode: no
si vous utilisez Ansible version 2.2 ou supérieure ou always_run: yes
si vous utilisez des versions antérieures à celle-ci afin que la tâche ne soit pas ignorée en mode de vérification. 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.
1) Pour toujours forcer tous les gestionnaires, exécutez ansible-playbook playbook.yml --force-handlers
, comme indiqué ici: https://github.com/ansible/ansible/issues/4777
2) 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 :
tasks:
- Shell: some tasks go here
- meta: flush_handlers
- Shell: some other tasks
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 module service
d'Ansible: http://docs.ansible.com/service_module.html
tasks:
- name: ensure ntp is running
service: name=ntp state=started enabled=yes
- name: always reload nginx
service: name=nginx state=reloaded
- name: always restart MySQL
service: name=mysql state=restarted
Redémarrer un service est une chose; s'assurer qu'il fonctionne est une autre. Si vous voulez que ansible
s'assure que nginx
est en cours d'exécution, procédez comme suit:
tasks:
- name: Ensure nginx is running
service: name=nginx state=started