Im adding to an empty array/list defined in groups_vars/all as:
vminfo: []

the playbook creates new VMs and i need to register some information for 
later reference (teardown) so i add the relevant info to this vminfo list 
insude my include with_items as such:

- name: Register VM information which will later be written to disk as YAML
  set_fact:
    vminfo: "{{ vminfo + [ {'name': '{{ item.hostname }}', 'ip': '{{ 
free_ip.json.data | ipv4 }}', 'uuid': '{{ 
vm_creation.instance.hw_product_uuid }}'} ] }}"




The first time this gets interpreted / parsed it looks fine and when i 
debug it shows as:

TASK [common : DEBUG | Print vminfo list after set_fact] 
*************************************************************************************************************************
ok: [localhost] => {
    "msg": [
        {
            "ip": "192.168.111.26", 
            "name": "swarm01", 
            "uuid": "4218386c-7c2b-a2d1-0f80-22e7c14ff4d1"
        }
    ]
}


however when it comes around to create the second VM this happens:

TASK [common : DEBUG | Print vminfo list after set_fact] 
*************************************************************************************************************************
ok: [localhost] => {
    "msg": [
        {
            "ip": "192.168.111.27", 
            "name": "swarm02", 
            "uuid": "42189c05-6fb7-2fdb-108a-4ca980844f4d"
        }, 
        {
            "ip": "{{ free_ip.json.data | ipv4 }}", 
            "name": "{{ item.hostname }}", 
            "uuid": "{{ vm_creation.instance.hw_product_uuid }}"
        }
    ]
}

the first object in the array/list is being replaced with the 2nd VM info 
and then it looks like it's no longer parsing the jinja2 expression 
correctly.
when it comes around to create the 3rd vm the node the just wrote over the 
1st VM is still there but a 3rd object is added which is also not being 
parsed correctly:

TASK [common : DEBUG | Print vminfo list after set_fact] 
*************************************************************************************************************************
ok: [localhost] => {
    "msg": [
        {
            "ip": "192.168.111.27", 
            "name": "swarm02", 
            "uuid": "42189c05-6fb7-2fdb-108a-4ca980844f4d"
        }, 
        {
            "ip": "{{ free_ip.json.data | ipv4 }}", 
            "name": "{{ item.hostname }}", 
            "uuid": "{{ vm_creation.instance.hw_product_uuid }}"
        }, 
        {
            "ip": "{{ free_ip.json.data | ipv4 }}", 
            "name": "{{ item.hostname }}", 
            "uuid": "{{ vm_creation.instance.hw_product_uuid }}"
        }
    ]
}

i do something similar as a separate task where i add just strings to an 
array/list which i use with add_host later but this does not behave as the 
above:

- name: Register the assigned IP address for later use
  set_fact:
    new_vms: "{{ new_vms }} + [ '{{ free_ip.json.data | ipv4 }}' ]"

this results in a regular array

['192.168.0.1', '192.168.0.2', '192.168.0.3']

even though im referencing the same attribute.

is this a bug and/or is there a better way of achieving what i am trying to 
do in terms of building out this array with the data i need collected?

thanks - 


-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/407a9d46-b823-45c6-95fc-eee06d2b6818%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to