3

I have a block that looks like this:

{% if grains['function'] == 'production' %}
{% set conf_src = "prod.yml.ninja" %}
{% elif grains['function'] == 'staging'] %}
{% set conf_src = "staging.yml.ninja" %}
{% elif grains['function'] == 'dev'] %}
{% set conf_src = "dev.yml.ninja" %}
{% endif %}

Is there any way to do something like

{% 
    if grains['function'] == 'production'
        set conf_src = "prod.yml.ninja"
    elif grains['function'] == 'staging'
        set conf_src = "staging.yml.ninja"
    elif grains['function'] == 'dev'
        set conf_src = "dev.yml.ninja"
    endif
%}

So I can just open the block once?

OrangeDog
  • 36,653
  • 12
  • 122
  • 207
jcity
  • 826
  • 1
  • 9
  • 13

1 Answers1

1

You can define a look-up dictionary, and only include non-trivial cases:

html = '''
{% set lookup = dict(production='prod') %}
{% set conf_src = lookup.get(grains['function'], grains['function']) 
                + '.yml.ninja' %}
'''

Here, since dev and staging are not modified, you may use dict.get fall-back argument.

behzad.nouri
  • 74,723
  • 18
  • 126
  • 124