簡體   English   中英

jinja2模板中的條件文本

[英]Conditional text in jinja2 templates for ansible

我有一個劇本,可以為守護程序命令行設置很多選項。 我想允許所有變量都設置它們,但同時我想使它們全部可選。

現在,我有了帶有所有必需變量的模板(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 %}

我想要:

  • 允許在“路由器”中使用未定義的變量(不使劇本失敗)。
  • 如果相關變量為空,則不將選項(-z,-b等)包括在輸出中。

例如,在上面的示例中,如果flowtools.captures [0]僅包含debug_level = 2和workdir = / tmp,則應生成:

-d 2 -w / tmp。

我可以添加{%if%}的大量列表,但這將非常龐大。 是否可以使它優雅?

好吧,經過一番掙扎,我做了

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 %}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM