adds feature to allow connection to set action plugin (#18762)

Connection plugin can define default action plugin to use by providing
action_handler instance variable.  This will override the default
action plugin normal
pull/19467/head
Peter Sprygada 8 years ago committed by GitHub
parent 0cef38cf02
commit ad99d52679

@ -762,7 +762,8 @@ class TaskExecutor:
raise AnsibleError("async mode is not supported with the %s module" % self._task.action) raise AnsibleError("async mode is not supported with the %s module" % self._task.action)
handler_name = self._task.action handler_name = self._task.action
elif self._task.async == 0: elif self._task.async == 0:
handler_name = 'normal' pc_conn = self._shared_loader_obj.connection_loader.get(self._play_context.connection, class_only=True)
handler_name = getattr(pc_conn, 'action_handler', 'normal')
else: else:
handler_name = 'async' handler_name = 'async'

@ -30,12 +30,19 @@ from ansible.plugins import terminal_loader
from ansible.plugins.connection import ensure_connect from ansible.plugins.connection import ensure_connect
from ansible.plugins.connection.paramiko_ssh import Connection as _Connection from ansible.plugins.connection.paramiko_ssh import Connection as _Connection
try:
from __main__ import display
except ImportError:
from ansible.utils.display import Display
display = Display()
class Connection(_Connection): class Connection(_Connection):
''' CLI (shell) SSH connections on Paramiko ''' ''' CLI (shell) SSH connections on Paramiko '''
transport = 'network_cli' transport = 'network_cli'
has_pipelining = False has_pipelining = False
action_handler = 'network'
def __init__(self, play_context, new_stdin, *args, **kwargs): def __init__(self, play_context, new_stdin, *args, **kwargs):
super(Connection, self).__init__(play_context, new_stdin, *args, **kwargs) super(Connection, self).__init__(play_context, new_stdin, *args, **kwargs)
@ -97,6 +104,7 @@ class Connection(_Connection):
self._terminal.on_authorize(passwd=auth_pass) self._terminal.on_authorize(passwd=auth_pass)
def close(self): def close(self):
display.vvv('closing connection', host=self._play_context.remote_addr)
self.close_shell() self.close_shell()
super(Connection, self).close() super(Connection, self).close()

Loading…
Cancel
Save