From 23866084d78f2624287766c5f5b0dd5fd7929857 Mon Sep 17 00:00:00 2001 From: David Wilson Date: Tue, 22 Jan 2019 01:42:15 +0000 Subject: [PATCH] issue #412: promote "mitogen_get_stack" to the main extension. This is to make it easier for users to diagnose their own problems. --- ansible_mitogen/plugins/action/__init__.py | 0 .../plugins/action/mitogen_get_stack.py | 53 +++++++++++++++++++ ansible_mitogen/strategy.py | 11 ++-- tests/ansible/lib/action/mitogen_get_stack.py | 23 +------- 4 files changed, 61 insertions(+), 26 deletions(-) create mode 100644 ansible_mitogen/plugins/action/__init__.py create mode 100644 ansible_mitogen/plugins/action/mitogen_get_stack.py mode change 100644 => 120000 tests/ansible/lib/action/mitogen_get_stack.py diff --git a/ansible_mitogen/plugins/action/__init__.py b/ansible_mitogen/plugins/action/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/ansible_mitogen/plugins/action/mitogen_get_stack.py b/ansible_mitogen/plugins/action/mitogen_get_stack.py new file mode 100644 index 00000000..8e0b310c --- /dev/null +++ b/ansible_mitogen/plugins/action/mitogen_get_stack.py @@ -0,0 +1,53 @@ +# Copyright 2017, David Wilson +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors +# may be used to endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +from __future__ import absolute_import +from __future__ import unicode_literals + +""" +Fetch the connection configuration stack that would be used to connect to a +target, without actually connecting to it. +""" + +import ansible_mitogen.connection + +from ansible.plugins.action import ActionBase + + +class ActionModule(ActionBase): + def run(self, tmp=None, task_vars=None): + if not isinstance(self._connection, + ansible_mitogen.connection.Connection): + return { + 'skipped': True, + } + + return { + 'changed': True, + 'result': self._connection._build_stack(), + } diff --git a/ansible_mitogen/strategy.py b/ansible_mitogen/strategy.py index dd17f177..e82e6d58 100644 --- a/ansible_mitogen/strategy.py +++ b/ansible_mitogen/strategy.py @@ -174,15 +174,18 @@ class StrategyMixin(object): ansible_mitogen.loaders.action_loader.get = action_loader__get ansible_mitogen.loaders.connection_loader.get = connection_loader__get - def _add_connection_plugin_path(self): + def _add_plugin_paths(self): """ - Add the mitogen connection plug-in directory to the ModuleLoader path, - avoiding the need for manual configuration. + Add the Mitogen plug-in directories to the ModuleLoader path, avoiding + the need for manual configuration. """ base_dir = os.path.join(os.path.dirname(__file__), 'plugins') ansible_mitogen.loaders.connection_loader.add_directory( os.path.join(base_dir, 'connection') ) + ansible_mitogen.loaders.action_loader.add_directory( + os.path.join(base_dir, 'action') + ) def run(self, iterator, play_context, result=0): """ @@ -190,7 +193,7 @@ class StrategyMixin(object): the strategy's real run() method. """ ansible_mitogen.process.MuxProcess.start() - self._add_connection_plugin_path() + self._add_plugin_paths() self._install_wrappers() try: return super(StrategyMixin, self).run(iterator, play_context) diff --git a/tests/ansible/lib/action/mitogen_get_stack.py b/tests/ansible/lib/action/mitogen_get_stack.py deleted file mode 100644 index f1b87f35..00000000 --- a/tests/ansible/lib/action/mitogen_get_stack.py +++ /dev/null @@ -1,22 +0,0 @@ -""" -Fetch the connection configuration stack that would be used to connect to a -target, without actually connecting to it. -""" - -import ansible_mitogen.connection - -from ansible.plugins.action import ActionBase - - -class ActionModule(ActionBase): - def run(self, tmp=None, task_vars=None): - if not isinstance(self._connection, - ansible_mitogen.connection.Connection): - return { - 'skipped': True, - } - - return { - 'changed': True, - 'result': self._connection._build_stack(), - } diff --git a/tests/ansible/lib/action/mitogen_get_stack.py b/tests/ansible/lib/action/mitogen_get_stack.py new file mode 120000 index 00000000..f055f341 --- /dev/null +++ b/tests/ansible/lib/action/mitogen_get_stack.py @@ -0,0 +1 @@ +../../../../ansible_mitogen/plugins/action/mitogen_get_stack.py \ No newline at end of file