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

时间:2017-01-18 17:16:30

标签: ansible jinja2 ansible-2.x

我尝试将omit用于这样的表达式:

[1] "2016-12-15" "2016-12-16" "2016-12-17" "2016-12-18" "2016-12-19"

但似乎在未定义id: "{{ openstack_networks.id | default(omit) }}" 变量的情况下,它会因异常而失败。

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

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

2 个答案:

答案 0 :(得分:6)

不是超级优雅,但100%工作解决方案来处理可能未定义的父级别的密钥:

id: "{{ (openstack_networks | default({})).id | default(omit) }}"

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

答案 1 :(得分:2)

足够有趣的是,Ansible会采用类似普通英语的内容:

id: "{{ omit if openstack_networks.id is not defined or openstack_networks.id }}"

这样做的好处是没有多余的括号。