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