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):