Ansible объединить 2 массива - PullRequest
3 голосов
/ 01 мая 2020

Я пытаюсь объединить следующие 2 массива, используя Ansible:

TASK [Show var1] ****************************************************************************
ok: [localhost] => {
    "var1": [
        {
            "id": "133"
        },
        {
            "id": "149"
        },
        {
            "id": "188"
        }
    ]
}

и

TASK [Show var2] ****************************************************************************
ok: [localhost] => {
    "var2": [
        {
            "name": "two"
        },
        {
            "name": "one"
        },
        {
            "name": "three"
        }
    ]
}

Результат должен быть:

    "var1": [
        {
            "id": "133",
            "name": "two"
        },
        {
            "id": "149",
            "name": "one"
        },
        {
            "id": "188",
            "name": "three"
        }
    ]

Мои усилия по объединению пока ... вернули только последнюю пару. Как я могу объединить целые массивы?

1 Ответ

3 голосов
/ 01 мая 2020

Вот одно из возможных решений; мы используем set_fact и combine фильтр с циклом var1|zip(var2):

- 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 }}"

(Информацию о set_fact и объедините см. в документации) .

Будет выведено:


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   

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...