Ansible составляет список из двух списков (атрибут к первому списку из двух)

#list #ansible

#Список #ансибль

Вопрос:

списки могут быть разными по длине. Никаких внешних ключей между ними нет. Я просто хочу составить большой список из двух списков (умножить записи?)

вары:

список 1:

 - item: "alpha"
  key1: "value1"
  key2: "value2"
- item: "beta"
  key1: "value1"
  key2: "value2"
 

список 2:

 - add_key_to_each_1: "to_each_value_1"
- add_key_to_each_2: "to_each_value_2"
 

я хочу получить follow list3 с помощью некоторой задачи (set_fact):

 - item: "alpha"
  key1: "value1"
  key2: "value2"
  add_key_to_each_1: "to_each_value_1"

- item: "beta"
  key1: "value1"
  key2: "value2"
  add_key_to_each_1: "to_each_value_1"

- item: "alpha"
  key1: "value1"
  key2: "value2"
  add_key_to_each_2: "to_each_value_2"

- item: "beta"
  key1: "value1"
  key2: "value2"
  add_key_to_each_2: "to_each_value_2"
 

Ответ №1:

Задача, приведенная ниже, выполняет эту работу

     - set_fact:
        list3: "{{ list3|default([])   [item.0|combine(item.1)] }}"
      with_cartesian:
        - "{{ list2 }}"
        - "{{ list1 }}"
    - debug:
        var: list3
 

дает

   list3:
  - add_key_to_each_1: to_each_value_1
    item: alpha
    key1: value1
    key2: value2
  - add_key_to_each_1: to_each_value_1
    item: beta
    key1: value1
    key2: value2
  - add_key_to_each_2: to_each_value_2
    item: alpha
    key1: value1
    key2: value2
  - add_key_to_each_2: to_each_value_2
    item: beta
    key1: value1
    key2: value2
 

Комментарии:

1. «with_cartesian». Большое вам спасибо. Это будет очень полезно для меня в будущем.