|
|
|
@ -27,6 +27,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)):
|
|
|
|
|
return list(val)
|
|
|
|
@ -48,9 +63,9 @@ class Cli(object):
|
|
|
|
|
username = self.module.params['username']
|
|
|
|
|
password = self.module.params['password']
|
|
|
|
|
|
|
|
|
|
self.shell = Shell()
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
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))
|
|
|
|
@ -98,7 +113,10 @@ class NetworkModule(AnsibleModule):
|
|
|
|
|
return responses
|
|
|
|
|
|
|
|
|
|
def execute(self, commands, **kwargs):
|
|
|
|
|
return self.connection.send(commands)
|
|
|
|
|
try:
|
|
|
|
|
return self.connection.send(commands)
|
|
|
|
|
except ShellError, exc:
|
|
|
|
|
self.fail_json(msg=exc.message, command=exc.command)
|
|
|
|
|
|
|
|
|
|
def disconnect(self):
|
|
|
|
|
self.connection.close()
|
|
|
|
|