From edc3507c989a886e60bec912a520caa3c7c5e57c Mon Sep 17 00:00:00 2001 From: Peter Sprygada Date: Thu, 10 Aug 2017 17:57:32 -0400 Subject: [PATCH] restore the ability to issue commands over junos cli (#28025) * restore the ability to issue commands over junos cli * add warn message for invalid arguments * fix issue when checking if provider transport is set --- lib/ansible/modules/network/junos/junos_command.py | 13 +++++++++++++ lib/ansible/plugins/action/junos.py | 4 +++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/ansible/modules/network/junos/junos_command.py b/lib/ansible/modules/network/junos/junos_command.py index 86c820fd7e..af8a341116 100644 --- a/lib/ansible/modules/network/junos/junos_command.py +++ b/lib/ansible/modules/network/junos/junos_command.py @@ -174,6 +174,7 @@ from ansible.module_utils.junos import junos_argument_spec, check_args, get_conf from ansible.module_utils.netcli import Conditional, FailedConditionalError from ansible.module_utils.netconf import send_request from ansible.module_utils.six import string_types, iteritems +from ansible.module_utils.connection import Connection try: from lxml.etree import Element, SubElement, tostring @@ -364,6 +365,18 @@ def main(): warnings = list() check_args(module, warnings) + if module.params['provider'] and module.params['provider']['transport'] == 'cli': + if any((module.params['wait_for'], module.params['match'], module.params['rpcs'])): + module.warn('arguments wait_for, match, rpcs are not supported when using transport=cli') + commands = module.params['commands'] + conn = Connection(module) + output = list() + for cmd in commands: + output.append(conn.get(cmd)) + lines = [out.split('\n') for out in output] + result = {'changed': False, 'stdout': output, 'stdout_lines': lines} + module.exit_json(**result) + items = list() items.extend(parse_commands(module, warnings)) items.extend(parse_rpcs(module)) diff --git a/lib/ansible/plugins/action/junos.py b/lib/ansible/plugins/action/junos.py index fd3e709e05..d55908e40a 100644 --- a/lib/ansible/plugins/action/junos.py +++ b/lib/ansible/plugins/action/junos.py @@ -28,6 +28,7 @@ from ansible.module_utils.junos import junos_argument_spec from ansible.module_utils.six import iteritems from ansible.plugins import connection_loader, module_loader from ansible.plugins.action.normal import ActionModule as _ActionModule +from ansible.module_utils.connection import Connection try: from __main__ import display @@ -59,9 +60,10 @@ class ActionModule(_ActionModule): pc.remote_addr = provider['host'] or self._play_context.remote_addr - if self._task.action == 'junos_netconf': + if self._task.action == 'junos_netconf' or (provider['transport'] == 'cli' and self._task.action == 'junos_command'): pc.connection = 'network_cli' pc.port = int(provider['port'] or self._play_context.port or 22) + else: pc.connection = 'netconf' pc.port = int(provider['port'] or self._play_context.port or 830)