用于ansible的jinja2模板中的条件文本

时间:2015-03-05 15:49:24

标签: jinja2 ansible

我有一个可以为守护进程命令行设置很多选项的playbook。我想允许从变量中设置它们,但同时我想让它们都是可选的。

现在我有模板(j2),所有变量都是强制性的:

{% for router in flowtools.captures %}
-d {{router.debug_level}} -e {{router.expire_count}} -E {{router.expire_size}} -f {{router.fiter_name}} -F {{router.filter_definition}} -n {{router.rotations}} -N {{router.netsting_level}} -S {{router.start_interval}} -t {{router.tag_name}} -T {{router.active_def}} -V {{pdu_version}} -w {{router.workdir}} -x {{router.xlate_fname}} -z {{router.z_level}}
{% endfor %}

我想:

  • 允许'router'中的未定义变量(不会使剧本失败)。
  • 如果相关变量为空,则不要在输出中包含选项(-z,-b等)。

例如上面,如果flowtools.captures [0]只包含debug_level = 2和workdir = / tmp,它应该生成:

-d 2 -w / tmp。

我可以添加{%if%}的大量列表,但这会非常笨重。它可以优雅地制作吗?

1 个答案:

答案 0 :(得分:1)

好吧,经过一番努力,我做了

vars.yml:

flowtools_capute_options:
 byte_order: ' -b '
 workdir: ' -w '
 ...etc...

template.j2:

{% for router in flowtools.captures %}
    {% for opt in router  %}
        {{flowtools_capute_options[opt]}} {{-router[opt]-}}
    {% endfor %}    
{% endfor %}