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 e94e80c79eab425637638205efa0eae368389dcd)

* Return dict directly to avoid failing key lookup

(cherry picked from commit 545b98645d04b2d26eb95354d8edf4d8e9d4e2a2)

* Add changelog fragment for #54333
This commit is contained in:
Matt Williams 2019-04-01 21:30:36 +01:00 committed by Toshio Kuratomi
parent 08dbeff204
commit 78844c800f
2 changed files with 7 additions and 5 deletions

View file

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

View file

@ -166,8 +166,8 @@ class InventoryModule(BaseInventoryPlugin, Cacheable):
url = "%s/api/v2/hosts/%s" % (self.foreman_url, hid)
ret = self._get_json(url, [404])
if not ret or not isinstance(ret, MutableMapping) or not ret.get('all_parameters', False):
ret = {'all_parameters': [{}]}
return ret.get('all_parameters')[0]
return {}
return ret.get('all_parameters')
def _get_facts_by_id(self, 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
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:
self.inventory.set_variable(host['name'], k, v)
self.inventory.set_variable(host['name'], p['name'], p['value'])
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
if self.get_option('want_facts'):