Ansible 当值匹配时,在dict中使用列表选择嵌套值

Ansible 当值匹配时,在dict中使用列表选择嵌套值,ansible,Ansible,在dicthostvars[inventory\u hostname]中,我多次出现以下情况,清单中的每台服务器一次。 仅当proxyServer.datail.inbound\u ip与我可用的变量匹配时,我需要提取的值是proxyServer.detail.name 此外,我的搜索不能有proxyServer硬编码,因为有多种类型的服务器,我必须遍历所有类型的服务器,以便找到与我的IP地址匹配的服务器,然后提取相应的“名称” 我尝试了以下多种变体: - debug: var: "

在dict
hostvars[inventory\u hostname]
中,我多次出现以下情况,清单中的每台服务器一次。 仅当
proxyServer.datail.inbound\u ip
与我可用的变量匹配时,我需要提取的值是
proxyServer.detail.name

此外,我的搜索不能有
proxyServer
硬编码,因为有多种类型的服务器,我必须遍历所有类型的服务器,以便找到与我的IP地址匹配的服务器,然后提取相应的“名称”

我尝试了以下多种变体:

- debug:
  var: "item.key"
  with_dict: "{{ hostvars[inventory_hostname].proxyServer.detail[0] }}"
    when: "'10.1.100.100' in item.value"
但当有匹配时,我已经“太深”,无法再提取
名称

    "ansible_loop_var": "item",
    "item": {
        "key": "internal_ip",
        "value": "10.1.100.100"
    },
    "item.key": "internal_ip"
}
我的方法也不会扩展,因为我正在硬编码
detail
,所以它只匹配一个dict,而不匹配数据中的任何其他内容

欢迎任何指点,谢谢您的时间。

使用json\u查询。例如,下面的任务将为您提供所选“proxyServer”变量列表,其中“inbound_ip”为“10.1.100.100”

-设置事实:
代理服务器\u已选择:“{{ansible\u play\u hosts\u all”|
映射('extract',hostvars,'proxyServer')|列表|
json_查询(查询)}”
变量:
入站ip:“10.1.100.100”
查询:“[?详细信息[?入站ip=='{{inbound\U ip}}']””
跑一次:对
然后,处理列表并提取所需内容


问:“这难道不取决于我必须在'proxyServer'值中编码这一事实吗?”

A:没有。可以迭代这些值并连接结果列表。比如说

-设置事实:
已选择变量:“{{vars_已选择变量|默认值([]))+
[ansible\u play\u hosts\u all|
地图(‘摘录’、主机、项目)|列表|
json_查询(查询)]}”
变量:
入站ip:“10.1.100.100”
查询:“[?详细信息[?入站ip=='{{inbound\U ip}}']””
跑一次:对
循环:
-代理服务器

谢谢,我会试试这个。这不取决于我必须在“proxyServer”值中编码这一事实吗?proxyServer(及其同级)是我必须遍历的DICT列表。如果有道理的话,不客气。可以迭代这样一个列表。我已经更新了答案。如果您有其他问题,请打开一个新问题并提问。我可能还有一些问题:
“{mydict['app']['detail']]| selectattr('internal_-ip'、'equalto'、'10.1.1.100')| map(attribute='name')| list}}”
现在我所需要的是匹配“
internal ip
键上的任何内容。类似匹配('^.*.$)但我似乎无法在键字段上正则表达式,只能在值字段上正则表达式。有太多的and。但是,仍然是一样的,从评论中很难猜出你在寻找什么。请打开一个新问题并提出它。听起来不错,现在就这样做。
    "ansible_loop_var": "item",
    "item": {
        "key": "internal_ip",
        "value": "10.1.100.100"
    },
    "item.key": "internal_ip"
}