templates - Jinja2 将字典列表视为字符串
问题描述
我正在使用 ansible 来解析 jinja2 模板。jinja2 模板有一段代码应该遍历一个变量,该变量是一个字典列表。但是,它将 dict 列表视为字符串并打印单个字符。请注意变量是 ansible playbook 中的 set_fact 。
在 j2 模板中的 dicts 列表上循环的代码:
{% 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' has no attribute '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)]
解决方案
推荐阅读
- flutter - 如何将红色星号符号添加到颤动的文本格式中
- javascript - 变量和对象在部署时出现未定义错误
- android - Android 受信任的 Web 应用程序:将对象(不是字符串)从 Java 传递到 TWA
- java - Logback 不使用 logger.error(message, throwable) 记录异常
- javascript - React-konva 移动缩放和可拖动图像
- python-3.x - 出现在错误位置的 tk.Toplevel 窗口
- javascript - Vuex getter 数据在刷新时消失
- git - 复制我的工作目录以试验代码,然后从中创建一个新的存储库
- sql - 使用 UML 图解释 SQL 查询?
- lua - 有没有办法在lua中将一个表一分为二?