Fix Foreman returning host parameters (#54101)

* Fix Foreman returning host parameters 

Foreman (1.20) returns the `all_parameters` key as a list of dicts, not a dict of key-value pairs.

* Fix for type error

The empty type here should be a dict, not a list as is has a `get` done
on it next.

(cherry picked from commit e94e80c79e)

* Return dict directly to avoid failing key lookup

(cherry picked from commit 545b98645d)

* Add changelog fragment for #54333
pull/54704/head
Matt Williams 7 years ago committed by Toshio Kuratomi
parent 08dbeff204
commit 78844c800f

@ -0,0 +1,2 @@
bugfixes:
- foreman - fix Foreman returning host parameters

@ -166,8 +166,8 @@ class InventoryModule(BaseInventoryPlugin, Cacheable):
url = "%s/api/v2/hosts/%s" % (self.foreman_url, hid) url = "%s/api/v2/hosts/%s" % (self.foreman_url, hid)
ret = self._get_json(url, [404]) ret = self._get_json(url, [404])
if not ret or not isinstance(ret, MutableMapping) or not ret.get('all_parameters', False): if not ret or not isinstance(ret, MutableMapping) or not ret.get('all_parameters', False):
ret = {'all_parameters': [{}]} return {}
return ret.get('all_parameters')[0] return ret.get('all_parameters')
def _get_facts_by_id(self, hid): def _get_facts_by_id(self, hid):
url = "%s/api/v2/hosts/%s/facts" % (self.foreman_url, hid) url = "%s/api/v2/hosts/%s/facts" % (self.foreman_url, hid)
@ -220,11 +220,11 @@ class InventoryModule(BaseInventoryPlugin, Cacheable):
# set host vars from params # set host vars from params
if self.get_option('want_params'): if self.get_option('want_params'):
for k, v in self._get_all_params_by_id(host['id']).items(): for p in self._get_all_params_by_id(host['id']):
try: try:
self.inventory.set_variable(host['name'], k, v) self.inventory.set_variable(host['name'], p['name'], p['value'])
except ValueError as e: except ValueError as e:
self.display.warning("Could not set parameter hostvar for %s, skipping %s: %s" % (host, k, to_native(e))) self.display.warning("Could not set parameter hostvar for %s, skipping %s: %s" % (host, p['name'], to_native(p['value'])))
# set host vars from facts # set host vars from facts
if self.get_option('want_facts'): if self.get_option('want_facts'):

Loading…
Cancel
Save