summaryrefslogtreecommitdiff
path: root/lib/ansible/plugins/connection
diff options
context:
space:
mode:
authorNathaniel Case <this.is@nathanielca.se>2018-08-28 17:30:50 -0400
committerGitHub <noreply@github.com>2018-08-28 17:30:50 -0400
commit86f96d0212f367863113b24245d4078a63e5bac6 (patch)
treed8c6b5bb068f5154076ec9599c9032d84dd1789c /lib/ansible/plugins/connection
parent0c3216c5652411549ce32234a18c6ba2329d35ec (diff)
downloadansible-86f96d0212f367863113b24245d4078a63e5bac6.tar.gz
Move plugin option settings. (#44774)
* Move plugin option settings. * Add default value and clear after use.
Diffstat (limited to 'lib/ansible/plugins/connection')
-rw-r--r--lib/ansible/plugins/connection/__init__.py15
-rw-r--r--lib/ansible/plugins/connection/httpapi.py9
-rw-r--r--lib/ansible/plugins/connection/netconf.py2
-rw-r--r--lib/ansible/plugins/connection/network_cli.py2
4 files changed, 17 insertions, 11 deletions
diff --git a/lib/ansible/plugins/connection/__init__.py b/lib/ansible/plugins/connection/__init__.py
index d7e86e2510..da4a9b4ded 100644
--- a/lib/ansible/plugins/connection/__init__.py
+++ b/lib/ansible/plugins/connection/__init__.py
@@ -301,6 +301,7 @@ class NetworkConnectionBase(ConnectionBase):
self._local.set_options()
self._implementation_plugins = []
+ self._cached_variables = (None, None, None)
# reconstruct the socket_path and set instance values accordingly
self._ansible_playbook_pid = kwargs.get('ansible_playbook_pid')
@@ -317,6 +318,11 @@ class NetworkConnectionBase(ConnectionBase):
return method
raise AttributeError("'%s' object has no attribute '%s'" % (self.__class__.__name__, name))
+ def _connect(self):
+ for plugin in self._implementation_plugins:
+ plugin.set_options(*self._cached_variables)
+ self._cached_variables = (None, None, None)
+
def exec_command(self, cmd, in_data=None, sudoable=True):
return self._local.exec_command(cmd, in_data, sudoable)
@@ -344,14 +350,7 @@ class NetworkConnectionBase(ConnectionBase):
def set_options(self, task_keys=None, var_options=None, direct=None):
super(NetworkConnectionBase, self).set_options(task_keys=task_keys, var_options=var_options, direct=direct)
- self.set_implementation_plugin_options(task_keys=task_keys, var_options=var_options, direct=direct)
-
- def set_implementation_plugin_options(self, task_keys=None, var_options=None, direct=None):
- '''
- initialize implementation plugin options
- '''
- for plugin in self._implementation_plugins:
- plugin.set_options(task_keys=task_keys, var_options=var_options, direct=direct)
+ self._cached_variables = (task_keys, var_options, direct)
def _update_connection_state(self):
'''
diff --git a/lib/ansible/plugins/connection/httpapi.py b/lib/ansible/plugins/connection/httpapi.py
index e651f06bb6..a8718c5e87 100644
--- a/lib/ansible/plugins/connection/httpapi.py
+++ b/lib/ansible/plugins/connection/httpapi.py
@@ -206,10 +206,8 @@ class Connection(NetworkConnectionBase):
httpapi = httpapi_loader.get(self._network_os, self)
if httpapi:
- display.vvvv('loaded API plugin for network_os %s' % self._network_os, host=self._play_context.remote_addr)
+ display.vvvv('loaded API plugin for network_os %s' % self._network_os, host=host)
self._implementation_plugins.append(httpapi)
- httpapi.set_become(self._play_context)
- httpapi.login(self.get_option('remote_user'), self.get_option('password'))
else:
raise AnsibleConnectionFailure('unable to load API plugin for network_os %s' % self._network_os)
@@ -220,6 +218,11 @@ class Connection(NetworkConnectionBase):
else:
display.vvvv('unable to load cliconf for network_os %s' % self._network_os)
+ super(Connection, self)._connect()
+
+ httpapi.set_become(self._play_context)
+ httpapi.login(self.get_option('remote_user'), self.get_option('password'))
+
self._connected = True
def close(self):
diff --git a/lib/ansible/plugins/connection/netconf.py b/lib/ansible/plugins/connection/netconf.py
index 697f7ed3e9..93468f1438 100644
--- a/lib/ansible/plugins/connection/netconf.py
+++ b/lib/ansible/plugins/connection/netconf.py
@@ -307,6 +307,8 @@ class Connection(NetworkConnectionBase):
display.display('unable to load netconf plugin for network_os %s, falling back to default plugin' % self._network_os)
self._implementation_plugins.append(netconf)
+ super(Connection, self)._connect()
+
return 0, to_bytes(self._manager.session_id, errors='surrogate_or_strict'), b''
def close(self):
diff --git a/lib/ansible/plugins/connection/network_cli.py b/lib/ansible/plugins/connection/network_cli.py
index 7dfdcbb78c..e649c32c61 100644
--- a/lib/ansible/plugins/connection/network_cli.py
+++ b/lib/ansible/plugins/connection/network_cli.py
@@ -300,6 +300,8 @@ class Connection(NetworkConnectionBase):
else:
display.vvvv('unable to load cliconf for network_os %s' % self._network_os)
+ super(Connection, self)._connect()
+
self.receive(prompts=self._terminal.terminal_initial_prompt, answer=self._terminal.terminal_initial_answer,
newline=self._terminal.terminal_inital_prompt_newline)