我目前正在尝试循环 k8s_facts 的子集。我的事实看起来是这样的:
{
"resources": [
{
"metadata": {
"annotations": {
"com.foo.bar/name": "foo",
"com.foo.bar/foo-name": "baz"
},
"creationTimestamp": "2018-12-20T02:29:50Z",
"name": "foo-bar"
}
},
...
我想过滤特定值com.foo.bar/foo-name
钥匙。因为钥匙有.
, -
and /
,与 Jinja2 配合不佳selectattr
功能。我尝试做类似的事情,但徒劳:
- debug:
msg: "{{ item }}"
loop: "{{ my_fact.resources | selectattr('metadata.annotations[\\'com.foo.bar/foo-name\\']', 'defined') | selectattr('metadata.annotations[\\'com.foo.bar/foo-name\\']', 'match', 'baz') | list }}"
loop_control:
label: "{{ item.metadata.name }}"
执行前一个时,我收到此错误:
fatal: [<redacted>]: FAILED! => {"msg": "template error while templating string: expected token ',', got 'com'. String: {{ my_fact.resources | selectattr('metadata.annotations[\\\\'com.foo.bar/foo-name\\\\']', 'defined') | selectattr('metadata.annotations[\\\\'com.foo.bar/foo-name\\\\']', 'match', 'baz') | list }}"}
我的问题是,如何在 Jinja2 中转义包含点的复杂字符串?