Json Ansible合并2数组
我正在尝试使用Ansible合并以下两个数组:Json Ansible合并2数组,json,ansible,Json,Ansible,我正在尝试使用Ansible合并以下两个数组: TASK [Show var1] **************************************************************************** ok: [localhost] => { "var1": [ { "id": "133" }, { "id": "149" },
TASK [Show var1] ****************************************************************************
ok: [localhost] => {
"var1": [
{
"id": "133"
},
{
"id": "149"
},
{
"id": "188"
}
]
}
及
结果应该是:
"var1": [
{
"id": "133",
"name": "two"
},
{
"id": "149",
"name": "one"
},
{
"id": "188",
"name": "three"
}
]
到目前为止,我为合并所做的努力……只得到了最后一对。如何合并整个阵列?这里有一个可能的解决方案;我们使用
set\u fact
和combine
过滤器,在var1 | zip(var2)
上循环:
(有关和的信息,请参阅文档)
这将输出:
PLAY [localhost] *****************************************************************************************************************************************************************************
TASK [set_fact] ******************************************************************************************************************************************************************************
ok: [localhost] => (item=[{'id': 133}, {'name': 'two'}])
ok: [localhost] => (item=[{'id': 149}, {'name': 'one'}])
ok: [localhost] => (item=[{'id': 188}, {'name': 'three'}])
TASK [debug] *********************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": [
{
"id": 133,
"name": "two"
},
{
"id": 149,
"name": "one"
},
{
"id": 188,
"name": "three"
}
]
}
PLAY RECAP ***********************************************************************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
非常感谢。顺便问一下,这可以“在飞行中”制作吗?例如,var2的生成方式如下:set_fact:var2:“{{var2 | default([])+[{'name:item.matches[0].value}]}}”与{u items:“{{output.results}}”可以在这里生成var3吗?我不确定你到底在建议什么,但是Ansible并不关心变量是静态定义的还是在运行时使用
set\u fact
创建的。最好打开一个新问题,因为这样您就可以显示正在使用的代码。
- hosts: localhost
gather_facts: false
vars:
var1:
- id: 133
- id: 149
- id: 188
var2:
- name: two
- name: one
- name: three
tasks:
- set_fact:
var3: "{{ var3 + [item[0]|combine(item[1])] }}"
vars:
var3: []
loop: "{{ var1|zip(var2)|list }}"
- debug:
msg: "{{ var3 }}"
PLAY [localhost] *****************************************************************************************************************************************************************************
TASK [set_fact] ******************************************************************************************************************************************************************************
ok: [localhost] => (item=[{'id': 133}, {'name': 'two'}])
ok: [localhost] => (item=[{'id': 149}, {'name': 'one'}])
ok: [localhost] => (item=[{'id': 188}, {'name': 'three'}])
TASK [debug] *********************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": [
{
"id": 133,
"name": "two"
},
{
"id": 149,
"name": "one"
},
{
"id": 188,
"name": "three"
}
]
}
PLAY RECAP ***********************************************************************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0