Ansible双循环
Ansible double loop
我在 yml 文件中有一个数据列表。
我想提取数据,使用双循环,就像我们过去所做的那样。
这是我的列表示例
[a,b,c]
vm1:
-a
-b
vm2:
-a
-c
vm3:
-b
这是为了一般部署目的。
我需要循环列表,并为每个元素获取需要安装的虚拟机列表。
例如
a > vm1 vm2
b > vm1 vm3
c > vm2
我试过 with_nested 但没有用。
有什么办法解决这个问题吗?
这个问题与非常相似。
这里是修改后的 JMESPath:
---
- hosts: localhost
gather_facts: no
vars:
mylist: [a,b,c]
myvms:
vm1:
- a
- b
vm2:
- a
- c
vm3:
- b
tasks:
- debug:
msg: "{{ item }} > {{ list_with_keys | json_query(qry) | join(',') }}"
vars:
list_with_keys: "{{ myvms | dictsort | to_json | from_json }}"
qry: "[?contains([1],`{{ item }}`)][0]"
with_items: "{{ mylist }}"
结果:
ok: [localhost] => (item=a) => {
"changed": false,
"item": "a",
"msg": "a > vm1,vm2"
}
ok: [localhost] => (item=b) => {
"changed": false,
"item": "b",
"msg": "b > vm1,vm3"
}
ok: [localhost] => (item=c) => {
"changed": false,
"item": "c",
"msg": "c > vm2"
}
我在 yml 文件中有一个数据列表。 我想提取数据,使用双循环,就像我们过去所做的那样。 这是我的列表示例
[a,b,c] vm1: -a -b vm2: -a -c vm3: -b
这是为了一般部署目的。 我需要循环列表,并为每个元素获取需要安装的虚拟机列表。 例如
a > vm1 vm2
b > vm1 vm3
c > vm2
我试过 with_nested 但没有用。 有什么办法解决这个问题吗?
这个问题与
这里是修改后的 JMESPath:
---
- hosts: localhost
gather_facts: no
vars:
mylist: [a,b,c]
myvms:
vm1:
- a
- b
vm2:
- a
- c
vm3:
- b
tasks:
- debug:
msg: "{{ item }} > {{ list_with_keys | json_query(qry) | join(',') }}"
vars:
list_with_keys: "{{ myvms | dictsort | to_json | from_json }}"
qry: "[?contains([1],`{{ item }}`)][0]"
with_items: "{{ mylist }}"
结果:
ok: [localhost] => (item=a) => {
"changed": false,
"item": "a",
"msg": "a > vm1,vm2"
}
ok: [localhost] => (item=b) => {
"changed": false,
"item": "b",
"msg": "b > vm1,vm3"
}
ok: [localhost] => (item=c) => {
"changed": false,
"item": "c",
"msg": "c > vm2"
}