|
|
|
@ -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
|
|
|
|
|