如何在Ansible中使用省略并避免任何错误?

sor*_*rin 5 jinja2 ansible ansible-2.x

我试图对这样的表达式使用省略:

id: "{{ openstack_networks.id | default(omit) }}"
Run Code Online (Sandbox Code Playgroud)

但是,当openstack_networks未定义变量时,它似乎总是会因异常而失败。

编写此jinja2过滤器的正确方法是什么?

如果openstack_networks.id不存在,我想忽略该参数。

Rei*_*ica 12

有趣的是,Ansible 会采用一些读起来像简单英语的东西:

id: "{{ omit if openstack_networks.id is not defined or openstack_networks.id }}"
Run Code Online (Sandbox Code Playgroud)

这里的好处是没有额外的括号。


Kon*_*rov 7

不是超级优雅,而是100%可行的解决方案来处理可能未定义的父字典的键:

id: "{{ (openstack_networks | default({})).id | default(omit) }}"
Run Code Online (Sandbox Code Playgroud)

omit如果openstack_networks已定义但没有id键,或者如果openstack_networks未定义,这将为您提供。

  • 谢谢。现在我的头很痛!Ansible 没有什么美感:( (2认同)