使用Ansible从3个列表中构造字典



我成功构造了如下列表的变量:

TASK [get hostname] *****************************************
Sunday 07 March 2021  22:57:44 -0500 (0:00:00.254)       0:00:08.625 ********** 
ok: [ansiblehost] => {
"varmachine": [
"machine1", 
"machine2", 
"machine3"
]
}
TASK [Ostype] ***************
Sunday 07 March 2021  22:57:44 -0500 (0:00:00.065)       0:00:08.691 ********** 
ok: [ansiblehost] => {
"varosname": [
"Red Hat Enterprise Linux 7 (64-bit)", 
"Red Hat Enterprise Linux 8 (64-bit)", 
"windows Server 2016 (64-bit)"
]
}
TASK [domaines] **********************************
Sunday 07 March 2021  22:57:44 -0500 (0:00:00.084)       0:00:08.776 ********** 
ok: [ansiblehost] => {
"domainevar": [
"example1.com", 
"example2.com", 
"example3.com"
]
}

所以现在我想用前面的变量列表生成一个字典列表:varmachine,varosname和domainevar,如下所示:

[{"name":"machine1","OSname":"Red Hat Enterprise Linux 7 (64-bit)", "Domaine":example1.com}, {"name":"machine2","OSname":"Red Hat Enterprise Linux 8 (64-bit)", "Domaine":example2.com},
"name":"machine3","OSname":"windows Server 2016 (64-bit)", "Domaine":example3.com} ]

换句话说就是:

[{"name":varmachine[0],"OSname":varosname[0], "Domaine":domainevar[0]}, {"name":varmachine[1],"OSname":varosname[1], "Domaine":domainevar[1]},
"name":varmachine[2],"OSname":varosname[2], "Domaine":domainevar[2]} ]

下面的任务执行该任务

- set_fact:
_list: "{{ _list|default([]) + [dict(_keys|zip(item))] }}"
with_together:
- "{{ varmachine }}"
- "{{ varosname }}"
- "{{ domainevar }}"
vars:
_keys: [name, OSname, Domaine]

_list:
- Domaine: example1.com
OSname: Red Hat Enterprise Linux 7 (64-bit)
name: machine1
- Domaine: example2.com
OSname: Red Hat Enterprise Linux 8 (64-bit)
name: machine2
- Domaine: example3.com
OSname: windows Server 2016 (64-bit)
name: machine3

最新更新