Fix Foreman returning host parameters (#51034)

Foreman (1.20) returns the `all_parameters` key as a list of dicts, not a dict of key-value pairs.
This commit is contained in:
Matt Williams 2019-01-18 20:56:57 +00:00 committed by Brian Coca
parent 8a5bb7e6c3
commit 919abe17f3

View file

@ -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': [{}]} ret = []
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'):