52 votes

Toujours déclencher l'exécution du gestionnaire dans Ansible

J'utilise Ansible pour approvisionner mon serveur de développement.

Je veux qu'il lance toujours des services pour moi. J'ai des handlers à cet effet, mais quelle est la meilleure façon de déclencher l'exécution du handler sans condition, par exemple pour qu'il fonctionne toujours ?

Voici ce qu'il en est :

tasks:
    - name: Trigger handler
      run_handler: name=nginx-restart

89voto

jarv Points 1243

Si vous avez absolument besoin de déclencher un gestionnaire à chaque fois, deux options s'offrent à vous :

1) lancer une commande noop Shell qui indiquera toujours qu'elle a été modifiée

-  name: trigger nginx-restart
   command: /bin/true
   notify: nginx-restart

2) utiliser debug avec changed_when : pour déclencher un gestionnaire

-  debug: msg="trigger nginx-restart"
   notify: nginx-restart
   changed_when: true

Également de note pour l'option 1 et le mode de vérification : Vous pouvez utiliser check_mode: no si vous utilisez la version 2.2 ou supérieure d'Ansible 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 contrôle, mais soyez prudent car votre cas peut être différent.

21voto

Jeff Widman Points 2175

Ansible propose plusieurs options pour forcer les gestionnaires :

  1. Pour toujours forcer tous les gestionnaires, exécutez ansible-playbook playbook.yml --force-handlers comme documenté 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 :

    tâches :

    • Shell : certaines tâches vont ici
    • meta : flush_handlers
    • Shell : quelques autres tâches
  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, mais une nouvelle tâche qui appelle la fonction service module : https://docs.ansible.com/ansible/latest/collections/ansible/builtin/service_module.html

    tâches :

    • name : ensure ntp is running service : name=ntp state=started enabled=yes

    • name : toujours recharger nginx service : name=nginx state=reloaded

    • name : toujours redémarrer MySQL service : name=mysql state=restarted

11voto

Joe Bubna Points 253

Redémarrer un service est une chose, s'assurer qu'il fonctionne en est une autre. Si vous souhaitez ansible pour s'assurer nginx est en cours d'exécution, voici ce qu'il faut faire :

tasks:
  - name: Ensure nginx is running
    service: name=nginx state=started

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X