diff options
author | Ganesh Nalawade <ganesh634@gmail.com> | 2017-11-01 22:35:47 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-01 22:35:47 +0530 |
commit | b8ee3bb24fd3079c527785a14366bdcd4ddbcdab (patch) | |
tree | a22bbe12c7f8bab1f464a3268fe5a28674eb41ba | |
parent | ee210e4d5b1f0a02437851784df12625b2c05b62 (diff) | |
download | ansible-b8ee3bb24fd3079c527785a14366bdcd4ddbcdab.tar.gz |
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)
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | lib/ansible/plugins/action/ios.py | 3 | ||||
-rw-r--r-- | lib/ansible/plugins/connection/network_cli.py | 1 | ||||
-rw-r--r-- | test/integration/targets/ios_config/tests/cli/defaults.yaml | 19 |
4 files changed, 24 insertions, 1 deletions
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) + <a id="2.4.1"></a> 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" |