Ansible tem dificuldade em reiniciar o Supervisor

8

Estou tentando reiniciar o Supervisor através do meu Ansible Playbook, mas parece que estou encontrando um problema com o módulo supervisor do Ansible.

Na minha configuração de supervisor, defini um 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

E isso funciona bem. No entanto, quando tento reiniciar o Supervisor através do Ansible, recebo o seguinte erro:

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

Minha configuração de tarefa Ansible é assim:

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

Para o nameparâmetro Eu tentei program:process, program, program:e process, mas nada parece funcionar. Atualmente, estou no Ansible 1.5.4.

Lucas
fonte
1
A primeira coisa a fazer é atualizar o Ansible. Não há praticamente nenhuma razão para você estar em uma versão tão antiga.
Michael Hampton
É a versão pronta para uso que acompanha o Ubuntu 14.04 LTS. Eu entendo que é um pouco datado, mas nada no manual Ansible em relação ao módulo Supervisor indica que eu devo atualizar (além da coisa do nome do grupo em que não estou interessado). É verdade que uma versão mais recente pode ter correções de bugs, mas o que estou tentando parece bastante rudimentar que nem uma versão mais recente possa lidar com isso.
Luke
Estou bastante certo de que você precisa ansible 1.6 ou posterior para isso, já que é quando o suporte grupo foi adicionado. Até a Red Hat está rastreando a versão estável mais recente (atualmente no 1.9.4), então não sei qual é o problema com o Ubuntu aqui. É claro que no Red Hat você pode simplesmente usar o systemd e esquecer todas essas coisas de supervisor.
Michael Hampton
Não se preocupe. Esta é a documentação da qual estou saindo: docs.ansible.com/ansible/supervisorctl_module.html
Luke
Certo, e essa é a mesma página que indica que você precisa da versão 1.6!
Michael Hampton

Respostas:

9

O supervisorctlmódulo Ansible não suporta o reloadcomando ( veja aqui ), necessário para o supervisor pegar novas entradas de configuração.

Você pode fazê-lo assim:

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

A documentação sobre recarregar / reler / atualizar / reiniciar parece estar ausente e esta postagem do blog está desatualizada ; você pode experimentar para garantir que reloadfaz o que espera.

Por fim, não coloque suas definições de programa no supervisord.conf . Em vez disso, coloque-os como arquivos individuais em /etc/supervisor/conf.d/*.conf. Isso facilita muito a instalação e manutenção.

tedder42
fonte
2
Obrigado por isso. Muito apreciado, no entanto, não faz diferença. A supervisorctltarefa ainda está falhando porque não pode fazer referência / encontrar o arquivo program:process. Isso parece ser um problema neste módulo Ansible (e sim, eu não coloco minhas definições de programa dentro do supervisord.confe elas são carregadas de confarquivos externos ). No final, eu segui um comando Ansible simples, ignorando completamente o módulo Supervisor: command: supervisorctl -c /etc/supervisor/supervisord.conf restarte isso funciona perfeitamente.
Luke
funciona sem o -c@luke?
tedder42