Estoy usando Ansible para aprovisionar mi servidor de desarrollo.
Quiero que siempre comience algunos servicios para mí. Tengo controladores para este propósito, pero ¿cuál es la mejor manera de activar la ejecución del controlador sin condiciones, por ejemplo, hacer que siempre funcione?
Algo como esto:
tasks:
- name: Trigger handler
run_handler: name=nginx-restart
Respuestas:
Si realmente necesita activar un controlador cada vez, aquí hay dos opciones:
1) ejecute un comando de shell noop que siempre informará como modificado
2) usa la depuración junto con changed_when: para activar un controlador
También es importante tener en cuenta la Opción 1 y el Modo de verificación: puede usarlo
check_mode: no
si usa la versión 2.2 de Ansible o superior oalways_run: yes
si usa versiones anteriores para que la tarea no se salte en el modo de verificación. Según mi prueba manual, parece que los controladores permanecen en modo de verificación, pero tenga cuidado ya que su caso puede diferir.fuente
changed_when
con más lógica para implementar una tarea no idempotente [que se puede invocar más de una vez en algunos casos] como un controlador en lugar de una tarea.Ansible ofrece varias opciones para forzar manejadores:
1) Para forzar siempre a todos los manejadores, ejecute
ansible-playbook playbook.yml --force-handlers
, como se documenta aquí: https://github.com/ansible/ansible/issues/47772) Para forzar a los controladores que han sido notificados en un punto específico dentro de un libro de jugadas, puede usar una metatarea https://docs.ansible.com/playbooks_intro.html :
3) Sin embargo, parece que solo quiere asegurarse de que un servicio se esté ejecutando o reiniciando, independientemente del resultado de otra tarea. En ese caso, no use un controlador, use una nueva tarea que llame al
service
módulo de Ansible : http://docs.ansible.com/service_module.htmlfuente
Reiniciar un servicio es una cosa; asegurarse de que se está ejecutando es otra. Si desea
ansible
asegurarse de que senginx
está ejecutando, haga esto:fuente