2017-03-06 60 views
0

虽然这应该是一个小问题,但我无法理解这一点。Ansible/Jinja中的词典和打印值过滤器列表

我使用Ansible(和神社模板)建立一个模板,我有一个像字典(这里显示为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谷歌搜索的错误,但我不加载从清单中的变量。 任何想法如何解决这个问题?

回答

0

您可以将管道的结果:

{{ (datacenters | selectattr("name", "equalto", "main") | list | first).description }} 
+0

更好,如果我不告诉你我花了多少时间....谢谢。 – ColOfAbRiX

0

我使它成功了,但是使用了一种解决方法,所以任何能够提供单线解决方案的人都非常欢迎。

这是解决方法。在模板中我用了一组这样的:

{% set temp = datacenters | selectattr("name", "equalto", "main") | list | first %} 
{{ temp["description"] }} 

其中一期工程,但我不明白为什么它应该在一行中使用不工作attr