Server IP : 85.214.239.14 / Your IP : 18.219.182.130 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /lib/python3/dist-packages/ansible_collections/cisco/iosxr/plugins/sub_plugins/grpc/ |
Upload File : |
# (c) 2019 Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # from __future__ import absolute_import, division, print_function __metaclass__ = type DOCUMENTATION = """ --- author: Ansible Networking Team grpc : iosxr short_description: gRPC Plugin for IOS XR devices description: - This gRPC plugin provides methods to connect and talk to Cisco IOS XR devices over gRPC protocol. version_added: "" """ import json import os import sys from ansible_collections.ansible.netcommon.plugins.sub_plugins.grpc.base import ( GrpcBase, ensure_connect, ) class Grpc(GrpcBase): def __init__(self, connection): super(Grpc, self).__init__(connection) module_name = "ems_grpc_pb2" module_path = os.path.join( os.path.dirname(os.path.realpath(__file__)), "pb/ems_grpc_pb2.py", ) if sys.version_info[0] == 3 and sys.version_info[1] >= 5: import importlib.util spec = importlib.util.spec_from_file_location(module_name, module_path) self._ems_grpc_pb2 = importlib.util.module_from_spec(spec) spec.loader.exec_module(self._ems_grpc_pb2) elif sys.version_info[0] == 3 and sys.version_info[1] < 5: import importlib.machinery loader = importlib.machinery.SourceFileLoader(module_name, module_path) self._ems_grpc_pb2 = loader.load_module() elif sys.version_info[0] == 2: import imp self._ems_grpc_pb2 = imp.load_source(module_name, module_path) def get_config(self, section=None): stub = self._ems_grpc_pb2.beta_create_gRPCConfigOper_stub( self._connection._channel, ) message = self._ems_grpc_pb2.ConfigGetArgs(yangpathjson=section) responses = stub.GetConfig( message, self._connection._timeout, metadata=self._connection._login_credentials, ) output = {"response": "", "error": ""} for response in responses: output["response"] += response.yangjson output["error"] += response.errors return output def get(self, section=None): stub = self._ems_grpc_pb2.beta_create_gRPCConfigOper_stub( self._connection._channel, ) message = self._ems_grpc_pb2.GetOperArgs(yangpathjson=section) responses = stub.GetOper( message, self._connection._timeout, metadata=self._connection._login_credentials, ) output = {"response": "", "error": ""} for response in responses: output["response"] += response.yangjson output["error"] += response.errors return output @ensure_connect def merge_config(self, path): """Merge grpc call equivalent of PATCH RESTconf call :param data: JSON :type data: str :return: Return the response object :rtype: Response object """ path = json.dumps(path) stub = self._ems_grpc_pb2.beta_create_gRPCConfigOper_stub( self._connection._channel, ) message = self._ems_grpc_pb2.ConfigArgs(yangjson=path) response = stub.MergeConfig( message, self._connection._timeout, metadata=self._connection._login_credentials, ) if response: return response.errors else: return None @ensure_connect def replace_config(self, path): """Replace grpc call equivalent of PATCH RESTconf call :param data: JSON :type data: str :return: Return the response object :rtype: Response object """ path = json.dumps(path) stub = self._ems_grpc_pb2.beta_create_gRPCConfigOper_stub( self._connection._channel, ) message = self._ems_grpc_pb2.ConfigArgs(yangjson=path) response = stub.ReplaceConfig( message, self._connection._timeout, metadata=self._connection._login_credentials, ) if response: return response.errors else: return None @ensure_connect def delete_config(self, path): """Delete grpc call equivalent of PATCH RESTconf call :param data: JSON :type data: str :return: Return the response object :rtype: Response object """ path = json.dumps(path) stub = self._ems_grpc_pb2.beta_create_gRPCConfigOper_stub( self._connection._channel, ) message = self._ems_grpc_pb2.ConfigArgs(yangjson=path) response = stub.DeleteConfig( message, self._connection._timeout, metadata=self._connection._login_credentials, ) if response: return response.errors else: return None @ensure_connect def run_cli(self, command=None, display=None): if command is None: raise ValueError("command value must be provided") output = {"response": "", "error": ""} stub = self._ems_grpc_pb2.beta_create_gRPCExec_stub( self._connection._channel, ) message = self._ems_grpc_pb2.ShowCmdArgs(cli=command) if display == "text": responses = stub.ShowCmdTextOutput( message, self._connection._timeout, metadata=self._connection._login_credentials, ) for response in responses: output["response"] += response.output output["error"] += response.errors else: responses = stub.ShowCmdJSONOutput( message, self._connection._timeout, metadata=self._connection._login_credentials, ) for response in responses: output["response"] += response.jsonoutput output["error"] += response.errors return output @property def server_capabilities(self): capability = dict() capability["display"] = ["json", "text"] capability["data_type"] = ["config", "oper"] capability["supports_commit"] = True capability["supports_cli_command"] = True return capability @ensure_connect def get_capabilities(self): result = dict() result["rpc"] = self.__rpc__ + ["commit", "discard_changes"] result["network_api"] = "ansible.netcommon.grpc" result["server_capabilities"] = self.server_capabilities return result