Ejemplo n.º 1
0
 def test_find_free_prefix(self):
     """ We should be able to execute find_free_prefix as read-only user
     """
     v = VRF.get(0)
     p = Prefix.find_free(v, {
         'from-prefix': ['1.3.3.0/24'],
         'prefix_length': 27
     })
Ejemplo n.º 2
0
    def find_free_prefix(self, rt, fromprefix, prefixlength):
        """
        Note: this method simply finds the next free prefix, it does not reserve it
        :param rt: String like '209:123'
        :param fromprefix: String like '1.1.1.0/29'
        :param prefixlength: String like '32'
        :return: Prefix object or none
        """
        retVal = None
        myVrf = None
        try:
            myVrf = self.find_vrf('rt', rt)
        except:
            e = sys.exc_info()[0]
            logging.error("Error: could not find prefix: %s" % e)
            retVal = None
            return retVal

        if myVrf:
            retVal = Prefix.find_free(myVrf, {'from-prefix': [fromprefix], 'prefix_length': prefixlength})
        else:
            retVal = None

        return retVal
Ejemplo n.º 3
0
    def run_task(self):

        a = AuthOptions({'authoritative_source': 'yapt'})

        pynipap.xmlrpc_uri = "http://{0}:{1}@{2}:{3}/XMLRPC".format(
            self.grp_cfg.TASKS.Provision.Ipam.User,
            self.grp_cfg.TASKS.Provision.Ipam.Password,
            self.grp_cfg.TASKS.Provision.Ipam.Address,
            self.grp_cfg.TASKS.Provision.Ipam.Port)

        for prefix in self.grp_cfg.TASKS.Provision.Ipam.Prefixes:

            try:
                p = Prefix.find_free(None, {
                    'from-prefix': [prefix],
                    'prefix_length': 32
                })

            except socket.error as se:
                self.update_task_state(
                    new_task_state=c.TASK_STATE_FAILED,
                    task_state_message=logmsg.IPAM_CONN_ERR.format(
                        se.strerror))
                Tools.emit_log(task_name=self.task_name,
                               sample_device=self.sample_device,
                               message=logmsg.IPAM_CONN_ERR.format(
                                   se.strerror))

                return
            except NipapAuthenticationError as nae:
                self.update_task_state(
                    new_task_state=c.TASK_STATE_FAILED,
                    task_state_message=logmsg.IPAM_CONN_ERR.format(
                        nae.message))
                Tools.emit_log(task_name=self.task_name,
                               sample_device=self.sample_device,
                               message=logmsg.IPAM_CONN_ERR.format(
                                   nae.message))

                return

            if p:
                self.shared[c.TASK_SHARED_IPAM].append(p)
                new_prefix = Prefix()
                new_prefix.prefix = p[0]
                new_prefix.type = 'host'
                new_prefix.description = self.sample_device.deviceSerial

                try:
                    new_prefix.save()
                    self.update_task_state(
                        new_task_state=c.TASK_STATE_DONE,
                        task_state_message=c.TASK_STATE_MSG_DONE)
                    Tools.emit_log(
                        task_name=self.task_name,
                        task_state={
                            'taskState': self.task_state,
                            'taskStateMsg': c.TASK_STATE_MSG_DONE
                        },
                        sample_device=self.sample_device,
                        grp_cfg=self.grp_cfg,
                        shared=self.shared,
                        scope=c.LOGGER_SCOPE_ALL,
                        level=c.LOGGER_LEVEL_INFO,
                        message=logmsg.IPAM_PREFIX_OK.format(prefix))

                except NipapValueError as nve:
                    self.update_task_state(
                        new_task_state=c.TASK_STATE_FAILED,
                        task_state_message=logmsg.IPAM_PREFIX_ERR.format(
                            nve.message))
                    Tools.emit_log(task_name=self.task_name,
                                   sample_device=self.sample_device,
                                   message=logmsg.IPAM_PREFIX_ERR.format(
                                       nve.message))

            else:
                self.update_task_state(
                    new_task_state=c.TASK_STATE_FAILED,
                    task_state_message=logmsg.IPAM_PREFIX_FULL.format(prefix))
                Tools.emit_log(task_name=self.task_name,
                               sample_device=self.sample_device,
                               message=logmsg.IPAM_PREFIX_FULL.format(prefix))
Ejemplo n.º 4
0
 def test_find_free_prefix(self):
     """ We should be able to execute find_free_prefix as read-only user
     """
     v = VRF.get(0)
     p = Prefix.find_free(v, { 'from-prefix': ['1.3.3.0/24'],
         'prefix_length': 27 })