当我们在 Jinja2 中使用 filter 时,"return another Undefined value" 在 Ansible 文档中所说的 return 是什么值?

What value will be return that the "return another Undefined value" said in the Ansible document and when we use filter in Jinja2?

我正在阅读ansible文档然后它说:

Beginning in version 2.8, attempting to access an attribute of an Undefined value in Jinja will return another Undefined value, rather than throwing an error immediately. This means that you can now simply use a default with a value in a nested data structure (in other words, {{ foo.bar.baz | default('DEFAULT') }}) when you do not know if the intermediate values are defined.

我不是很理解。是说当 foo.bar.baz 未定义时表达式 "{{ foo.bar.baz | default('DEFAULT') }}" 将是 'DEFAULT' 还是说当 [= 时表达式 "{{ foo.bar.baz }}" 将是另一个值(将其标记为 VALUE) 24=] 未定义,我们需要定义另一个可选值或第二个值,如 default('DEFAULT') 以避免使表达式 return VALUE 我们根本不知道它会是什么?

包含声明的 url 位于:https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#omitting-parameters 鼠标滚轮我得到了报价

声明的重要部分在“当你不知道中间值是否被定义时”.

在 2.8 之前,如果您有:

{{ foo.bar.baz | default('DEFAULT') }}

with foo NOT having bar defined (ie. trying to access the attribute baz of the undefined variable bar),Jinja2 会在到达 | default() 之前抛出错误。有了语句引用的变化,当bar未定义(中间值)时尝试访问baz,不会抛出错误,但return另一个undefined,这样 | default() 过滤器将拦截并能够 return DEFAULT.