Les gestionnaires sont exécutés:
- à la fin d'une pièce (pas playbook)
- sur l'exécution de la
meta: flush_handlers
tâche
Donc " pour ajouter un rôle 6 à la fin qui doit avoir les gestionnaires du 4ème rôle ", vous avez besoin:
Pour votre cas d'utilisation, je suggère la première méthode car le include_role
module est encore très frais et il y a des bizarreries lors de son utilisation (voir cette question sur SO ).
De plus, veuillez noter que les noms des gestionnaires et les appels d'écoute sont globaux, donc deux gestionnaires dans des rôles distincts seront en conflit s'ils avaient le même nom et que les deux rôles ont été attribués en une seule fois. (réf. Gestionnaires: exécution d'opérations sur changement )
Les gestionnaires [] sont référencés par un nom globalement unique et sont notifiés par les notifiants. [] un gestionnaire, il ne s'exécutera qu'une seule fois, une fois toutes les tâches terminées dans un jeu particulier.
Les noms des gestionnaires et les sujets d'écoute en direct dans un espace de noms global.
Preuve empirique (exécutez ce script shell pour confirmer que les gestionnaires sont exécutés à la fin de la pièce - il y avait des commentaires et des réponses contradictoires ici):
#!/bin/bash
mkdir -p ./sf831880/roles/role1
mkdir -p ./sf831880/roles/role1/handlers
mkdir -p ./sf831880/roles/role1/tasks
mkdir -p ./sf831880/roles/role2
mkdir -p ./sf831880/roles/role2/handlers
mkdir -p ./sf831880/roles/role2/tasks
cat >./sf831880/roles/role1/tasks/main.yml <<TASKS1_END
---
- name: Always true in role1
command: echo role1
notify: handler1
TASKS1_END
cat >./sf831880/roles/role2/tasks/main.yml <<TASKS2_END
---
- name: Always true in role2
command: echo role2
notify: handler2
TASKS2_END
cat >./sf831880/roles/role1/handlers/main.yml <<HANDLERS1_END
---
- name: handler1
debug:
msg: "This is a handler in role1"
HANDLERS1_END
cat >./sf831880/roles/role2/handlers/main.yml <<HANDLERS2_END
---
- name: handler2
debug:
msg: "This is a handler in role2"
HANDLERS2_END
cat >./sf831880/playbook.yml <<PLAYBOOK_END
---
- hosts: localhost
gather_facts: no
connection: local
roles:
- role1
- role2
tasks:
- debug:
msg: "This is a task in a play"
PLAYBOOK_END
ansible-playbook ./sf831880/playbook.yml
Résultat:
PLAY [localhost] ***************************************************************
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role2 : Always true in role2] ********************************************
changed: [localhost]
TASK [debug] *******************************************************************
ok: [localhost] => {
"msg": "This is a task in a play"
}
RUNNING HANDLER [role1 : handler1] *********************************************
ok: [localhost] => {
"msg": "This is a handler in role1"
}
RUNNING HANDLER [role2 : handler2] *********************************************
ok: [localhost] => {
"msg": "This is a handler in role2"
Jouer modifié pour contenir meta: flush_handlers
:
---
- hosts: localhost
gather_facts: no
connection: local
roles:
- role1
- role2
tasks:
- meta: flush_handlers
- debug:
msg: "This is a task in a play"
Le résultat:
PLAY [localhost] ***************************************************************
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role2 : Always true in role2] ********************************************
changed: [localhost]
RUNNING HANDLER [role1 : handler1] *********************************************
ok: [localhost] => {
"msg": "This is a handler in role1"
}
RUNNING HANDLER [role2 : handler2] *********************************************
ok: [localhost] => {
"msg": "This is a handler in role2"
}
TASK [debug] *******************************************************************
ok: [localhost] => {
"msg": "This is a task in a play"