Ansible tiene dificultades para reiniciar Supervisor

8

Estoy tratando de reiniciar Supervisor a través de mi Playbook de Ansible, pero parece que me encuentro con un problema con el módulo supervisor de Ansible.

En mi configuración de Supervisor he definido un programa:

[program:process]
process_name=%(program_name)s_%(process_num)02d
command=/home/box1/workers/bin/process
numprocs=64
directory=/home/box1/workers/bin
autostart=true
autorestart=true
startretries=5
stderr_logfile=/tmp/%(program_name)s-err.log
stdout_logfile=/tmp/%(program_name)s-out.log
user=root

Y esto funciona bien. Sin embargo, cuando intento reiniciar Supervisor a través de Ansible, aparece el siguiente error:

failed: [box1] => {"failed": true}
msg: program:process: ERROR (no such process)
program:process: ERROR (no such process)

La configuración de mi tarea Ansible se ve así:

- name: Restart Supervisor
  sudo: yes
  supervisorctl: name=program:process state=restarted config=/etc/supervisor/supervisord.conf

Para el nameparámetro He tratado program:process, program, program:y processpero ninguno parece funcionar. Actualmente estoy en Ansible 1.5.4.

Luke
fuente
1
Lo primero que debe hacer es actualizar Ansible. Prácticamente no hay razón por la que deba estar en una versión tan antigua.
Michael Hampton
Es la versión lista para usar que viene con Ubuntu 14.04 LTS. Entiendo que está un poco anticuado, pero nada en el manual de Ansible con respecto al módulo Supervisor indica que debería actualizar (aparte del nombre del grupo que no me interesa). De acuerdo, una versión más nueva podría tener correcciones de errores, pero lo que estoy intentando parece bastante rudimentario para que ninguna versión más reciente pueda manejarlo.
Lucas
Estoy bastante seguro de que necesita Ansible 1.6 o posterior para esto, ya que fue cuando se agregó el soporte grupal. Incluso Red Hat está rastreando la última versión estable (actualmente están en 1.9.4), por lo que no sé cuál es el trato con Ubuntu aquí. Por supuesto, en Red Hat podría usar systemd y olvidarse de todas estas cosas de supervisor.
Michael Hampton
Sin preocupaciones. Esta es la documentación que voy a enviar
Luke
Correcto, y esa es la misma página que indica que necesitas 1.6.
Michael Hampton

Respuestas:

9

El supervisorctlmódulo Ansible no admite el reloadcomando ( ver aquí ), que es necesario para que el supervisor tome nuevas entradas de configuración.

Puedes hacerlo tú mismo así:

- command: supervisorctl reread
  sudo: yes
- supervisorctl: name=program:process state=restarted config=/etc/supervisor/supervisord.conf
  sudo: yes

Parece que falta la documentación sobre reload / reread / update / restart, y esta publicación de blog está desactualizada ; puedes experimentar para asegurarte de que reloadhace lo que esperas.

Finalmente, no coloque las definiciones de su programa en supervisord.conf . En su lugar, colóquelos como archivos individuales en /etc/supervisor/conf.d/*.conf. Eso hace que la instalación y el mantenimiento sean mucho más fáciles.

tedder42
fuente
2
Gracias por eso. Muy apreciado, sin embargo, no hace la diferencia. La supervisorctltarea sigue fallando porque no puede hacer referencia / encontrar el program:process. Esto parece ser un problema en este módulo Ansible (y sí, no coloco mis definiciones de programa dentro supervisord.confy se cargan desde confarchivos externos ). Al final fui con un simple comando Ansible, pasando por alto el módulo Supervisor por completo: command: supervisorctl -c /etc/supervisor/supervisord.conf restarty esto funciona perfectamente.
Lucas
¿ -cFunciona sin el @luke?
tedder42