Skip to content

[DNM]Local Setup Redirections Fixtures #727

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
11 changes: 11 additions & 0 deletions ansible_collections/ansible.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[defaults]
INVENTORY = ./inventory
collections_path=/home/rothakur/juniperwork/ansible_collections/ansible-junos-stdlib/ansible_collections/
host_key_checking = False
hash_behaviour=merge
no_log = False

[persistent_connection]
command_timeout =300
connect_timeout = 300
connect_retry_timeout = 300
11 changes: 11 additions & 0 deletions ansible_collections/device_facts.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
- name: Test Junos Facts Module
hosts: junos
gather_facts: false
collections:
- juniper.device
tasks:
- name: Gather Junos Facts
junos_facts:
register: junos_facts_output

9 changes: 9 additions & 0 deletions ansible_collections/inventory
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[junos]
<ip>

[junos:vars]
ansible_network_os=junos
ansible_ssh_user=ansible
ansible_ssh_pass=Ansible
ansible_connection=ansible.netcommon.netconf
ansible_network_cli_ssh_type=libssh
9 changes: 8 additions & 1 deletion ansible_collections/juniper/device/meta/runtime.yml
Original file line number Diff line number Diff line change
@@ -1 +1,8 @@
requires_ansible: ">=2.10"
requires_ansible: ">=2.15.0"
plugin_routing:
action:
junos_facts:
redirect: juniper.device.facts
modules:
junos_facts:
redirect: juniper.device.facts
172 changes: 172 additions & 0 deletions ansible_collections/juniper/device/plugins/action/junos.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
#
# (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 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.juniper.device.plugins.module_utils.network.junos.junos import (
junos_provider_spec,
)
import q


display = Display()

CLI_SUPPORTED_MODULES = ["junos_netconf", "junos_ping", "junos_command"]


class ActionModule(ActionNetworkModule):
q("-Inside Junos Action")
def run(self, tmp=None, task_vars=None):
q("Inside Junos Action")

del tmp # tmp no longer has any effect

module_name = self._task.action.split(".")[-1]
self._config_module = True if module_name in ["junos_config", "config"] else False
persistent_connection = self._play_context.connection.split(".")[-1]
warnings = []

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:
result["warnings"].extend(warnings)
else:
result["warnings"] = warnings
return result
Loading