我无法理解这一点,尽管这应该是一个微不足道的问题。
我使用Ansible(和Jinja模板)来构建模板,我有一个字典列表(这里显示为JSON):
"datacenters": [{
"description": "Main Datacenter",
"name": "main"
}, {
"description": "Secondaty Datacenter",
"name": "secondary"
}]
我想按名称过滤打印描述。在我的模板中,我可以到达这里:
{{ datacenters | selectattr("name", "equalto", "main") | list | first | to_nice_json }}
带输出:
{
"description": "Main Datacenter",
"name": "main"
}
但我无法获得description
。例如,当我使用:
{{ datacenters | selectattr("name", "equalto", "main") | list | first | attr("description") }}
我明白了:
AnsibleUndefinedVariable: 'unicode object' has no attribute 'description'
我发现此链接https://github.com/ansible/ansible/issues/19356在Google上搜索错误,但我没有从广告资源中加载变量。 知道如何解决这个问题吗?
答案 0 :(得分:3)
您可以对管道的结果进行分组:
{{ (datacenters | selectattr("name", "equalto", "main") | list | first).description }}
答案 1 :(得分:0)
我使它工作,但使用解决方法,所以任何能够提供单行解决方案的人都会受到欢迎。
这是解决方法。在模板中,我使用了一组:
{% set temp = datacenters | selectattr("name", "equalto", "main") | list | first %}
{{ temp["description"] }}
哪个有效,但我不明白为什么它不应该使用attr