From 31b45479e8b273610a1d2575d2106cc905bdaa88 Mon Sep 17 00:00:00 2001 From: Michael DeHaan Date: Thu, 18 Oct 2012 20:14:15 -0400 Subject: [PATCH] When using delegation, local_action should always use the local connection type. --- docsite/rst/who_uses_ansible.rst | 4 ++-- lib/ansible/runner/__init__.py | 11 +++++++---- lib/ansible/runner/connection.py | 5 +++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/docsite/rst/who_uses_ansible.rst b/docsite/rst/who_uses_ansible.rst index 4f24425a7bd..aa2af16bf91 100644 --- a/docsite/rst/who_uses_ansible.rst +++ b/docsite/rst/who_uses_ansible.rst @@ -7,7 +7,7 @@ The following is an opt-in list of just some of the folks using Ansible -- to ge * `Alta Language Services `_ - language testing, solutions, and translation services * `Basho `_ - makers of NoSQL engine Riak - * `CatN Hosting `_ - scalable Cloud hosting + * `CatN Hosting `_ - scalable Cloud hosting * `Cygate AB `_ - IT solutions from Malmo, Sweeden * `Dag IT Solutions `_ - Enterprise Linux & Beyond * `Duke University Economics `_ - Research & Education @@ -18,7 +18,7 @@ The following is an opt-in list of just some of the folks using Ansible -- to ge * `Scientific Computing Center, Aristotle Univ. of Thessaloniki `_ - Grid/Cloud-Based Scientific Computing * `Skylines.io `_ - Real time photo search engine * `Steelhouse `_ - Behavioral commerce - * `Tommorrow Focus Technologies GmbH `_ - Running some of the biggest web sites in Europe + * `Tomorrow Focus Technologies GmbH `_ - Running some of the biggest web sites in Europe * `123i.com.br `_ - Find real estate in Brazil * `Ginsys `_ - Linux infrastructure consulting from Belgium diff --git a/lib/ansible/runner/__init__.py b/lib/ansible/runner/__init__.py index 063e49e845b..e02aaad8e60 100644 --- a/lib/ansible/runner/__init__.py +++ b/lib/ansible/runner/__init__.py @@ -49,7 +49,7 @@ dirname = os.path.dirname(__file__) action_plugin_list = utils.import_plugins(os.path.join(dirname, 'action_plugins')) for i in reversed(C.DEFAULT_ACTION_PLUGIN_PATH.split(os.pathsep)): action_plugin_list.update(utils.import_plugins(i)) -lookup_plugin_list = utils.import_plugins(os.path.join(dirname, 'lookup_plugins')) +lookup_plugin_list = utils.import_plugins(os.path.join(dirname, 'lookup_plugins')) for i in reversed(C.DEFAULT_LOOKUP_PLUGIN_PATH.split(os.pathsep)): lookup_plugin_list.update(utils.import_plugins(i)) @@ -285,7 +285,7 @@ class Runner(object): if self.transport in [ 'paramiko', 'ssh' ]: port = host_variables.get('ansible_ssh_port', self.remote_port) if port is None: - port = C.DEFAULT_REMOTE_PORT + port = C.DEFAULT_REMOTE_PORT else: # fireball, local, etc port = self.remote_port @@ -399,11 +399,14 @@ class Runner(object): actual_host = delegate_to try: - # connect - conn = self.connector.connect(actual_host, int(actual_port)) + transport = None # use Runner setting + if delegate_to and actual_host in [ '127.0.0.1', 'localhost' ]: + transport = 'local' + conn = self.connector.connect(actual_host, int(actual_port), transport=transport) if delegate_to: conn.delegate = host + except errors.AnsibleConnectionFailed, e: result = dict(failed=True, msg="FAILED: %s" % str(e)) return ReturnData(host=host, comm_ok=False, result=result) diff --git a/lib/ansible/runner/connection.py b/lib/ansible/runner/connection.py index 3f5bce3cfd0..c3d1578eb64 100644 --- a/lib/ansible/runner/connection.py +++ b/lib/ansible/runner/connection.py @@ -40,12 +40,13 @@ class Connection(object): self.runner = runner self.modules = None - def connect(self, host, port): + def connect(self, host, port, transport=None): if self.modules is None: self.modules = modules.copy() self.modules.update(utils.import_plugins(os.path.join(self.runner.basedir, 'connection_plugins'))) conn = None - transport = self.runner.transport + if transport is None: + transport = self.runner.transport module = self.modules.get(transport, None) if module is None: raise AnsibleError("unsupported connection type: %s" % transport)