如何在ansible dict上反向查找?

时间:2018-05-23 17:55:52

标签: ansible ansible-2.x

有没有办法将dict转换为另一个dict,以便根据内部字段反转查找?我希望内部字段对于每个项目都是唯一的,并且始终存在。这是我想要做的一个例子。

我有这样的数据结构:

lookup_dict:
  a1:
    b: 123
  a2:
    b: 456
  a3:
    b: 789

ab之间的映射是1对1和之上。我想将其转换为:

reverse_lookup_dict:
  123: a1
  456: a2
  789: a3

然后,我可以对使用b进行反向查找。

2 个答案:

答案 0 :(得分:3)

经过一番研究,我发现答案如下:

name: Reverse Lookup
set_fact:
  reverse_lookup_dict: "{{reverse_lookup_dict|default({})|combine({item.value.b: item.key})}}"
loop: "{{lookup('dict', lookup_dict)}}"

答案 1 :(得分:1)

您可以使用vars和dict2items + items2dict来做到这一点:

这是一个名为forward的示例映射(它将愚蠢的字符串映射到ID),该映射是通过名为reverse的反向映射构建的:

reverse:
  0x0019: staff
  0x011a: visitors
  0x3bbe: executives
  0xf9c4: vpn

forward: >-
  {{ reverse 
   | dict2items 
   | items2dict(key_name="value", value_name="key" }}