Как объединить серию объектов в 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 шаге от желаемого результата.

Как мне их помять?

1 ответ

Если mylist является [{tag_Cluster_A:{...}},{tag_Cluster_B:{...}}], затем

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

будет {tag_Cluster_A:{...},tag_Cluster_B:{...}},

В этом трюке мы применяем dictsort примените фильтр к каждому элементу исходного списка, затем сгладьте список, чтобы получить единый список пар, затем преобразуйте его обратно в dict.

Другие вопросы по тегам