diff --git a/lib/ansible/plugins/terminal/__init__.py b/lib/ansible/plugins/terminal/__init__.py index 592ef5e439..a876c7fb06 100644 --- a/lib/ansible/plugins/terminal/__init__.py +++ b/lib/ansible/plugins/terminal/__init__.py @@ -69,7 +69,10 @@ class TerminalBase(with_metaclass(ABCMeta, object)): :returns: A byte string of the prompt """ - self._exec_cli_command(b'\n') + # do not send '\n' here, exec_cli_command sends '\r' already, + # doing so causes double prompts. + self._exec_cli_command(b'') + return self._connection._matched_prompt def on_open_shell(self): diff --git a/lib/ansible/plugins/terminal/ios.py b/lib/ansible/plugins/terminal/ios.py index 17023f0986..42ecfe64ee 100644 --- a/lib/ansible/plugins/terminal/ios.py +++ b/lib/ansible/plugins/terminal/ios.py @@ -65,8 +65,12 @@ class TerminalModule(TerminalBase): try: self._exec_cli_command(to_bytes(json.dumps(cmd), errors='surrogate_or_strict')) + prompt = self._get_prompt() + if not prompt.endswith(b'#'): + raise AnsibleConnectionFailure('failed to elevate privilege to enable mode still at prompt [%s]' % prompt) except AnsibleConnectionFailure: - raise AnsibleConnectionFailure('unable to elevate privilege to enable mode') + prompt = self._get_prompt() + raise AnsibleConnectionFailure('unable to elevate privilege to enable mode, at prompt [%s]' % prompt) def on_unbecome(self): prompt = self._get_prompt()