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
(cherry picked from commit b93b9e68d7
)
This commit is contained in:
parent
c276466262
commit
a53cc97f19
1 changed files with 10 additions and 5 deletions
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue