Merge pull request #17163 from privateip/network
removes Cli and Config objects from network into separate modules
This commit is contained in:
commit
152fb29337
1 changed files with 9 additions and 82 deletions
|
@ -30,18 +30,24 @@ import itertools
|
|||
|
||||
from ansible.module_utils.basic import AnsibleModule
|
||||
from ansible.module_utils.basic import env_fallback, get_exception
|
||||
from ansible.module_utils.netcmd import Cli, Command
|
||||
from ansible.module_utils.netcfg import Config
|
||||
from ansible.module_utils.shell import Shell, ShellError, HAS_PARAMIKO
|
||||
|
||||
NET_TRANSPORT_ARGS = dict(
|
||||
host=dict(required=True),
|
||||
port=dict(type='int'),
|
||||
|
||||
username=dict(fallback=(env_fallback, ['ANSIBLE_NET_USERNAME'])),
|
||||
password=dict(no_log=True, fallback=(env_fallback, ['ANSIBLE_NET_PASSWORD'])),
|
||||
ssh_keyfile=dict(fallback=(env_fallback, ['ANSIBLE_NET_SSH_KEYFILE']), type='path'),
|
||||
|
||||
authorize=dict(default=False, fallback=(env_fallback, ['ANSIBLE_NET_AUTHORIZE']), type='bool'),
|
||||
auth_pass=dict(no_log=True, fallback=(env_fallback, ['ANSIBLE_NET_AUTH_PASS'])),
|
||||
|
||||
provider=dict(type='dict'),
|
||||
transport=dict(choices=list()),
|
||||
|
||||
timeout=dict(default=10, type='int')
|
||||
)
|
||||
|
||||
|
@ -66,86 +72,6 @@ class ModuleStub(object):
|
|||
self.params[key] = value.get('default')
|
||||
self.fail_json = fail_json
|
||||
|
||||
class Command(object):
|
||||
|
||||
def __init__(self, command, output=None, prompt=None, response=None,
|
||||
is_reboot=False, delay=0):
|
||||
|
||||
self.command = command
|
||||
self.output = output
|
||||
self.prompt = prompt
|
||||
self.response = response
|
||||
self.is_reboot = is_reboot
|
||||
self.delay = delay
|
||||
|
||||
def __str__(self):
|
||||
return self.command
|
||||
|
||||
class Cli(object):
|
||||
|
||||
def __init__(self, connection):
|
||||
self.connection = connection
|
||||
self.default_output = connection.default_output or 'text'
|
||||
self.commands = list()
|
||||
|
||||
def __call__(self, commands, output=None):
|
||||
commands = self.to_command(commands, output)
|
||||
return self.connection.run_commands(commands)
|
||||
|
||||
def to_command(self, commands, output=None):
|
||||
output = output or self.default_output
|
||||
objects = list()
|
||||
for cmd in to_list(commands):
|
||||
if not isinstance(cmd, Command):
|
||||
cmd = Command(cmd, output)
|
||||
objects.append(cmd)
|
||||
return objects
|
||||
|
||||
def add_commands(self, commands, output=None):
|
||||
commands = self.to_command(commands, output)
|
||||
self.commands.extend(commands)
|
||||
|
||||
def run_commands(self):
|
||||
responses = self.connection.run_commands(self.commands)
|
||||
for resp, cmd in itertools.izip(responses, self.commands):
|
||||
cmd.response = resp
|
||||
return responses
|
||||
|
||||
class Config(object):
|
||||
|
||||
def __init__(self, connection):
|
||||
self.connection = connection
|
||||
|
||||
def invoke(self, method, *args, **kwargs):
|
||||
try:
|
||||
return method(*args, **kwargs)
|
||||
except AttributeError:
|
||||
exc = get_exception()
|
||||
raise NetworkError('undefined method "%s"' % method.__name__, exc=str(exc))
|
||||
except NotImplementedError:
|
||||
raise NetworkError('method not supported "%s"' % method.__name__)
|
||||
|
||||
def __call__(self, commands):
|
||||
lines = to_list(commands)
|
||||
return self.invoke(self.connection.configure, commands)
|
||||
|
||||
def load_config(self, commands, **kwargs):
|
||||
commands = to_list(commands)
|
||||
return self.invoke(self.connection.load_config, commands, **kwargs)
|
||||
|
||||
def get_config(self, **kwargs):
|
||||
return self.invoke(self.connection.get_config, **kwargs)
|
||||
|
||||
def commit_config(self, **kwargs):
|
||||
return self.invoke(self.connection.commit_config, **kwargs)
|
||||
|
||||
def abort_config(self, **kwargs):
|
||||
return self.invoke(self.connection.abort_config, **kwargs)
|
||||
|
||||
def save_config(self):
|
||||
return self.invoke(self.connection.save_config)
|
||||
|
||||
|
||||
class NetworkError(Exception):
|
||||
|
||||
def __init__(self, msg, **kwargs):
|
||||
|
@ -234,7 +160,6 @@ class NetworkModule(AnsibleModule):
|
|||
exc = get_exception()
|
||||
self.fail_json(msg=exc.message)
|
||||
|
||||
|
||||
class NetCli(object):
|
||||
"""Basic paramiko-based ssh transport any NetworkModule can use."""
|
||||
|
||||
|
@ -274,9 +199,11 @@ class NetCli(object):
|
|||
msg='failed to connect to %s:%s' % (host, port), exc=str(exc)
|
||||
)
|
||||
|
||||
self._connected = True
|
||||
|
||||
def disconnect(self, **kwargs):
|
||||
self._connected = False
|
||||
self.shell.close()
|
||||
self._connected = False
|
||||
|
||||
def authorize(self, params, **kwargs):
|
||||
passwd = params['auth_pass']
|
||||
|
|
Loading…
Reference in a new issue