使用Ansible中多个列表的笛卡尔乘积设置新列表变量的更好方法是什么?
我正在尝试将来自不同变量的数据合并到一个新列表中。我使用了笛卡尔积和映射/连接过滤器的组合使用Ansible中多个列表的笛卡尔乘积设置新列表变量的更好方法是什么?,ansible,Ansible,我正在尝试将来自不同变量的数据合并到一个新列表中。我使用了笛卡尔积和映射/连接过滤器的组合 --- - name: Debug hosts: localhost gather_facts: no vars: uid: 'uid1' product_types: - product1 - product2 - product3 data_types: - {data_name: data1, data_por
---
- 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
问:“对我来说,组装列表/数据的更好方法是什么?”
A:不,很好。格式化可以提高可读性
- 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 }}"
问:“对我来说,组装列表/数据的更好方法是什么?”
A:不,很好。格式化可以提高可读性
- 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 }}"