我正在使用ansible解析jinja2模板。 jinja2模板具有一段代码,该代码应遍历作为字典列表的变量。但是,它将字典列表视为字符串并打印单个字符。请注意,ansible剧本中的变量为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对象'没有属性'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)]
答案 0 :(得分:0)
您<FormGroup>
<ControlLabel>Username</ControlLabel>
<FormControl className={this.props.username==""||undefined?"empty":"no-empty")} type="text" value="" onChange={this.handleChange.bind(this, 'username')} />
</FormGroup>
变量实际上包含一个字符串,该字符串恰好是字典列表的json表示形式。您只需要使用from_json
filter
filter_policy