How do I use environment variables in Supervisord's [supervisord] config section?

syoavc picture syoavc · Jul 16, 2012 · Viewed 7.7k times · Source

I use environment variables in Supervisord's program section, and they work just fine:

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

I can't figure out though how to do the same in the [supervisord] section. I tried using the same syntax with and without the ENV_ prefix, but getting the following error:

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'

Is there a way to achieve that?

Answer

Martijn Pieters picture Martijn Pieters · Jul 17, 2012

Supervisor only supports expansions with environment variables in a limited number of locations, each of which is documented in the configuration documentation.

Unfortunately, the [supervisord] directory option is not one of those; it only supports the %(here) variable, nothing else.

You could file a feature request for this in the supervisord issue tracker if this an important issue for you.

In my projects, we generally use zc.buildout to make deployment and development environment setup predictable and repeatable, and generate the supervisor configuration from a template. There is a specialized buildout recipe to make this task easier.