def run(self, rpc, lock=False): reply = ET.Element('reply') if not self.connect(): reply.text = 'NetConf Session could not be established\n{%s}' % str( self) return reply parser = NetconfParser(rpc) logging.debug("SEND: \n========\n%s\n========\n" % str(parser)) op = parser.get_operation() data = ET.tostring(parser.get_data(), pretty_print=True) datastore = parser.get_datastore() try: if op == 'get': response = self.handle.get(data).data_xml elif op == 'get-config': response = self.handle.get_config(source=datastore, filter=data).data_xml elif op == 'edit-config': eoption = parser.get_error_option() if lock: with self.handle.locked(datastore): response = self.handle.edit_config( target=datastore, error_option=eoption, config=data).data_xml else: response = self.handle.edit_config(target=datastore, error_option=eoption, config=data).data_xml else: response = self.handle.dispatch(ET.fromstring(data)).data_xml """ reply = 'NETCONF REQUEST:\n' reply += '================\n\n' if op == 'edit-config': reply += 'EDIT-CONFIG LOCK: %s\n\n' % str(lock) reply += str(parser) + '\n\n' reply += 'NETCONF RESPONSE:\n' reply += '================\n\n' reply += ET.tostring(ET.fromstring(response), pretty_print=True) """ reply.append(ET.fromstring(response)) logging.debug("RECEIVE: \n=====\n%s\n=====\n" % response) except RPCError as e: reply.append(e._raw) self.disconnect() return reply
def run(self, rpc, lock=False): reply = ET.Element('reply') if not self.connect(): reply.text = 'NetConf Session could not be established\n{%s}' % str(self) return reply parser = NetconfParser(rpc) logging.debug("SEND: \n========\n%s\n========\n" % str(parser)) op = parser.get_operation() data = ET.tostring(parser.get_data(), pretty_print=True) datastore = parser.get_datastore() try: if op == 'get': response = self.handle.get(data).xml elif op == 'get-config': response = self.handle.get_config(source=datastore, filter=data).xml elif op == 'edit-config': eoption = parser.get_error_option() if lock: with self.handle.locked(datastore): response = self.handle.edit_config(target=datastore, error_option=eoption, config=data).xml else: response = self.handle.edit_config(target=datastore, error_option=eoption, config=data).xml else: response = self.handle.dispatch(ET.fromstring(data)).xml """ reply = 'NETCONF REQUEST:\n' reply += '================\n\n' if op == 'edit-config': reply += 'EDIT-CONFIG LOCK: %s\n\n' % str(lock) reply += str(parser) + '\n\n' reply += 'NETCONF RESPONSE:\n' reply += '================\n\n' reply += ET.tostring(ET.fromstring(response), pretty_print=True) """ reply.append(ET.fromstring(response)) logging.debug("RECEIVE: \n=====\n%s\n=====\n" % response) except RPCError as e: reply.append(e._raw) self.disconnect() return reply
def gen_ncclient_script(username, payload): """ Generate Netconf / Restconf RPC """ payload = payload.replace('<metadata>', '') payload = payload.replace('</metadata>', '') _, device, fmt, lock, rpc = Adapter.parse_request(payload) if fmt == 'xpath' and rpc == '': rpc = Adapter.gen_rpc(username, payload) if rpc is None: logging.error('gen_script: Invalid RPC Generated') return None parser = NetconfParser(rpc) op = parser.get_operation() data = ET.tostring(parser.get_data(), pretty_print=True) datastore = parser.get_datastore() # setup template args args = dict() args['data'] = data.strip() args['datastore'] = datastore args['host'] = device.get('host', '') args['port'] = device.get('port', '830') args['user'] = device.get('user', '') args['passwd'] = device.get('passwd', '') args['platform'] = device.get('platform', '') if not args['host']: args['host'] = '<address>' if not args['user']: args['user'] = '******' if not args['passwd']: args['passwd'] = '<password>' if not args['platform']: args['platform'] = 'csr' if op == 'get': args['nccall'] = 'm.get(payload).xml' elif op == 'get-config': args['nccall'] = "m.get_config(source='%s', filter=payload).xml" % datastore elif op == 'edit-config': e_opt = parser.get_error_option() if e_opt is None or e_opt == '': args['nccall'] = "m.edit_config(target='%s', config=payload).xml" % datastore else: args['nccall'] = "m.edit_config(target='%s', error_option='%s', config=payload).xml" % (datastore, e_opt) args['lock'] = lock else: args['nccall'] = "m.dispatch(ET.fromstring(payload)).xml" # generate script rendered = render_to_string('pyscript.py', args) script = ET.Element('script') script.text = ET.CDATA(rendered) return script
def gen_ncclient_script(username, payload): """ Generate Netconf / Restconf RPC """ payload = payload.replace('<metadata>', '') payload = payload.replace('</metadata>', '') _, device, fmt, lock, rpc = Adapter.parse_request(payload) if fmt == 'xpath' and rpc == '': rpc = Adapter.gen_rpc(username, payload) if rpc is None: logging.error('gen_script: Invalid RPC Generated') return None parser = NetconfParser(rpc) op = parser.get_operation() data = ET.tostring(parser.get_data(), pretty_print=True) datastore = parser.get_datastore() # setup template args args = dict() args['data'] = data.strip() args['datastore'] = datastore args['host'] = device.get('host', '') args['port'] = device.get('port', '830') args['user'] = device.get('user', '') args['passwd'] = device.get('passwd', '') args['platform'] = device.get('platform', '') if not args['host']: args['host'] = '<address>' if not args['user']: args['user'] = '******' if not args['passwd']: args['passwd'] = '<password>' if not args['platform']: args['platform'] = 'csr' if op == 'get': args['nccall'] = 'm.get(payload).xml' elif op == 'get-config': args[ 'nccall'] = "m.get_config(source='%s', filter=payload).xml" % datastore elif op == 'edit-config': e_opt = parser.get_error_option() if e_opt is None or e_opt == '': args[ 'nccall'] = "m.edit_config(target='%s', config=payload).xml" % datastore else: args[ 'nccall'] = "m.edit_config(target='%s', error_option='%s', config=payload).xml" % ( datastore, e_opt) args['lock'] = lock else: args['nccall'] = "m.dispatch(ET.fromstring(payload)).xml" # generate script rendered = render_to_string('pyscript.py', args) script = ET.Element('script') script.text = ET.CDATA(rendered) return script