如何在具有组件名称的Ansible服务器列表上设置_事实

如何在具有组件名称的Ansible服务器列表上设置_事实,ansible,jinja2,Ansible,Jinja2,我有一份这样的清单 fruit: hosts: serverA: {component_name: component_a} serverB: {component_name: component_a} ServerC: {component_name: component_a} meat: hosts: serverD: {component_n

我有一份这样的清单

       fruit:
         hosts:
           serverA: {component_name: component_a}
           serverB: {component_name: component_a}
           ServerC: {component_name: component_a}
      meat:
         hosts:
           serverD: {component_name: component_a}
           serverE: {component_name: component_a}
           ServerF: {component_name: component_a}
如何根据组件名称和设置事实的条件获取服务器作为列表? 预期结果

{
ServerD
ServerE
ServerF
}

例如,此库存

第1组:
主持人:
服务器a:{var:a}
服务器b:{var:b}
服务器C:{var:a}
第2组:
主持人:
serverD:{var:b}
服务器:{var:a}
服务器f:{var:b}
和剧本

-主机:所有
任务:
-设定事实:
列表a:“{{hostvars|
口述2项|
json_查询('[?value.var=='a`].key')}”
跑一次:对
-调试:
变量:列表a
跑一次:对
-设定事实:
列表a1:“{{list_a|
相交(groups.group_1)}”
跑一次:对
-调试:
var:list_a1
跑一次:对
给予

“列表a”:[
“服务器A”,
“服务器C”,
“服务器”
]
“列表a1”:[
“服务器A”,
“服务器C”
]

Q:“模板字符串时模板错误:没有名为'dict2items'的筛选器”

答:从2.6版开始提供。如果
dict2items
过滤器不可用,请使用以下任务

-设置事实:
my_hostvars:“{{my_hostvars}默认值([]))+
[{'key':项,'value':主机变量[item]}}”
循环:“{{ansible\u play\u hosts\u all}”
跑一次:对
-设定事实:
列表a:“{{my_hostvars|
json_查询('[?value.var=='a`].key')}”
跑一次:对

2.6版之后,我尝试了一个错误“模板字符串时模板错误:没有名为'dict2items'的筛选器”。升级到。