【发布时间】:2021-05-18 00:15:28
【问题描述】:
我有一个项目列表,它们都显示为某个字典中的键。 我想使用 Jinja2 过滤器在字典中查找每个列表项并在列表中返回相应的值。
在 python 中,这将是:
[my_dict[x] for x in my_list]
什么是 Jinja 等价物?
my_list | map(my_dict) 不起作用。
这是一个示例剧本。
---
- hosts: localhost
connection: local
vars:
my_dict:
a: 1
b: 2
c: 3
my_list:
- a
- c
tasks:
- assert:
that:
- "{{ actual == expected }}"
vars:
# [my_dict[x] for x in my_list]
actual: "{{ my_list | map(my_dict) | list }}"
expected:
- 1
- 3
如果你运行这个,你会得到:
致命:[本地主机]:失败! => {"msg": "在模板 '{{ my_list | map(my_dict) | list }}' 时发生未处理的异常。错误是
,原始消息:键必须是字符串"}
我想修改 actual: 行,以便此 playbook 可以正常运行。
请注意,我不想在 Ansible 本身中循环。这是一个简单的 MWE。在我的真实示例中,这个查找应该内联在一个更大的模板文件中。
【问题讨论】:
标签: dictionary ansible mapping jinja2