---
- name: Consolidate output
  hosts: localhost
  gather_facts: no
  vars:
    data_set_1:
      host1:
        field1: '1'
        field2: '2'
      host2:
        field3: '3'
        field4: '4'
      host3:
        field1: '1'
        field3: '3'
      host4:
        field5: '5'
        field6: '6'
    data_set_2:
      - host1
      - host2
      - host3

Wystarczy analizować zarówno obiekty danych, jak i zbudować listę pól i wartość dla gospodarzy w zestawie danych 2.

Na przykład Data_set_2 posiada trzech hostów HOST1, 2 i 3. Odpowiednie dane z danych_set_1 dla hosta1, 2 i 3 jest hosta1: Field1: '1' Field2: '2' HOST2: Field3: '3' Field4: '4' HOST3: Field1: '1' Field3: '3'

Od tego tylko muszę zbudować taki wynik.

result = {
  field1: "1",
  field2: "2",
  field3: "3",
  field4: "4"
}

Jak mogę to zrobić z branży odtwarzania?

0
Anees Mohamed 1 styczeń 2020, 02:45

1 odpowiedź

Najlepsza odpowiedź

Łączą słowniki w pętli listy Stworzony przez Mapa i wyodrębnia. Na przykład

- set_fact:
    result: "{{ result|default({})|combine(item) }}"
  loop: "{{ data_set_2|map('extract', data_set_1)|list }}"
- debug:
    var: result|to_nice_json

Daj (Eksport ansible_stdout_callback = YAML)

  result|to_nice_json: |-
    {
        "field1": "1",
        "field2": "2",
        "field3": "3",
        "field4": "4"
    }
0
Vladimir Botka 1 styczeń 2020, 16:45