我有一个用于构建配置文件的模板。基本上,我希望设置值的行总是在文件中,但实际上并没有定义在变量中注释它。
{{ proxy_loadmodule is defined and proxy_loadmodule is not none | ternary('','# ') }}LoadModule={{ proxy_loadmodule | default('') }}
目前,变量proxy_loadmoduel
还没有定义,所以我希望它输出# LoadModule=
。相反,我得到了FalseLoadModule
。
想法?
添加括号
{{ (proxy_loadmodule is defined and proxy_loadmodule is not none) | ternary('','# ') }}LoadModule={{ proxy_loadmodule | default('') }}
将默认值放入条件中并测试长度。通过设置过滤器true
的第二个参数,当变量计算为false(None(时,也启用默认值。通过这种方式,您可以在一个条件中测试所有情况(未定义、无和空字符串(。例如,模板
shell> cat test.conf.j2
{% if proxy_loadmodule|default('', true)|length > 0 %}
LoadModule={{ proxy_loadmodule }}
{% else %}
# LoadModule=
{% endif %}
和战术手册
shell> cat playbook.yml
- hosts: localhost
tasks:
- debug:
msg: "{{ lookup('template', 'test.conf.j2') }}"
如果变量proxy_loadmodule不是空,则给出(摘要(
shell> ansible-playbook playbook.yml -e proxy_loadmodule=proxy_module
...
TASK [debug] *********************************************************************************
ok: [localhost] =>
msg: |-
LoadModule=proxy_module
否则,当变量proxy_loadmodule未定义、无或为空时,配置行将被注释掉
shell> ansible-playbook playbook.yml
...
TASK [debug] *********************************************************************************
ok: [localhost] =>
msg: |-
# LoadModule=