def _validateManagementPrefix(self, pod, podDict, inventoryData): inventoryDeviceCount = len(inventoryData['spines']) + len(inventoryData['leafs']) prefix = podDict.get('managementPrefix') startingIp = podDict.get('managementStartingIP') mask = podDict.get('managementMask') managementIps = util.getMgmtIps(prefix, startingIp, mask, inventoryDeviceCount) availableIps = len(managementIps) cidr = 32 - int(math.ceil(math.log(inventoryDeviceCount, 2))) if availableIps < inventoryDeviceCount: if startingIp is not None: firstIp = startingIp elif prefix is not None: firstIp = prefix.split('/')[0] raise InsufficientManagementIp("Pod[id='%s', name='%s']: managementPrefix minimum required: %s/%d" % (pod.id, pod.name, firstIp, cidr))
def _allocateManagement(self, session, managementPrefix, managementStartingIP, managementMask, spines, leaves): deviceCount = len(spines)+len(leaves) managementIps = util.getMgmtIps(managementPrefix, managementStartingIP, managementMask, deviceCount) # don't do partial allocation if len(managementIps) == deviceCount: for spine, managementIp in zip(spines, managementIps[:len(spines)]): spine.managementIp = managementIp self._dao.updateObjects(session, spines) # for 2stage and leaf, don' fill in management ip if self.isZtpStaged == False: for leaf, managementIp in zip(leaves, managementIps[len(spines):]): leaf.managementIp = managementIp self._dao.updateObjects(session, leaves)
def _validateManagementPrefix(self, pod, podDict, inventoryData): inventoryDeviceCount = len(inventoryData['spines']) + len(inventoryData['leafs']) managementIps = util.getMgmtIps(podDict.get('managementPrefix'), podDict.get('managementStartingIP'), podDict.get('managementMask'), inventoryDeviceCount) availableIps = len(managementIps) if availableIps < inventoryDeviceCount: raise ValueError("Pod[id='%s', name='%s']: managementPrefix avaiable IPs %d not enough: required %d" % (pod.id, pod.name, availableIps, inventoryDeviceCount))