allow more 'backwards compatible' vars_plugins (#25451)

* allow more 'backwards compatible' vars_plugins

* better version relying on exceptions
pull/25357/merge
Brian Coca 7 years ago committed by GitHub
parent 89caef8fb6
commit a2cff554ee

@ -229,6 +229,24 @@ class VariableManager:
all_group = self._inventory.groups.get('all')
host_groups = sort_groups([g for g in host.get_groups() if g.name not in ['all']])
def _get_plugin_vars(plugin, loader, path, entities):
data = {}
try:
data = plugin.get_vars(self._loader, path, entities)
except AttributeError:
try:
for entity in entities:
if isinstance(entity, Host):
data.update(plugin.get_host_vars(entity.name))
else:
data.update(plugin.get_group_vars(entity.name))
except AttributeError:
if hasattr(plugin, 'run'):
raise AnsibleError("Cannot use v1 type vars plugin %s from %s" % (plugin._load_name, plugin._original_path))
else:
raise AnsibleError("Invalid vars plugin %s from %s" % (plugin._load_name, plugin._original_path))
return data
# internal fuctions that actually do the work
def _plugins_inventory(entities):
''' merges all entities by inventory source '''
@ -240,15 +258,14 @@ class VariableManager:
inventory_dir = os.path.dirname(inventory_dir)
for plugin in vars_loader.all():
data = combine_vars(data, plugin.get_vars(self._loader, inventory_dir, entities))
data = combine_vars(data, _get_plugin_vars(plugin, self._loader, inventory_dir, entities))
return data
def _plugins_play(entities):
''' merges all entities adjacent to play '''
data = {}
for plugin in vars_loader.all():
data = combine_vars(data, plugin.get_vars(self._loader, basedir, entities))
data = combine_vars(data, _get_plugin_vars(plugin, self._loader, basedir, entities))
return data
# configurable functions that are sortable via config

Loading…
Cancel
Save