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 26583adb58)
This commit is contained in:
Ganesh Nalawade 2017-11-01 22:35:47 +05:30 committed by GitHub
parent ee210e4d5b
commit b8ee3bb24f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 24 additions and 1 deletions

View file

@ -112,6 +112,8 @@ Ansible Changes By Release
(https://github.com/ansible/ansible/pull/32321) (https://github.com/ansible/ansible/pull/32321)
* Fix ios_logging module issue where facility is being deleted along with host: * Fix ios_logging module issue where facility is being deleted along with host:
(https://github.com/ansible/ansible/pull/32234) (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> <a id="2.4.1"></a>

View file

@ -73,9 +73,10 @@ class ActionModule(_ActionModule):
# make sure we are in the right cli context which should be # make sure we are in the right cli context which should be
# enable mode and not config module # enable mode and not config module
rc, out, err = connection.exec_command('prompt()') 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) display.vvvv('wrong context, sending exit to device', self._play_context.remote_addr)
connection.exec_command('exit') connection.exec_command('exit')
rc, out, err = connection.exec_command('prompt()')
task_vars['ansible_socket'] = socket_path task_vars['ansible_socket'] = socket_path

View file

@ -248,6 +248,7 @@ class Connection(Rpc, _Connection):
match = regex.search(response) match = regex.search(response)
if match: if match:
errored_response = response errored_response = response
self._matched_prompt = match.group()
break break
if not is_error_message: if not is_error_message:

View file

@ -40,4 +40,23 @@
- "result.changed == false" - "result.changed == false"
- "result.updates is not defined" - "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" - debug: msg="END cli/defaults.yaml"