From f8104df457e287eabedb42c95cff7385b711e0b7 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 28 Aug 2014 16:22:06 +0200 Subject: [PATCH] Corrected VM metadata obtention between Abiquo versions --- plugins/inventory/abiquo.ini | 31 ++++++++++++++++++++++++++++--- plugins/inventory/abiquo.py | 7 ++++++- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/plugins/inventory/abiquo.ini b/plugins/inventory/abiquo.ini index e59be95c02e..25d015c4ded 100644 --- a/plugins/inventory/abiquo.ini +++ b/plugins/inventory/abiquo.ini @@ -1,23 +1,48 @@ # Ansible external inventory script settings for Abiquo # + +# Define an Abiquo user with access to Abiquo API which will be used to +# perform required queries to obtain infromation to generate the Ansible +# inventory output. +# [auth] apiuser = admin apipass = xabiquo + +# Specify Abiquo API version in major.minor format and the access URI to +# API endpoint. Tested versions are: 2.6 , 3.0 and 3.1 +# To confirm that your box haves access to Abiquo API you can perform a +# curl command, replacing with suitable values, similar to this: +# curl -X GET https://192.168.2.100/api/login -u admin:xabiquo +# [api] -uri = http://192.168.2.211:80/api +version = 3.0 +uri = https://192.168.2.100/api # You probably won't need to modify login preferences, but just in case login_path = /login login_type = application/vnd.abiquo.user+json + +# To avoid performing excessive calls to Abiquo API you can define a +# cache for the plugin output. Within the time defined in seconds, latest +# output will be reused. After that time, the cache will be refreshed. +# [cache] cache_max_age = 30 -cache_dir = /var/tmp +cache_dir = /tmp + [defaults] +# Depending in your Abiquo environment, you may want to use only public IP +# addresses (if using public cloud providers) or also private IP addresses. +# You can set this with public_ip_only configuration. public_ip_only = false # default_net_interface only is used if public_ip_only = false +# If public_ip_only is set to false, you can choose default nic to obtain +# IP address to define the host. default_net_interface = nic0 -# Only deployed VM are added to output +# Only deployed VM are displayed in the plugin output. deployed_only = true +# Define if VM metadata is obtained from Abiquo API. get_metadata = false diff --git a/plugins/inventory/abiquo.py b/plugins/inventory/abiquo.py index c3c4e3a58be..818a0c7908c 100755 --- a/plugins/inventory/abiquo.py +++ b/plugins/inventory/abiquo.py @@ -167,7 +167,12 @@ def generate_inv_from_api(enterprise_entity,config): meta_entity = next(link for link in (vmcollection['links']) if (link['rel']=='metadata')) try: metadata = api_get(meta_entity,config) - inventory['_meta']['hostvars'][vm_nic] = metadata['metadata']['metadata'] + if (config.getfloat("api","version") >= 3.0): + vm_metadata = metadata['metadata'] + else: + vm_metadata = metadata['metadata']['metadata'] + if not vm_metadata is None: + inventory['_meta']['hostvars'][vm_nic] = vm_metadata except Exception, e: pass