Ansible concatenate list with loop - missing element

Viewed 110

I try to concatenate list of list with Ansible. It works with my loop, except the last element is missing in my final list. I retrieve the list from the volumes_list variable and then concatenate volumes_list with each retrieved list with the contents of volumes_list. But the last concatenation is missing. The code:

- name: Array management
  hosts: localhost
  gather_facts: yes
  any_errors_fatal: true
  max_fail_percentage: 0

  vars_files:
    - vars/{{ env }}.yml

  tasks:
    - name: Retrieve array info
      purestorage.flasharray.purefa_info:
        gather_subset:
          - volumes
          - hosts
        fa_url: "{{ src_fa_url }}"
        api_token: "{{ src_fa_api_token }}"
      register: array_info

    - name: Get list of volumes to eradicate
      vars:
        volumelist: []
        volumes_list: []

      set_fact:
          volumes_list: "{{ array_info.purefa_info.hosts[item].volumes | map(attribute='volume') | list }}"
          volumelist: "{{ volumelist  + volumes_list }}"
      with_items: "{{ src_host_name }}"

    - debug:
        var: volumelist

What the volumelist should be:

TASK [debug] ***********************************************************************************************************************************************************************************************
task path: /data/demo-k8s/ansible-deploy-vmware-vm/HA/mygather.yml:36
ok: [localhost] => {
    "volumelist": [
        "democenter-ha-dc1-worker01_pwxvol-01",
        "democenter-ha-dc1-worker02_pwxvol-01",
        "democenter-ha-dc2-worker03_pwxvol-01",
        "democenter-ha-dc2-worker04_pwxvol-01",
        "democenter-ha-dc3-worker05_pwxvol-01",
        "democenter-ha-dc3-worker06_pwxvol-01"
    ]
}

And what I get:

TASK [debug] ***********************************************************************************************************************************************************************************************
task path: /data/demo-k8s/ansible-deploy-vmware-vm/HA/gather.yml:37
ok: [localhost] => {
    "volumelist": [
        "democenter-ha-dc1-worker01_pwxvol-01",
        "democenter-ha-dc1-worker02_pwxvol-01",
        "democenter-ha-dc2-worker03_pwxvol-01",
        "democenter-ha-dc2-worker04_pwxvol-01",
        "democenter-ha-dc3-worker05_pwxvol-01"

    ]
}

Below is the verbose log of the playbook:

TASK [Get list of volumes to eradicate] ********************************************************************************************************************************************************************
task path: /data/demo-k8s/ansible-deploy-vmware-vm/HA/gather.yml:24
ok: [localhost] => (item=democenter-ha-dc1-worker01) => {
    "ansible_facts": {
        "volumelist": [],
        "volumes_list": [
            "pxclouddrive-31619b2b53",
            "pxclouddrive-cc87055dac"
        ]
    },
    "ansible_loop_var": "item",
    "changed": false,
    "item": "democenter-ha-dc1-worker01"
}
ok: [localhost] => (item=democenter-ha-dc1-worker02) => {
    "ansible_facts": {
        "volumelist": [
            "pxclouddrive-31619b2b53",
            "pxclouddrive-cc87055dac"
        ],
        "volumes_list": [
            "pxclouddrive-0f133ee9ad"
        ]
    },
    "ansible_loop_var": "item",
    "changed": false,
    "item": "democenter-ha-dc1-worker02"
}
ok: [localhost] => (item=democenter-ha-dc2-worker03) => {
    "ansible_facts": {
        "volumelist": [
            "pxclouddrive-31619b2b53",
            "pxclouddrive-cc87055dac",
            "pxclouddrive-0f133ee9ad"
        ],
        "volumes_list": [
            "pxclouddrive-0d680f966d",
            "pxclouddrive-a147bea696"
        ]
    },
    "ansible_loop_var": "item",
    "changed": false,
    "item": "democenter-ha-dc2-worker03"
}
ok: [localhost] => (item=democenter-ha-dc2-worker04) => {
    "ansible_facts": {
        "volumelist": [
            "pxclouddrive-31619b2b53",
            "pxclouddrive-cc87055dac",
            "pxclouddrive-0f133ee9ad",
            "pxclouddrive-0d680f966d",
            "pxclouddrive-a147bea696"
        ],
        "volumes_list": [
            "pxclouddrive-1295aa9270"
        ]
    },
    "ansible_loop_var": "item",
    "changed": false,
    "item": "democenter-ha-dc2-worker04"
}
ok: [localhost] => (item=democenter-ha-dc3-worker05) => {
    "ansible_facts": {
        "volumelist": [
            "pxclouddrive-31619b2b53",
            "pxclouddrive-cc87055dac",
            "pxclouddrive-0f133ee9ad",
            "pxclouddrive-0d680f966d",
            "pxclouddrive-a147bea696",
            "pxclouddrive-1295aa9270"
        ],
        "volumes_list": [
            "pxclouddrive-18f53255f2",
            "pxclouddrive-733efb183d"
        ]
    },
    "ansible_loop_var": "item",
    "changed": false,
    "item": "democenter-ha-dc3-worker05"
}
ok: [localhost] => (item=democenter-ha-dc3-worker06) => {
    "ansible_facts": {
        "volumelist": [
            "pxclouddrive-31619b2b53",
            "pxclouddrive-cc87055dac",
            "pxclouddrive-0f133ee9ad",
            "pxclouddrive-0d680f966d",
            "pxclouddrive-a147bea696",
            "pxclouddrive-1295aa9270",
            "pxclouddrive-18f53255f2",
            "pxclouddrive-733efb183d"
        ],
        "volumes_list": [
            "pxclouddrive-4f3bd78304"
        ]
    },
    "ansible_loop_var": "item",
    "changed": false,
    "item": "democenter-ha-dc3-worker06"
}
Read vars_file 'vars/{{ env }}.yml'

