diff --git a/CHANGELOG.md b/CHANGELOG.md index ad8d5d1aa5..a6c5b20746 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -112,6 +112,8 @@ Ansible Changes By Release (https://github.com/ansible/ansible/pull/32321) * Fix ios_logging module issue where facility is being deleted along with host: (https://github.com/ansible/ansible/pull/32234) +* Fix wrong prompt issue for network modules (https://github.com/ansible/ansible/pull/32426) + diff --git a/lib/ansible/plugins/action/ios.py b/lib/ansible/plugins/action/ios.py index 070e641c26..d578140f55 100644 --- a/lib/ansible/plugins/action/ios.py +++ b/lib/ansible/plugins/action/ios.py @@ -73,9 +73,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"