retrieving facter_ec2_metadata from hostvars - can't get element in macs

Skip to first unread message

Chris Jefferies

unread,
Mar 5, 2019, 3:40:52 PM3/5/19
to Ansible Project
I can drill down into hostvars like this:

    - debug:
        msg
: "looking at interface macs: {{ hostvars[inventory_hostname].facter_ec2_metadata.network.interfaces.macs }}"


And I get something like this:


ok
: [db01.deva.ecm] => {
   
"msg": "looking at interface macs: {u'xx:xx:xx:xx:xx:xx': {u'local-hostname': u'ip-10-1-1-9.us-west-1.compute.internal', u'security-groups': u'sg_me', u'vpc-ipv4-cidr-blocks': u'10.1.0.0/16', u'subnet-id': u'subnet-009ae259d26e44f23', u'vpc-ipv4-cidr-block': u'10.1.0.0/16', u'interface-id': u'eni-0f706387a1423f329', u'mac': u'xx:xx:xx:xx:xx:xx, u'security-group-ids': u'sg-034d209d935486e41', u'local-ipv4s': u'10.1.1.10', u'owner-id': u'784710449476', u'subnet-ipv4-cidr-block': u'10.1.1.0/24', u'device-number': u'0', u'vpc-id': u'vpc-1710943aba582459a'}}"
}




I get an error if I try to find the first/only mac address with the [0] approach like this:

{{ hostvars[inventory_hostname].facter_ec2_metadata.network.interfaces.macs[0] }}


or 

{{ hostvars[inventory_hostname].facter_ec2_metadata.network.interfaces.macs.0 }}


What's the trick to get to the values within the mac address?

Any tips would be appreciated,  thanks,
Chris.

Chris Jefferies

unread,
Mar 5, 2019, 5:40:48 PM3/5/19
to Ansible Project
ansible 2.7.1
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/Users/cjefferies/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /Library/Python/2.7/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 2.7.10 (default, Aug 17 2018, 17:41:52) [GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.0.42)]

Kai Stian Olstad

unread,
Mar 7, 2019, 12:19:11 PM3/7/19
to ansible...@googlegroups.com
macs is a dict and not a list. Therefor using 0 to get the fist list element wont work.

To get information out of a dict you need to use the key which is the mac address in you case.


--
Kai Stian Olstad

Chris Jefferies

unread,
Mar 11, 2019, 10:05:48 AM3/11/19
to Ansible Project
That's too bad because I don't have the mac address before I need to read its attributes.  How might a person get a list of the mac addresses associated with the interfaces?

Thanks for the info.
Chris.

Kai Stian Olstad

unread,
Mar 11, 2019, 10:29:02 AM3/11/19
to ansible...@googlegroups.com
On 09.03.2019 02:47, Chris Jefferies wrote:
> That's too bad because I don't have the mac address before I need to read
> its attributes. How might a person get a list of the mac addresses
> associated with the interfaces?

You could try using python method to get the keys .....macs.keys() this will return the list of all keys in macs.
So the fist one would be .....macs.keys()[0]


--
Kai Stian Olstad

Chris Jefferies

unread,
Mar 12, 2019, 3:04:14 PM3/12/19
to Ansible Project
That worked, Kai.  Thank you.
Reply all
Reply to author
Forward
0 new messages