TASK [debug] ***********************************************************************************************************************************************************************************************
task path: /data/demo-k8s/ansible-deploy-vmware-vm/HA/gather.yml:39
ok: [localhost] => {
    "volumelist": [
        "pxclouddrive-31619b2b53",
        "pxclouddrive-cc87055dac",
        "pxclouddrive-0f133ee9ad",
        "pxclouddrive-0d680f966d",
        "pxclouddrive-a147bea696",
        "pxclouddrive-1295aa9270",
        "pxclouddrive-18f53255f2",
        "pxclouddrive-733efb183d"
    ]
}

But if modify the playbook like this, it works. But I would like to understand where is the problem with the first version:

    - name: Get list of volumes to eradicate
      vars:
        volumelist: []
      set_fact:
          volumelist: "{{ volumelist }} + {{ array_info.purefa_info.hosts[item].volumes | map(attribute='volume') | list }}"
      with_items: "{{ src_host_name }}"

Below is the verbose log:

TASK [Get list of volumes to eradicate] ********************************************************************************************************************************************************************
task path: /data/demo-k8s/ansible-deploy-vmware-vm/HA/gather.yml:24
ok: [localhost] => (item=democenter-ha-dc1-worker01) => {
    "ansible_facts": {
        "volumelist": [
            "pxclouddrive-31619b2b53",
            "pxclouddrive-cc87055dac"
        ]
    },
    "ansible_loop_var": "item",
    "changed": false,
    "item": "democenter-ha-dc1-worker01"
}
ok: [localhost] => (item=democenter-ha-dc1-worker02) => {
    "ansible_facts": {
        "volumelist": [
            "pxclouddrive-31619b2b53",
            "pxclouddrive-cc87055dac",
            "pxclouddrive-0f133ee9ad"
        ]
    },
    "ansible_loop_var": "item",
    "changed": false,
    "item": "democenter-ha-dc1-worker02"
}
ok: [localhost] => (item=democenter-ha-dc2-worker03) => {
    "ansible_facts": {
        "volumelist": [
            "pxclouddrive-31619b2b53",
            "pxclouddrive-cc87055dac",
            "pxclouddrive-0f133ee9ad",
            "pxclouddrive-0d680f966d",
            "pxclouddrive-a147bea696"
        ]
    },
    "ansible_loop_var": "item",
    "changed": false,
    "item": "democenter-ha-dc2-worker03"
}
ok: [localhost] => (item=democenter-ha-dc2-worker04) => {
    "ansible_facts": {
        "volumelist": [
            "pxclouddrive-31619b2b53",
            "pxclouddrive-cc87055dac",
            "pxclouddrive-0f133ee9ad",
            "pxclouddrive-0d680f966d",
            "pxclouddrive-a147bea696",
            "pxclouddrive-1295aa9270"
        ]
    },
    "ansible_loop_var": "item",
    "changed": false,
    "item": "democenter-ha-dc2-worker04"
}
ok: [localhost] => (item=democenter-ha-dc3-worker05) => {
    "ansible_facts": {
        "volumelist": [
            "pxclouddrive-31619b2b53",
            "pxclouddrive-cc87055dac",
            "pxclouddrive-0f133ee9ad",
            "pxclouddrive-0d680f966d",
            "pxclouddrive-a147bea696",
            "pxclouddrive-1295aa9270",
            "pxclouddrive-18f53255f2",
            "pxclouddrive-733efb183d"
        ]
    },
    "ansible_loop_var": "item",
    "changed": false,
    "item": "democenter-ha-dc3-worker05"
}
ok: [localhost] => (item=democenter-ha-dc3-worker06) => {
    "ansible_facts": {
        "volumelist": [
            "pxclouddrive-31619b2b53",
            "pxclouddrive-cc87055dac",
            "pxclouddrive-0f133ee9ad",
            "pxclouddrive-0d680f966d",
            "pxclouddrive-a147bea696",
            "pxclouddrive-1295aa9270",
            "pxclouddrive-18f53255f2",
            "pxclouddrive-733efb183d",
            "pxclouddrive-4f3bd78304"
        ]
    },
    "ansible_loop_var": "item",
    "changed": false,
    "item": "democenter-ha-dc3-worker06"
}
Read vars_file 'vars/{{ env }}.yml'

TASK [debug] ***********************************************************************************************************************************************************************************************
task path: /data/demo-k8s/ansible-deploy-vmware-vm/HA/gather.yml:39
ok: [localhost] => {
    "volumelist": [
        "pxclouddrive-31619b2b53",
        "pxclouddrive-cc87055dac",
        "pxclouddrive-0f133ee9ad",
        "pxclouddrive-0d680f966d",
        "pxclouddrive-a147bea696",
        "pxclouddrive-1295aa9270",
        "pxclouddrive-18f53255f2",
        "pxclouddrive-733efb183d",
        "pxclouddrive-4f3bd78304"
    ]
}
0 Answers
Related