From 58d54799b86a1b726b314e54b8b1faf94b29a2bb Mon Sep 17 00:00:00 2001 From: Peter Sprygada Date: Tue, 30 Jan 2018 12:27:48 -0500 Subject: [PATCH] exposes rpc method to plugin (#35507) The rpc method should be exposed to the modules over the connection rpc mechanism. This fix will expose the rpc method to call generalized rpc endpoints on remote devices --- lib/ansible/plugins/netconf/__init__.py | 13 ++++++++++++- lib/ansible/plugins/netconf/junos.py | 6 +----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/lib/ansible/plugins/netconf/__init__.py b/lib/ansible/plugins/netconf/__init__.py index 99d7552ff50..9605877642d 100644 --- a/lib/ansible/plugins/netconf/__init__.py +++ b/lib/ansible/plugins/netconf/__init__.py @@ -24,10 +24,11 @@ from functools import wraps from ansible.errors import AnsibleError from ansible.module_utils.six import with_metaclass +from ansible.module_utils._text import to_bytes try: from ncclient.operations import RPCError - from ncclient.xml_ import to_xml + from ncclient.xml_ import to_xml, to_ele except ImportError: raise AnsibleError("ncclient is not installed") @@ -96,6 +97,16 @@ class NetconfBase(with_metaclass(ABCMeta, object)): self._connection = connection self.m = self._connection._manager + @ensure_connected + def rpc(self, name): + """RPC to be execute on remote device + :name: Name of rpc in string format""" + try: + obj = to_ele(to_bytes(name, errors='surrogate_or_strict')) + return self.m.rpc(obj).data_xml + except RPCError as exc: + raise Exception(to_xml(exc.xml)) + @ensure_connected def get_config(self, *args, **kwargs): """Retrieve all or part of a specified configuration. diff --git a/lib/ansible/plugins/netconf/junos.py b/lib/ansible/plugins/netconf/junos.py index 1c29f852537..504e10ce0b0 100644 --- a/lib/ansible/plugins/netconf/junos.py +++ b/lib/ansible/plugins/netconf/junos.py @@ -63,11 +63,7 @@ class Netconf(NetconfBase): def execute_rpc(self, name): """RPC to be execute on remote device :name: Name of rpc in string format""" - try: - obj = to_ele(to_bytes(name, errors='surrogate_or_strict')) - return self.m.rpc(obj).data_xml - except RPCError as exc: - raise Exception(to_xml(exc.xml)) + return self.rpc(name) @ensure_connected def load_configuration(self, *args, **kwargs):