diff --git a/lib/ansible/plugins/action/ios.py b/lib/ansible/plugins/action/ios.py index 1da9fdbc0e..d17a009750 100644 --- a/lib/ansible/plugins/action/ios.py +++ b/lib/ansible/plugins/action/ios.py @@ -72,9 +72,10 @@ class ActionModule(_ActionModule): # make sure we are in the right cli context which should be # enable mode and not config module rc, out, err = connection.exec_command('prompt()') - if str(out).strip().endswith(')#'): + while str(out).strip().endswith(')#'): display.vvvv('wrong context, sending exit to device', self._play_context.remote_addr) connection.exec_command('exit') + rc, out, err = connection.exec_command('prompt()') task_vars['ansible_socket'] = socket_path diff --git a/lib/ansible/plugins/connection/network_cli.py b/lib/ansible/plugins/connection/network_cli.py index 3fc730a225..9ac535558d 100644 --- a/lib/ansible/plugins/connection/network_cli.py +++ b/lib/ansible/plugins/connection/network_cli.py @@ -248,6 +248,7 @@ class Connection(Rpc, _Connection): match = regex.search(response) if match: errored_response = response + self._matched_prompt = match.group() break if not is_error_message: diff --git a/test/integration/targets/ios_config/tests/cli/defaults.yaml b/test/integration/targets/ios_config/tests/cli/defaults.yaml index 9ff5d84712..eaea5588dd 100644 --- a/test/integration/targets/ios_config/tests/cli/defaults.yaml +++ b/test/integration/targets/ios_config/tests/cli/defaults.yaml @@ -40,4 +40,23 @@ - "result.changed == false" - "result.updates is not defined" +- name: Check device is in proper prompt after error + ios_config: + lines: + - mac-address-table notification mac-move + authorize: yes + ignore_errors: yes + +- name: show interfaces brief to ensure deivce goes to valid prompt + ios_command: + commands: + - show interfaces + authorize: yes + register: result + +- assert: + that: + - "result.changed == false" + - "result.stdout is defined" + - debug: msg="END cli/defaults.yaml"