summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGanesh Nalawade <ganesh634@gmail.com>2017-11-01 22:35:47 +0530
committerGitHub <noreply@github.com>2017-11-01 22:35:47 +0530
commitb8ee3bb24fd3079c527785a14366bdcd4ddbcdab (patch)
treea22bbe12c7f8bab1f464a3268fe5a28674eb41ba
parentee210e4d5b1f0a02437851784df12625b2c05b62 (diff)
downloadansible-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.md2
-rw-r--r--lib/ansible/plugins/action/ios.py3
-rw-r--r--lib/ansible/plugins/connection/network_cli.py1
-rw-r--r--test/integration/targets/ios_config/tests/cli/defaults.yaml19
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"