diff --git a/lib/ansible/utils/plugins.py b/lib/ansible/utils/plugins.py index c36e5434ae..e9d2c605bd 100644 --- a/lib/ansible/utils/plugins.py +++ b/lib/ansible/utils/plugins.py @@ -100,11 +100,10 @@ class PluginLoader(object): files = glob.glob("%s/*" % fullpath) for file in files: if os.path.isdir(file) and file not in ret: - ret.append(file) - else: + ret.append(file) if fullpath not in ret: ret.append(fullpath) - + # look in any configured plugin paths, allow one level deep for subcategories configured_paths = self.config.split(os.pathsep) for path in configured_paths: diff --git a/test/TestRunner.py b/test/TestRunner.py index cf17e66998..d833a01be0 100644 --- a/test/TestRunner.py +++ b/test/TestRunner.py @@ -27,6 +27,7 @@ class TestRunner(unittest.TestCase): def setUp(self): self.user = getpass.getuser() self.runner = ansible.runner.Runner( + basedir='test/', module_name='ping', module_path='library/', module_args='', @@ -77,6 +78,12 @@ class TestRunner(unittest.TestCase): assert "localhost" in results['contacted'] return results['contacted']['localhost'] + def test_action_plugins(self): + result = self._run("uncategorized_plugin", []) + assert result.get("msg") == "uncategorized" + result = self._run("categorized_plugin", []) + assert result.get("msg") == "categorized" + def test_ping(self): result = self._run('ping', []) assert "ping" in result diff --git a/test/action_plugins/categorized_plugin.py b/test/action_plugins/categorized_plugin.py new file mode 100644 index 0000000000..62fa6ab510 --- /dev/null +++ b/test/action_plugins/categorized_plugin.py @@ -0,0 +1,15 @@ +from ansible.runner import return_data + + +class ActionModule (object): + def __init__(self, runner): + self.runner = runner + + def run(self, conn, tmp, module_name, module_args, inject, + complex_args=None, **kwargs): + # This plug-in should be ignored in deference to + # category/categorized_plugin.py, so it should never actually + # run. + return return_data.ReturnData( + conn=conn, comm_ok=True, + result={"msg": "this plug-in should never be run"}) diff --git a/test/action_plugins/category/categorized_plugin.py b/test/action_plugins/category/categorized_plugin.py new file mode 100644 index 0000000000..da23814c18 --- /dev/null +++ b/test/action_plugins/category/categorized_plugin.py @@ -0,0 +1,11 @@ +from ansible.runner import return_data + + +class ActionModule (object): + def __init__(self, runner): + self.runner = runner + + def run(self, conn, tmp, module_name, module_args, inject, + complex_args=None, **kwargs): + return return_data.ReturnData(conn=conn, comm_ok=True, + result={"msg": "categorized"}) diff --git a/test/action_plugins/uncategorized_plugin.py b/test/action_plugins/uncategorized_plugin.py new file mode 100644 index 0000000000..bf4bf809bd --- /dev/null +++ b/test/action_plugins/uncategorized_plugin.py @@ -0,0 +1,11 @@ +from ansible.runner import return_data + + +class ActionModule (object): + def __init__(self, runner): + self.runner = runner + + def run(self, conn, tmp, module_name, module_args, inject, + complex_args=None, **kwargs): + return return_data.ReturnData(conn=conn, comm_ok=True, + result={"msg": "uncategorized"})