From fa6464e807ac9fd3b024aa31cf9ee57d72b807d0 Mon Sep 17 00:00:00 2001 From: Peter Sprygada Date: Tue, 29 Mar 2016 07:20:31 -0400 Subject: [PATCH] feature to localize prompt search logic for ios shared module Prompt search logic is now localized to the ios shared module instead of using the common regexps in the shell module. This resolves a number of problems with ios modules functioning properly --- lib/ansible/module_utils/ios.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/lib/ansible/module_utils/ios.py b/lib/ansible/module_utils/ios.py index f8c1e256bd4..e61dd93ca88 100644 --- a/lib/ansible/module_utils/ios.py +++ b/lib/ansible/module_utils/ios.py @@ -29,6 +29,21 @@ NET_COMMON_ARGS = dict( provider=dict() ) +CLI_PROMPTS_RE = [ + re.compile(r"[\r\n]?[\w+\-\.:\/\[\]]+(?:\([^\)]+\)){,3}(?:>|#) ?$"), + re.compile(r"\[\w+\@[\w\-\.]+(?: [^\]])\] ?[>#\$] ?$") +] + +CLI_ERRORS_RE = [ + re.compile(r"% ?Error"), + re.compile(r"% ?Bad secret"), + re.compile(r"invalid input", re.I), + re.compile(r"(?:incomplete|ambiguous) command", re.I), + re.compile(r"connection timed out", re.I), + re.compile(r"[^\r\n]+ not found", re.I), + re.compile(r"'[^']' +returned error code: ?\d+"), +] + def to_list(val): if isinstance(val, (list, tuple)): @@ -52,12 +67,13 @@ class Cli(object): username = self.module.params['username'] password = self.module.params['password'] - self.shell = Shell(kickstart=False) - try: - self.shell.open(host, port=port, username=username, password=password) + self.shell = Shell(kickstart=False, prompts_re=CLI_PROMPTS_RE, + errors_re=CLI_ERRORS_RE) + self.shell.open(host, port=port, username=username, + password=password) except Exception, exc: - msg = 'failed to connecto to %s:%s - %s' % (host, port, str(exc)) + msg = 'failed to connect to %s:%s - %s' % (host, port, str(exc)) self.module.fail_json(msg=msg) def authorize(self):