diff options
| author | ansible-zuul[bot] <48994755+ansible-zuul[bot]@users.noreply.github.com> | 2020-01-16 18:56:16 +0000 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-01-16 18:56:16 +0000 | 
| commit | 03addce56012d4bd360e18612d2eb3af04d8f01a (patch) | |
| tree | 9cf59872c2ddc7e99595db4f47c72a7ce08b6c10 /plugins/action/vyos.py | |
| parent | d31b74ba6c74a6e3cdebd80b9eb5272aeb9b0fb4 (diff) | |
| parent | 6b6166151faa3d811ae0ec3010a89e518a26287b (diff) | |
| download | vyos.vyos-03addce56012d4bd360e18612d2eb3af04d8f01a.tar.gz vyos.vyos-03addce56012d4bd360e18612d2eb3af04d8f01a.zip | |
Merge pull request #59 from CaptTrews/master
Updated from network content collector
Reviewed-by: https://github.com/apps/ansible-zuul
Diffstat (limited to 'plugins/action/vyos.py')
| -rw-r--r-- | plugins/action/vyos.py | 129 | 
1 files changed, 129 insertions, 0 deletions
| diff --git a/plugins/action/vyos.py b/plugins/action/vyos.py new file mode 100644 index 00000000..cab2f3fd --- /dev/null +++ b/plugins/action/vyos.py @@ -0,0 +1,129 @@ +# +# (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 <http://www.gnu.org/licenses/>. +# +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +import sys +import copy + +from ansible_collections.ansible.netcommon.plugins.action.network import ( +    ActionModule as ActionNetworkModule, +) +from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import ( +    load_provider, +) +from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.vyos import ( +    vyos_provider_spec, +) +from ansible.utils.display import Display + +display = Display() + + +class ActionModule(ActionNetworkModule): +    def run(self, tmp=None, task_vars=None): +        del tmp  # tmp no longer has any effect + +        module_name = self._task.action.split(".")[-1] +        self._config_module = True if module_name == "vyos_config" else False +        persistent_connection = self._play_context.connection.split(".")[-1] +        warnings = [] + +        if persistent_connection == "network_cli": +            provider = self._task.args.get("provider", {}) +            if any(provider.values()): +                display.warning( +                    "provider is unnecessary when using network_cli and will be ignored" +                ) +                del self._task.args["provider"] +        elif self._play_context.connection == "local": +            provider = load_provider(vyos_provider_spec, self._task.args) +            pc = copy.deepcopy(self._play_context) +            pc.connection = "ansible.netcommon.network_cli" +            pc.network_os = "vyos.vyos.vyos" +            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 +            ) + +            connection = self._shared_loader_obj.connection_loader.get( +                "ansible.netcommon.persistent", +                pc, +                sys.stdin, +                task_uuid=self._task._uuid, +            ) + +            # TODO: Remove below code after ansible minimal is cut out +            if connection is None: +                pc.connection = "network_cli" +                pc.network_os = "vyos" +                connection = self._shared_loader_obj.connection_loader.get( +                    "persistent", pc, sys.stdin, task_uuid=self._task._uuid +                ) + +            display.vvv( +                "using connection plugin %s (was local)" % pc.connection, +                pc.remote_addr, +            ) + +            command_timeout = ( +                int(provider["timeout"]) +                if provider["timeout"] +                else connection.get_option("persistent_command_timeout") +            ) +            connection.set_options( +                direct={"persistent_command_timeout": command_timeout} +            ) + +            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 +            warnings.append( +                [ +                    "connection local support for this module is deprecated and will be removed in version 2.14, use connection %s" +                    % pc.connection +                ] +            ) +        else: +            return { +                "failed": True, +                "msg": "Connection type %s is not valid for this module" +                % self._play_context.connection, +            } + +        result = super(ActionModule, self).run(task_vars=task_vars) +        if warnings: +            if "warnings" in result: +                result["warnings"].extend(warnings) +            else: +                result["warnings"] = warnings +        return result | 
