From 26583adb582fa3baae4497be4094d920c4771681 Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Wed, 1 Nov 2017 19:38:19 +0530 Subject: [PATCH] Fix wrong prompt issue for network modules (#32426) * 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 --- lib/ansible/plugins/action/ios.py | 3 ++- lib/ansible/plugins/connection/network_cli.py | 1 + .../ios_config/tests/cli/defaults.yaml | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/ansible/plugins/action/ios.py b/lib/ansible/plugins/action/ios.py index 1da9fdbc0ee..d17a0097501 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 3fc730a2253..9ac535558d6 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 9ff5d84712a..eaea5588ddb 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"