Я пытаюсь объединить данные из разных переменных в новый список. Я использовал комбинацию декартовых произведений и фильтров map / join.
---
- name: Debug
hosts: localhost
gather_facts: no
vars:
uid: 'uid1'
product_types:
- product1
- product2
- product3
data_types:
- {data_name: data1, data_port: 111}
- {data_name: data2, data_port: 222}
- {data_name: data3, data_port: 333}
tasks:
- set_fact:
test_list: "{{ test_list | default([]) + ([item.data_name] | product(product_types) | map('join', '-') | product([uid]) | map('join', '-') | product([item.data_port]) | map('join', '_') | product(['pool']) | map('join', '_') | list) }}"
loop: "{{ data_types }}"
- debug: msg="{{ test_list | to_nice_yaml }}"
Новый список показывает правильный вывод, но я хотел бы знать, есть ли лучший способ для меня собрать список /данные.
$ ansible-playbook playbooks/test.yaml
Vault password:
PLAY [Debug] ************************************************************************************************************************************************************
TASK [debug] ************************************************************************************************************************************************************
ok: [localhost] => (item={'data_name': 'data1', 'data_port': 111}) => {}
$ ansible-playbook playbooks/test.yaml
PLAY [Debug] ************************************************************************************************************************************************************
TASK [set_fact] *********************************************************************************************************************************************************
ok: [localhost] => (item={'data_name': 'data1', 'data_port': 111})
ok: [localhost] => (item={'data_name': 'data2', 'data_port': 222})
ok: [localhost] => (item={'data_name': 'data3', 'data_port': 333})
TASK [debug] ************************************************************************************************************************************************************
ok: [localhost] => {}
MSG:
- data1-product1-uid1_111_pool
- data1-product2-uid1_111_pool
- data1-product3-uid1_111_pool
- data2-product1-uid1_222_pool
- data2-product2-uid1_222_pool
- data2-product3-uid1_222_pool
- data3-product1-uid1_333_pool
- data3-product2-uid1_333_pool
- data3-product3-uid1_333_pool
PLAY RECAP **************************************************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0