2017-03-06 57 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