【发布时间】:2019-06-07 16:59:04
【问题描述】:
我正在使用 ansible 来解析 jinja2 模板。 jinja2 模板有一段代码应该遍历一个变量,该变量是一个字典列表。但是,它将 dict 列表视为字符串并打印单个字符。请注意变量是 ansible playbook 中的 set_fact。
在 j2 模板中的字典列表上循环的代码:
{% for subscriber in subscribers %}
{% for dict_item in subscriber['filter_policy'] %}
{{dict_item.name}}
{% endfor %}
{% endfor %}
变量作为ansible调试模块的输出:
subscribers": [
{
"filter_policy": "[ { \"name\": \"Severity\", \"type\": \"CommaDelimitedList\", \"value\": \"critical\" }, { \"name\": \"Environment\", \"type\": \"CommaDelimitedList\", \"value\": \"nonprod\" }]",
"id": "blah@blah.com"
}
]
Ansible 给我一个错误说: "msg": "AnsibleUndefinedVariable: 'str object' 没有属性 'name'"
但是,如果我在 jinja2 模板中使用 set 为变量分配相同的值并使用 for 循环,它工作正常。
{% set policies = [{"name": "Severity","type": "CommaDelimitedList","value": "critical"},{"name": "Environment","type": "CommaDelimitedList","value": "nonprod"}] %}
不知道怎么解决。
ansible 2.7.2
python version = 3.7.3 (default, Mar 27 2019, 09:23:39) [Clang 10.0.0 (clang-1000.11.45.5)]
【问题讨论】: