summaryrefslogtreecommitdiff
path: root/lib/ansible/plugins/__init__.py
diff options
context:
space:
mode:
authorBrian Coca <brian.coca+git@gmail.com>2017-07-14 23:38:03 -0400
committerBrian Coca <bcoca@users.noreply.github.com>2017-07-26 11:54:13 -0400
commitb93b9e68d71adb4f8688da4be2230af9317e9c62 (patch)
tree7fe09e0b27eb60ec81d0dd6545a1787774f36905 /lib/ansible/plugins/__init__.py
parent498bf4b5be2c6f0f3c15a10e19dc4bcbd4d8989f (diff)
downloadansible-b93b9e68d71adb4f8688da4be2230af9317e9c62.tar.gz
ensure prefix in plugin loading to avoid conflicts
when using 'all' to load all plugins were ending in main namespace creating conflicts with each other and random modulesr i.e. when trying to access json callback we were getting json 'parsing' lib
Diffstat (limited to 'lib/ansible/plugins/__init__.py')
-rw-r--r--lib/ansible/plugins/__init__.py15
1 files changed, 10 insertions, 5 deletions
diff --git a/lib/ansible/plugins/__init__.py b/lib/ansible/plugins/__init__.py
index 97dcc5134f..29d54519c2 100644
--- a/lib/ansible/plugins/__init__.py
+++ b/lib/ansible/plugins/__init__.py
@@ -329,13 +329,18 @@ class PluginLoader:
__contains__ = has_plugin
def _load_module_source(self, name, path):
- if name in sys.modules:
- # See https://github.com/ansible/ansible/issues/13110
- return sys.modules[name]
+
+ # avoid collisions across plugins
+ full_name = '.'.join([self.package, name])
+
+ if full_name in sys.modules:
+ # Avoids double loading, See https://github.com/ansible/ansible/issues/13110
+ return sys.modules[full_name]
+
with warnings.catch_warnings():
warnings.simplefilter("ignore", RuntimeWarning)
with open(path, 'rb') as module_file:
- module = imp.load_source(name, path, module_file)
+ module = imp.load_source(full_name, path, module_file)
return module
def get(self, name, *args, **kwargs):
@@ -350,7 +355,7 @@ class PluginLoader:
return None
if path not in self._module_cache:
- self._module_cache[path] = self._load_module_source('.'.join([self.package, name]), path)
+ self._module_cache[path] = self._load_module_source(name, path)
found_in_cache = False
obj = getattr(self._module_cache[path], self.class_name)