在Ansible/Jinj中筛选字典和打印值的列表

2024-10-16 20:52:16 发布

您现在位置:Python中文网/ 问答频道 /正文

虽然这应该是一个小问题,但我还是无法理解。在

我使用Ansible(和Jinja模板)构建一个模板,我有一个字典列表,比如(这里显示为JSON):

"datacenters": [{
    "description": "Main Datacenter", 
    "name": "main"
}, {
    "description": "Secondaty Datacenter", 
    "name": "secondary"
}]

我想按名字过滤并打印描述。在我的模板中,我可以到达以下位置:

^{pr2}$

带输出:

{
    "description": "Main Datacenter",
    "name": "main"           
}

但我不能只得到description。例如,当我使用:

{{ datacenters | selectattr("name", "equalto", "main") | list | first | attr("description") }}

我得到:

AnsibleUndefinedVariable: 'unicode object' has no attribute 'description'

我在google上找到了这个链接https://github.com/ansible/ansible/issues/19356错误,但我没有从清单中加载变量。 你知道怎么解决这个问题吗?在


Tags: name模板json列表字典maindescriptionansible
2条回答

我做了它的工作,但使用了一个变通办法,所以任何人谁能提供一条线解决方案是更受欢迎的。在

这里是解决方法。在模板中,我使用了一组类似于:

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

这是可行的,但我不明白为什么它不能在一行中使用attr

可以对管道的结果进行分组:

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

相关问题 更多 >