Как использовать переменные среды в разделе конфигурации Supervisord [supervisord]?

Я использую переменные среды в разделе программы Supervisord, и они работают нормально:

[program:some_prog]
command=%(ENV_env_var_name)s/...

Я не могу понять, как сделать то же самое в секции [supervisord]. Я попытался использовать тот же синтаксис с префиксом ENV_ и без него, но получив следующую ошибку:

Traceback (most recent call last):
  File "/usr/local/bin/supervisord", line 9, in <module>
    load_entry_point('supervisor==3.0a12', 'console_scripts', 'supervisord')()
  File "/usr/local/lib/python2.7/dist-packages/supervisor-3.0a12-py2.7.egg/supervisor/supervisord.py", line 356, in main
    options.realize(args, doc=__doc__)
  File "/usr/local/lib/python2.7/dist-packages/supervisor-3.0a12-py2.7.egg/supervisor/options.py", line 419, in realize
    Options.realize(self, *arg, **kw)
  File "/usr/local/lib/python2.7/dist-packages/supervisor-3.0a12-py2.7.egg/supervisor/options.py", line 284, in realize
    self.process_config_file()
  File "/usr/local/lib/python2.7/dist-packages/supervisor-3.0a12-py2.7.egg/supervisor/options.py", line 478, in process_config_file
    Options.process_config_file(self, do_usage=do_usage)
  File "/usr/local/lib/python2.7/dist-packages/supervisor-3.0a12-py2.7.egg/supervisor/options.py", line 292, in process_config_file
    self.read_config(self.configfile)
  File "/usr/local/lib/python2.7/dist-packages/supervisor-3.0a12-py2.7.egg/supervisor/options.py", line 527, in read_config
    section.directory = existing_directory(directory)
  File "/usr/local/lib/python2.7/dist-packages/supervisor-3.0a12-py2.7.egg/supervisor/datatypes.py", line 336, in existing_directory
    nv = v % {'here':here}
KeyError: 'var_name'

Есть ли способ достичь этого?

Ответы

Ответ 1

Supervisor поддерживает только расширения с переменными окружения в ограниченном количестве мест, каждый из которых документирован в документации .

К сожалению, параметр [supervisord] directory не является одним из них; он поддерживает только переменную %(here), ничего больше.

Вы можете запросить этот запрос функции в контролере отслеживания проблем, если это важная проблема для вас.

В моих проектах мы обычно используем zc.buildout, чтобы настроить среду развертывания и разработки, предсказуемую и повторяемую, и сгенерировать конфигурацию супервизора с шаблон. Для облегчения этой задачи существует специализированный рецепт сборки.