Hi,
I’ve spent the past few days trying to find a solution to a challenge I have. Hopefully someone here has the answer.
Here is a slimmed down version, which hopefully will help me move forwards.
`
-
hosts: satellite
gather_facts: False
remote_user: root
tasks: -
name: test
vmware_guest_facts:
hostname: vcenter
username: me
password:
datacenter: DC1
folder: /DC1/vm
validate_certs: no
name: “{{ item }}”
register: facts
delegate_to: localhost
with_items: -
ltdrob002
-
ltdrob003
-
debug: msg=“{{ facts.results[0].instance.hw_eth0.macaddress }}”
with_items: “{{ facts.results }}”
`
The above works, it goes to vcenter and prints the MAC address of the first server (in reference to item [0]). However it prints the MAC address of the first VM when its getting the facts of the second VM. What I am trying to achieve is to get the MAC address printed for the relevant VM as it loops through. So in the debug area… I want it to resemble something like:
`
- debug: msg=“{{ item.facts.results.instance.hw_eth0.macaddress }}”
with_items: “{{ facts.results }}”
`
The above code doesn’t work and the error…
“The task includes an option with an undefined variable. The error was: ‘dict object’ has no attribute ‘facts’” is seen.
A bit of background… this is optional, help on the above is great for now.
The challenge I have is that I need to provision a group of VMs, via the use of with_list (I have a seperate vars file with required vm info in, i.e. vmName: ltdrob003). Currently I have this working fine with just a single VM. I need to pass the MAC address of the VM to Satellite (Hammer) so that Satellite is able to PXE boot/configure the VM.
The MAC address gets generated when the VM is created so this needs to be passed to Hammer. As stated, I have this working for 1 VM at a time, but it would be nice to pass to Ansible a list of VMs to create and have it create them in 1-run. I achieve this currently with the below and the hammer command just references “{{ vm_mac }}”.
`
- set_fact:
vm_mac: “{{ results.instance.hw_eth0.macaddress }}”
`
My plan will be to alter the name of the fact to match the name of the vm, i.e… “{{ vmName }}_mac”:
and then have Hammer reference the MAC via lookup:
mac="{{ vars[vmName + '_mac'] }}":
I can add further detail, but initially I wanted to try and put a simple example in the hope that this will get some responses.
Many thanks in advance.