Ansible a du mal à redémarrer le superviseur

8

J'essaie de redémarrer Supervisor via mon Playbook Ansible, mais je semble tomber dans un problème avec le module Superviseur pour Ansible.

Dans ma configuration de superviseur, j'ai défini un programme:

[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

Et cela fonctionne bien. Cependant, lorsque j'essaie de redémarrer Supervisor via Ansible, j'obtiens l'erreur suivante:

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

Ma configuration de tâche Ansible ressemble à ceci:

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

Pour le nameparamètre que je l' ai essayé program:process, program, program:et , processmais aucun ne semble travailler. Je suis actuellement sur Ansible 1.5.4.

Luc
la source
1
La première chose à faire est de mettre à jour Ansible. Il n'y a pratiquement aucune raison pour laquelle vous devriez utiliser une version aussi ancienne.
Michael Hampton
Il s'agit de la version prête à l'emploi fournie avec Ubuntu 14.04 LTS. Je comprends que c'est un peu daté mais rien dans le manuel Ansible en ce qui concerne le module Superviseur n'indique que je devrais mettre à jour (à part le nom du groupe qui ne m'intéresse pas). Certes, une version plus récente peut avoir des corrections de bugs, mais ce que j'essaie semble assez rudimentaire qu'aucune version la plus récente ne devrait pouvoir le gérer.
Luke
Je suis presque sûr que vous avez besoin d'Ansible 1.6 ou version ultérieure pour cela, car c'est à ce moment-là que le support de groupe a été ajouté. Même Red Hat suit la dernière version stable (ils sont actuellement sur 1.9.4), donc je ne sais pas quel est l'accord avec Ubuntu ici. Bien sûr, sur Red Hat, vous pouvez simplement utiliser systemd et oublier tous ces trucs de superviseur.
Michael Hampton
Pas de soucis. Voici la documentation dont je pars: docs.ansible.com/ansible/supervisorctl_module.html
Luke
Bon, et c'est la même page qui note que vous avez besoin de 1.6!
Michael Hampton

Réponses:

9

Le supervisorctlmodule Ansible ne prend pas en charge la reloadcommande ( voir ici ), qui est nécessaire pour que le superviseur récupère de nouvelles entrées de configuration.

Vous pouvez le faire vous-même comme ceci:

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

La documentation sur recharger / relire / mettre à jour / redémarrer semble être manquante et ce billet de blog est obsolète ; vous pouvez expérimenter pour vous assurer reloadque ce que vous attendez.

Enfin, ne placez pas vos définitions de programme dans supervisord.conf . Au lieu de cela, placez-les en tant que fichiers individuels dans /etc/supervisor/conf.d/*.conf. Cela rend l'installation et la maintenance beaucoup plus faciles.

tedder42
la source
2
Merci pour ça. Très apprécié, cependant, cela ne fait aucune différence. La supervisorctltâche échoue toujours car elle ne peut pas référencer / trouver le fichier program:process. Cela semble être un problème dans ce module Ansible (et oui, je ne place pas mes définitions de programme à l'intérieur de supervisord.confet elles sont chargées à partir de conffichiers externes ). À la fin, je suis allé avec une simple commande Ansible, en contournant complètement le module Superviseur: command: supervisorctl -c /etc/supervisor/supervisord.conf restartet cela fonctionne parfaitement.
Luke
ça marche sans le -c@luke?
tedder42