summaryrefslogtreecommitdiffstats
path: root/ansible_collections/junipernetworks/junos/plugins/action
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-18 05:52:22 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-18 05:52:22 +0000
commit38b7c80217c4e72b1d8988eb1e60bb6e77334114 (patch)
tree356e9fd3762877d07cde52d21e77070aeff7e789 /ansible_collections/junipernetworks/junos/plugins/action
parentAdding upstream version 7.7.0+dfsg. (diff)
downloadansible-38b7c80217c4e72b1d8988eb1e60bb6e77334114.tar.xz
ansible-38b7c80217c4e72b1d8988eb1e60bb6e77334114.zip
Adding upstream version 9.4.0+dfsg.upstream/9.4.0+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ansible_collections/junipernetworks/junos/plugins/action')
-rw-r--r--ansible_collections/junipernetworks/junos/plugins/action/junos.py124
1 files changed, 117 insertions, 7 deletions
diff --git a/ansible_collections/junipernetworks/junos/plugins/action/junos.py b/ansible_collections/junipernetworks/junos/plugins/action/junos.py
index 7c0389a8b..4c5d480af 100644
--- a/ansible_collections/junipernetworks/junos/plugins/action/junos.py
+++ b/ansible_collections/junipernetworks/junos/plugins/action/junos.py
@@ -21,10 +21,20 @@ from __future__ import absolute_import, division, print_function
__metaclass__ = type
+import copy
+import sys
+
from ansible.utils.display import Display
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.junipernetworks.junos.plugins.module_utils.network.junos.junos import (
+ junos_provider_spec,
+)
display = Display()
@@ -41,14 +51,114 @@ class ActionModule(ActionNetworkModule):
persistent_connection = self._play_context.connection.split(".")[-1]
warnings = []
- if persistent_connection not in ("netconf", "network_cli"):
- return {
- "failed": True,
- "msg": "Connection type '%s' is not valid for '%s' module. "
- "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
- % (self._play_context.connection, module_name),
- }
+ if self._play_context.connection == "local":
+ provider = load_provider(junos_provider_spec, self._task.args)
+ pc = copy.deepcopy(self._play_context)
+ pc.network_os = "junipernetworks.junos.junos"
+ pc.remote_addr = provider["host"] or self._play_context.remote_addr
+
+ if provider["transport"] == "cli" and module_name not in CLI_SUPPORTED_MODULES:
+ return {
+ "failed": True,
+ "msg": "Transport type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (provider["transport"], module_name),
+ }
+
+ if module_name == "junos_netconf" or (
+ provider["transport"] == "cli" and module_name == "junos_command"
+ ):
+ pc.connection = "ansible.netcommon.network_cli"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 22,
+ )
+ else:
+ pc.connection = "ansible.netcommon.netconf"
+ pc.port = int(
+ provider["port"] or self._play_context.port or 830,
+ )
+
+ 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.network_os = "junos"
+ 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"):
+ provider = self._task.args.get("provider", {})
+ if any(provider.values()):
+ # for legacy reasons provider value is required for junos_facts(optional) and junos_package
+ # modules as it uses junos_eznc library to connect to remote host
+ if not (
+ module_name == "junos_facts"
+ or module_name == "junos_package"
+ or module_name == "junos_scp"
+ ):
+ display.warning(
+ "provider is unnecessary when using %s and will be ignored"
+ % self._play_context.connection,
+ )
+ del self._task.args["provider"]
+ if (
+ persistent_connection == "network_cli" and module_name not in CLI_SUPPORTED_MODULES
+ ) or (persistent_connection == "netconf" and module_name in CLI_SUPPORTED_MODULES[0:2]):
+ return {
+ "failed": True,
+ "msg": "Connection type '%s' is not valid for '%s' module. "
+ "Please see https://docs.ansible.com/ansible/latest/network/user_guide/platform_junos.html"
+ % (self._play_context.connection, module_name),
+ }
result = super(ActionModule, self).run(task_vars=task_vars)
if warnings:
if "warnings" in result: