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

How to use omit with Ansible and avoid any errors?

我尝试将 omit 与这样的表达式一起使用:

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

但是当 openstack_networks 变量未定义时,它似乎一直失败并出现异常。

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

我想省略参数以防 openstack_networks.id 不存在。

不是超级优雅,但 100% 有效的解决方案来处理可能未定义的父指令的键:

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

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

有趣的是,Ansible 会接受一些读起来像普通英语的东西:

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

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