Json Ansible合并2数组

Json Ansible合并2数组,json,ansible,Json,Ansible,我正在尝试使用Ansible合并以下两个数组: TASK [Show var1] **************************************************************************** ok: [localhost] => { "var1": [ { "id": "133" }, { "id": "149" },

我正在尝试使用Ansible合并以下两个数组:

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