summaryrefslogtreecommitdiffstats
path: root/collections-debian-merged/ansible_collections/cisco/iosxr/plugins/action
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-14 20:03:01 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-14 20:03:01 +0000
commita453ac31f3428614cceb99027f8efbdb9258a40b (patch)
treef61f87408f32a8511cbd91799f9cececb53e0374 /collections-debian-merged/ansible_collections/cisco/iosxr/plugins/action
parentInitial commit. (diff)
downloadansible-upstream.tar.xz
ansible-upstream.zip
Adding upstream version 2.10.7+merged+base+2.10.8+dfsg.upstream/2.10.7+merged+base+2.10.8+dfsgupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'collections-debian-merged/ansible_collections/cisco/iosxr/plugins/action')
-rw-r--r--collections-debian-merged/ansible_collections/cisco/iosxr/plugins/action/__init__.py0
-rw-r--r--collections-debian-merged/ansible_collections/cisco/iosxr/plugins/action/iosxr.py162
2 files changed, 162 insertions, 0 deletions
diff --git a/collections-debian-merged/ansible_collections/cisco/iosxr/plugins/action/__init__.py b/collections-debian-merged/ansible_collections/cisco/iosxr/plugins/action/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/collections-debian-merged/ansible_collections/cisco/iosxr/plugins/action/__init__.py
diff --git a/collections-debian-merged/ansible_collections/cisco/iosxr/plugins/action/iosxr.py b/collections-debian-merged/ansible_collections/cisco/iosxr/plugins/action/iosxr.py
new file mode 100644
index 00000000..2d5819bc
--- /dev/null
+++ b/collections-debian-merged/ansible_collections/cisco/iosxr/plugins/action/iosxr.py
@@ -0,0 +1,162 @@
+#
+# (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.cisco.iosxr.plugins.module_utils.network.iosxr.iosxr import (
+ iosxr_provider_spec,
+)
+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.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 in ["iosxr_config", "config"] else False
+ )
+ force_cli = module_name in (
+ "iosxr_netconf",
+ "iosxr_config",
+ "iosxr_command",
+ "iosxr_facts",
+ )
+ persistent_connection = self._play_context.connection.split(".")[-1]
+ warnings = []
+
+ if self._play_context.connection == "local":
+ provider = load_provider(iosxr_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "cisco.iosxr.iosxr"
+ if force_cli or provider["transport"] == "cli":
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22
+ )
+ elif provider["transport"] == "netconf":
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830
+ )
+ else:
+ return {
+ "failed": True,
+ "msg": "Transport type %s is not valid for this module"
+ % provider["transport"],
+ }
+
+ 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
+
+ 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.network_os = "iosxr"
+ if pc.connection.split(".")[-1] == "netconf":
+ pc.connection = "netconf"
+ else:
+ pc.connection = "network_cli"
+
+ 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
+ ]
+ )
+ elif persistent_connection in ("netconf", "network_cli"):
+ if force_cli and persistent_connection != "network_cli":
+ return {
+ "failed": True,
+ "msg": "Connection type %s is not valid for module %s"
+ % (self._play_context.connection, module_name),
+ }
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ display.warning(
+ "provider is unnecessary when using {0} and will be ignored".format(
+ self._play_context.connection
+ )
+ )
+ del self._task.args["provider"]
+ 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