From 48d3cbfc0f54f4aed393c3aa8e257611955692ac Mon Sep 17 00:00:00 2001 From: Samer Deeb Date: Wed, 6 Dec 2017 06:22:15 -0800 Subject: [PATCH] Adding network_cli support in mlnxos (and removing provider) (#33511) Signed-off-by: Samer Deeb --- .../module_utils/network/mlnxos/mlnxos.py | 27 +----- .../modules/network/mlnxos/mlnxos_command.py | 4 +- .../modules/network/mlnxos/mlnxos_config.py | 4 +- lib/ansible/plugins/action/mlnxos.py | 88 ------------------- lib/ansible/plugins/action/mlnxos_config.py | 2 +- lib/ansible/plugins/terminal/mlnxos.py | 4 +- 6 files changed, 7 insertions(+), 122 deletions(-) delete mode 100644 lib/ansible/plugins/action/mlnxos.py diff --git a/lib/ansible/module_utils/network/mlnxos/mlnxos.py b/lib/ansible/module_utils/network/mlnxos/mlnxos.py index b566f30320b..7c461e63861 100644 --- a/lib/ansible/module_utils/network/mlnxos/mlnxos.py +++ b/lib/ansible/module_utils/network/mlnxos/mlnxos.py @@ -26,36 +26,13 @@ from ansible.module_utils.network.common.utils import to_list, EntityCollection _DEVICE_CONFIGS = {} _CONNECTION = None -mlnxos_provider_spec = { - 'host': dict(), - 'port': dict(type='int'), - 'username': dict(fallback=(env_fallback, - ['ANSIBLE_NET_USERNAME'])), - 'password': dict(fallback=(env_fallback, - ['ANSIBLE_NET_PASSWORD']), no_log=True), - 'ssh_keyfile': dict(fallback=(env_fallback, - ['ANSIBLE_NET_SSH_KEYFILE']), type='path'), - 'authorize': dict(fallback=(env_fallback, - ['ANSIBLE_NET_AUTHORIZE']), type='bool'), - 'auth_pass': dict(fallback=(env_fallback, - ['ANSIBLE_NET_AUTH_PASS']), no_log=True), - 'timeout': dict(type='int') -} -mlnxos_argument_spec = { - 'provider': dict(type='dict', options=mlnxos_provider_spec), -} - -command_spec = { +_COMMAND_SPEC = { 'command': dict(key=True), 'prompt': dict(), 'answer': dict() } -def get_provider_argspec(): - return mlnxos_provider_spec - - def get_connection(module): global _CONNECTION if _CONNECTION: @@ -68,7 +45,7 @@ def to_commands(module, commands): if not isinstance(commands, list): raise AssertionError('argument must be of type ') - transform = EntityCollection(module, command_spec) + transform = EntityCollection(module, _COMMAND_SPEC) commands = transform(commands) return commands diff --git a/lib/ansible/modules/network/mlnxos/mlnxos_command.py b/lib/ansible/modules/network/mlnxos/mlnxos_command.py index cedb01785d6..62faeff0aad 100644 --- a/lib/ansible/modules/network/mlnxos/mlnxos_command.py +++ b/lib/ansible/modules/network/mlnxos/mlnxos_command.py @@ -145,7 +145,7 @@ from ansible.module_utils.network.common.parsing import Conditional from ansible.module_utils.network.common.utils import ComplexList from ansible.module_utils.six import string_types -from ansible.module_utils.network.mlnxos.mlnxos import mlnxos_argument_spec, run_commands +from ansible.module_utils.network.mlnxos.mlnxos import run_commands def to_lines(stdout): @@ -190,8 +190,6 @@ def main(): interval=dict(default=1, type='int') ) - argument_spec.update(mlnxos_argument_spec) - module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) diff --git a/lib/ansible/modules/network/mlnxos/mlnxos_config.py b/lib/ansible/modules/network/mlnxos/mlnxos_config.py index cf6f6820a7d..11ac0ca33cd 100644 --- a/lib/ansible/modules/network/mlnxos/mlnxos_config.py +++ b/lib/ansible/modules/network/mlnxos/mlnxos_config.py @@ -154,7 +154,7 @@ backup_path: from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.network.common.config import NetworkConfig, dumps -from ansible.module_utils.network.mlnxos.mlnxos import mlnxos_argument_spec, get_config, \ +from ansible.module_utils.network.mlnxos.mlnxos import get_config, \ load_config, run_commands @@ -230,8 +230,6 @@ def main(): save=dict(type='bool', default=False), ) - argument_spec.update(mlnxos_argument_spec) - mutually_exclusive = [('lines', 'src'), ] required_if = [('match', 'strict', ['lines']), diff --git a/lib/ansible/plugins/action/mlnxos.py b/lib/ansible/plugins/action/mlnxos.py deleted file mode 100644 index 61db00292e0..00000000000 --- a/lib/ansible/plugins/action/mlnxos.py +++ /dev/null @@ -1,88 +0,0 @@ -# -# (c) 2016 Red Hat Inc. -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import copy -import sys - -from ansible import constants as C -from ansible.module_utils.network.common.utils import load_provider -from ansible.plugins.action.normal import ActionModule as _ActionModule -from ansible.utils.display import Display - -from ansible.module_utils.network.mlnxos.mlnxos import mlnxos_provider_spec - -try: - from __main__ import display -except ImportError: - display = Display() - - -class ActionModule(_ActionModule): - - def run(self, tmp=None, task_vars=None): - - if self._play_context.connection != 'local': - return dict( - failed=True, - msg='invalid connection specified, expected connection=local, ' - 'got %s' % self._play_context.connection - ) - - provider = load_provider(mlnxos_provider_spec, self._task.args) - - pc = copy.deepcopy(self._play_context) - pc.connection = 'network_cli' - pc.network_os = 'mlnxos' - pc.remote_addr = provider['host'] or self._play_context.remote_addr - pc.port = int(provider['port'] or self._play_context.port or 22) - pc.remote_user = provider['username'] or \ - self._play_context.connection_user - pc.password = provider['password'] or self._play_context.password - pc.private_key_file = provider['ssh_keyfile'] or \ - self._play_context.private_key_file - pc.timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT) - pc.become = provider['authorize'] or False - if pc.become: - pc.become_method = 'enable' - pc.become_pass = provider['auth_pass'] - - display.vvv('using connection plugin %s' % - pc.connection, pc.remote_addr) - connection = self._shared_loader_obj.connection_loader.get( - 'persistent', pc, sys.stdin) - - socket_path = connection.run() - display.vvvv('socket_path: %s' % socket_path, pc.remote_addr) - if not socket_path: - return {'failed': True, - 'msg': 'unable to open shell. Please see: ' - 'https://docs.ansible.com/ansible/' - 'network_debug_troubleshooting.html#' - 'unable-to-open-shell'} - - task_vars['ansible_socket'] = socket_path - - if self._play_context.become_method == 'enable': - self._play_context.become = False - self._play_context.become_method = None - - result = super(ActionModule, self).run(tmp, task_vars) - return result diff --git a/lib/ansible/plugins/action/mlnxos_config.py b/lib/ansible/plugins/action/mlnxos_config.py index 751f90c7ceb..b0cbc23ffa3 100644 --- a/lib/ansible/plugins/action/mlnxos_config.py +++ b/lib/ansible/plugins/action/mlnxos_config.py @@ -24,7 +24,7 @@ import re import time import glob -from ansible.plugins.action.mlnxos import ActionModule as _ActionModule +from ansible.plugins.action.normal import ActionModule as _ActionModule from ansible.module_utils._text import to_text from ansible.module_utils.six.moves.urllib.parse import urlsplit diff --git a/lib/ansible/plugins/terminal/mlnxos.py b/lib/ansible/plugins/terminal/mlnxos.py index 836a60532e9..52d630b9fd0 100644 --- a/lib/ansible/plugins/terminal/mlnxos.py +++ b/lib/ansible/plugins/terminal/mlnxos.py @@ -46,7 +46,7 @@ class TerminalModule(TerminalBase): except AnsibleConnectionFailure: raise AnsibleConnectionFailure('unable to set terminal parameters') - def on_authorize(self, passwd=None): + def on_become(self, passwd=None): if self._get_prompt().endswith(b'#'): return @@ -66,7 +66,7 @@ class TerminalModule(TerminalBase): raise AnsibleConnectionFailure( 'unable to elevate privilege to enable mode') - def on_deauthorize(self): + def on_unbecome(self): prompt = self._get_prompt() if prompt is None: # if prompt is None most likely the terminal is hung up at a prompt