Properly check for prompting state when re-using ssh connection
Fixes #13278
This commit is contained in:
parent
96fcfe45d0
commit
65747285a4
3 changed files with 7 additions and 2 deletions
|
@ -362,7 +362,7 @@ class TaskExecutor:
|
|||
self._task.args = variable_params
|
||||
|
||||
# get the connection and the handler for this execution
|
||||
if not self._connection or not getattr(self._connection, '_connected', False):
|
||||
if not self._connection or not getattr(self._connection, 'connected', False):
|
||||
self._connection = self._get_connection(variables=variables, templar=templar)
|
||||
self._connection.set_host_overrides(host=self._host)
|
||||
|
||||
|
|
|
@ -75,6 +75,7 @@ class ConnectionBase(with_metaclass(ABCMeta, object)):
|
|||
|
||||
self.success_key = None
|
||||
self.prompt = None
|
||||
self._connected = False
|
||||
|
||||
# load the shell plugin for this action/connection
|
||||
if play_context.shell:
|
||||
|
@ -88,6 +89,10 @@ class ConnectionBase(with_metaclass(ABCMeta, object)):
|
|||
if not self._shell:
|
||||
raise AnsibleError("Invalid shell type specified (%s), or the plugin for that shell type is missing." % shell_type)
|
||||
|
||||
@property
|
||||
def connected(self):
|
||||
return self._connected
|
||||
|
||||
def _become_method_supported(self):
|
||||
''' Checks if the current class supports this privilege escalation method '''
|
||||
|
||||
|
|
|
@ -372,7 +372,7 @@ class Connection(ConnectionBase):
|
|||
# wait for a password prompt.
|
||||
state = states.index('awaiting_prompt')
|
||||
display.debug('Initial state: %s: %s' % (states[state], self._play_context.prompt))
|
||||
elif self._play_context.become and self._play_context.success_key:
|
||||
elif self._play_context.become and self._play_context.success_key and not self._connected:
|
||||
# We're requesting escalation without a password, so we have to
|
||||
# detect success/failure before sending any initial data.
|
||||
state = states.index('awaiting_escalation')
|
||||
|
|
Loading…
Reference in a new issue