def get_data(self): if not hasattr(self, "_pv"): pv_id = self.kwargs['pv_id'] try: pv = sysinv.host_pv_get(self.request, pv_id) except Exception: redirect = reverse('horizon:admin:inventory:index') exceptions.handle(self.request, _('Unable to retrieve details for ' 'physical volume "%s".') % pv_id, redirect=redirect) self._pv = pv return self._pv
def allowed(self, request, partition=None): host = self.table.kwargs['host'] PARTITION_IN_USE_STATUS = sysinv.PARTITION_IN_USE_STATUS PARTITION_STATUS_MSG = sysinv.PARTITION_STATUS_MSG if partition: pv = None if partition.type_guid != sysinv.USER_PARTITION_PHYS_VOL: return False if partition.ipv_uuid: pv = sysinv.host_pv_get(request, partition.ipv_uuid) if pv.lvm_vg_name == sysinv.LVG_CINDER_VOLUMES: if (host.personality == "Controller-Active" and host._administrative == 'unlocked'): return False else: return False if (partition.status == PARTITION_STATUS_MSG[PARTITION_IN_USE_STATUS]): if not (pv and pv.lvm_vg_name == sysinv.LVG_CINDER_VOLUMES): return False # Get all the partitions from the same disk. disk_partitions = \ sysinv.host_disk_partition_list(request, host.uuid, partition.idisk_uuid) if partition.device_path: partition_number = re.match('.*?([0-9]+)$', partition.device_path).group(1) for dpart in disk_partitions: dpart_number = re.match('.*?([0-9]+)$', dpart.device_path).group(1) if int(dpart_number) > int(partition_number): return False return True