예제 #1
0
    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
예제 #2
0
    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
예제 #3
0
    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
예제 #4
0
    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