我终于学会了如何使用
product
进行嵌套列表,但我不喜欢必须通过索引访问结果。 product
生成一个列表列表,我想要一个字典列表。
例如下面的代码....
- name: experimenting
hosts: localhost
tasks:
- name: Define some facts
set_fact:
people:
- name: "Fred"
- name: "John"
animals:
- name: "cat"
- debug:
msg: "{{ animals | product(people) }}"
...产生以下输出:
ok: [localhost] => {
"msg": [
[
{
"name": "cat"
},
{
"name": "Fred"
}
],
[
{
"name": "cat"
},
{
"name": "John"
}
]
]
}
我怎样才能把它变成这样:
ok: [localhost] => {
"msg": [
{
animal: {
name: "cat"
},
person: {
name: "Fred"
}
},
{
animal: {
name: "cat"
},
person: {
name: "John"
}
}
]
}
在 C# 中,我会使用 LINQ
Select
语句,但我在 ansible 世界中找不到等效的语句。
Chat GPT 3.5 没有帮助,所以我支付了 4.0 升级费用。没过多久就得到了正确答案:
- name: experimenting
hosts: localhost
tasks:
- name: Define some facts
set_fact:
people:
- name: "Fred"
- name: "John"
animals:
- name: "cat"
- name: Transform the data
set_fact:
transformed: "{{ transformed | default([]) + [{'animal': item[0], 'person': item[1] }] }}"
loop: "{{ animals | product(people) }}"
- debug:
msg: "{{ transformed }}"
...产生:
ok: [localhost] => {
"msg": [
{
"animal": {
"name": "cat"
},
"person": {
"name": "Fred"
}
},
{
"animal": {
"name": "cat"
},
"person": {
"name": "John"
}
}
]
}