From b8ee3bb24fd3079c527785a14366bdcd4ddbcdab Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Wed, 1 Nov 2017 22:35:47 +0530 Subject: [PATCH] Fix wrong prompt issue for network modules (#32426) (#32442) * Fix wrong prompt issue for network moodules Fixes #31161 Fixes #32416 * Store the device prompt in case of error from remote device * Check for prompt value in ios action plugin * Add integration test * Update Changelog (cherry picked from commit 26583adb582fa3baae4497be4094d920c4771681) --- CHANGELOG.md | 2 ++ lib/ansible/plugins/action/ios.py | 3 ++- lib/ansible/plugins/connection/network_cli.py | 1 + .../ios_config/tests/cli/defaults.yaml | 19 +++++++++++++++++++ 4 files changed, 24 insertions(+), 1 deletion(-) 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"