mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
removes Cli and Config objects from network into separate modules
This completes the refactor of Cli and Config moving them into separate modules netcmd and netcfg respectively.
This commit is contained in:
parent
7cd682cc1a
commit
f53dbec55a
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