Estou usando o Ansible para provisionar meu servidor de desenvolvimento.
Quero que ele sempre inicie alguns serviços para mim. Eu tenho manipuladores para esse fim, mas qual é a melhor maneira de acionar a execução do manipulador sem condição, por exemplo, fazê-lo sempre funcionar?
Algo assim:
tasks:
- name: Trigger handler
run_handler: name=nginx-restart
Respostas:
Se você absolutamente precisar acionar um manipulador toda vez, aqui estão duas opções:
1) execute um comando noop shell que sempre reportará como alterado
2) use debug junto com o changes_when: para acionar um manipulador
Também é importante observar a opção 1 e o modo de verificação:
check_mode: no
convém usar o Ansible versão 2.2 ou superior oualways_run: yes
versões anteriores a essa para que a tarefa não seja ignorada no modo de verificação. No meu teste manual, parece que os manipuladores permanecem no modo de verificação, mas tenha cuidado, pois seu caso pode ser diferente.fonte
changed_when
com mais lógica para implementar uma tarefa não idempotente [que pode ser chamada mais de uma vez em alguns casos] como manipulador e não como tarefa.O Ansible fornece várias opções para forçar manipuladores:
1) Para forçar sempre todos os manipuladores, execute
ansible-playbook playbook.yml --force-handlers
, conforme documentado aqui: https://github.com/ansible/ansible/issues/47772) Para forçar manipuladores que foram notificados em um ponto específico dentro de um manual, você pode usar uma meta tarefa https://docs.ansible.com/playbooks_intro.html :
3) No entanto, parece que você deseja apenas garantir que um serviço esteja sendo executado ou reiniciado, independentemente do resultado de outra tarefa. Nesse caso, não use um manipulador, use uma nova tarefa que chame o
service
módulo da Ansible : http://docs.ansible.com/service_module.htmlfonte
Reiniciar um serviço é uma coisa; garantir que esteja em execução é outra. Se você quiser
ansible
ter certeza de quenginx
está em execução, faça o seguinte:fonte