Escaping % signs?

41 views
Skip to first unread message

Guy Matz

unread,
Jun 25, 2015, 10:11:39 AM6/25/15
to ansible...@googlegroups.com
Hi!  I've written a module and am bumping up against an issue when I try to include a percent sign in one of the parameters, e.g.:

  supervisor_prog:
    name: smlp-data
    user: smlp
    command: java blah-blah-blah
    environment: PATH='/usr/java/jdk1.8.0_11/bin:%(ENV_PATH)s'

Notice the % sign in the environment param above . . .  that's causing ConfigParser to choke with:
ConfigParser.InterpolationMissingOptionError: Bad value substitution:
    section: [program:smlp-data]
    option : environment
    key    : env_path
    rawval : '

I would really like to escape that in my module code . . .  anyone know if it's possible to escape that when I bring in the param here?
self._environment = module.params['environment']

Or do I need to escape it in my call to the module . .   i tried using {% raw %}...{% endraw %} - which I saw somewhere else on the mailing list - but that failed with a syntax error.

Thanks a lot,
Guy

Guy Matz

unread,
Jun 25, 2015, 11:11:44 AM6/25/15
to ansible...@googlegroups.com
Ah!  Narrowing it down, the problem is actually with the ConfigParser module . . .  I have a supervisor config that has the line:
environment: PATH='/usr/java/jdk1.8.0_11/bin:%(ENV_PATH)s'

and ConfigParser chokes whenever it tries to process that line:
>>> from ConfigParser import SafeConfigParser
>>> c = SafeConfigParser()
>>> c.read('/etc/supervisor.d/sidecar-data')
['/etc/supervisor.d/sidecar-data']
>>> c.sections()
['program:sidecar-data']
>>> c.items('program:sidecar-data')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.6/ConfigParser.py", line 578, in items
    for option in options]
  File "/usr/lib64/python2.6/ConfigParser.py", line 614, in _interpolate
    self._interpolate_some(option, L, rawval, section, vars, 1)
  File "/usr/lib64/python2.6/ConfigParser.py", line 646, in _interpolate_some
    option, section, rest, var)
ConfigParser.InterpolationMissingOptionError: Bad value substitution:
    section: [program:sidecar-data]

    option : environment
    key    : env_path
    rawval : '

Any ideas?
Thanks again!!

Guy Matz

unread,
Jun 25, 2015, 2:43:08 PM6/25/15
to ansible...@googlegroups.com
I figured it out!!  RawConfigParser "does not support the magical interpolation behavior"
Reply all
Reply to author
Forward
0 new messages