Programy obsługi to listy zadań, które tak naprawdę nie różnią się od zwykłych zadań, do których odwołuje się globalnie unikalna nazwa i które są powiadamiane przez powiadamiających. Jeśli nic nie powiadomi programu obsługi, nie uruchomi się. Niezależnie od tego, ile zadań powiadomi przewodnik, uruchomi się tylko raz, po zakończeniu wszystkich zadań w konkretnej grze. ansible doc
1) Programy obsługi, które robią to samo, powinny mieć takie same nazwy.
restart nginx
ZAWSZE restartuje nginx, nie handler1
ihandler2
2) Manipulatory są uruchamiane na KONIEC całego „Play” spektaklu o zasięgu do twoich sekcji.
3) Użyłbym funkcji register
i when
do zadań, które powinny zostać zrestartowane, zwróć uwagę, że ten var powinien nosić przy sobie.
Źródło kodu
PLAY [localhost] ***************************************************************
TASK [debug] *******************************************************************
ok: [localhost] => {
"msg": "Play 1"
}
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role2 : Run if change in task c of role 1] *******************************
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 : handler] **********************************************
ok: [localhost] => {
"msg": "This is a handler in role1"
}
PLAY [localhost] ***************************************************************
TASK [debug] *******************************************************************
ok: [localhost] => {
"msg": "Play 2"
}
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role2 : Run if change in task c of role 1] *******************************
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 : handler] **********************************************
ok: [localhost] => {
"msg": "This is a handler in role1"
}
PLAY RECAP *********************************************************************
localhost : ok=20 changed=14 unreachable=0 failed=0
Wiele sposobów na wykonanie tego samego zadania. Programy obsługi zostały zaprojektowane w taki sposób, aby zapobiec wielokrotnemu ponownemu uruchamianiu tego samego procesu, np. Wiele zmian w serwerze nginx, który ma strony internetowe, certyfikaty ssl i inne zadania wymagające ponownego uruchomienia usługi.