如何在jmespath中合并一系列对象

时间:2017-12-12 00:11:32

标签: ansible jmespath

在使用include_vars

执行with_items后,我得到了一系列结果
results:
- ansible_facts:
    tag_Cluster_A:
      name: Thinking cluster
      words:
      - Honk
      - Thonk
- ansible_facts:
    tag_Cluster_B:
      name: Helloing Cluster
      words:
      - HOI
      - HOI HOI

我正在尝试将带有结果的对象放到一个只包含tag_Cluster_*个东西的扁平对象中。

tag_Cluster_A:
  name: Thinking cluster
  words:
  - Honk
  - Thonk
tag_Cluster_B:
  name: Helloing Cluster
  words:
  - HOI
  - HOI HOI

查询results[].ansible_facts会生成如下数组:
 [{tag_Cluster_A:{}},{tag_Cluster_B:{}}]距离预期结果只有一步之遥。

我如何一起消磨这些?

1 个答案:

答案 0 :(得分:1)

如果mylist[{tag_Cluster_A:{...}},{tag_Cluster_B:{...}}],那么

mydict: "{{ dict(mylist | map('dictsort') | sum(start=[])) }}"

将是{tag_Cluster_A:{...},tag_Cluster_B:{...}}

在这个技巧中,我们将dictsort过滤器应用于原始列表的每个元素,然后展平列表以获得单个列对,然后将其转换回dict。