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 })
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
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))