def preCommitFixup(self, *args, **kwargs): """ Re-get self.partedPartition from the original disklabel. """ if not self.exists: return # find the correct partition on the original parted.Disk since the # name/number we're now using may no longer match _disklabel = self.disk.originalFormat if self.isExtended: # getPartitionBySector doesn't work on extended partitions _partition = _disklabel.extendedPartition ctx.logger.debug( "extended lookup found partition %s" % devicePathToName(getattr(_partition, "path", None))) else: # lookup the partition by sector to avoid the renumbering # nonsense entirely _sector = self.partedPartition.geometry.start _partition = _disklabel.partedDisk.getPartitionBySector(_sector) ctx.logger.debug( "sector-based lookup found partition %s" % devicePathToName(getattr(_partition, "path", None))) self.partedPartition = _partition
def preCommitFixup(self, *args, **kwargs): """ Re-get self.partedPartition from the original disklabel. """ if not self.exists: return # find the correct partition on the original parted.Disk since the # name/number we're now using may no longer match _disklabel = self.disk.originalFormat if self.isExtended: # getPartitionBySector doesn't work on extended partitions _partition = _disklabel.extendedPartition ctx.logger.debug("extended lookup found partition %s" % devicePathToName(getattr(_partition, "path", None))) else: # lookup the partition by sector to avoid the renumbering # nonsense entirely _sector = self.partedPartition.geometry.start _partition = _disklabel.partedDisk.getPartitionBySector(_sector) ctx.logger.debug("sector-based lookup found partition %s" % devicePathToName(getattr(_partition, "path", None))) self.partedPartition = _partition
def populate(self): # Clear device tree self.ui.deviceTree.clear() # first do LVM vgs = self.storage.vgs if vgs: volumeGroupsItem = DeviceTreeItem(self.ui.deviceTree) volumeGroupsItem.setName(_("Volume Groups")) for vg in vgs: volumeGroupItem = DeviceTreeItem(volumeGroupsItem) self.addDevice(vg, volumeGroupItem) volumeGroupItem.setType("") for lv in vg.lvs: logicalVolumeItem = DeviceTreeItem(volumeGroupItem) self.addDevice(lv, logicalVolumeItem) # We add a row for the VG free space. if vg.freeSpace > 0: freeLogicalVolumeItem = DeviceTreeItem(volumeGroupItem) freeLogicalVolumeItem.setName(_("Free")) freeLogicalVolumeItem.setSize("%Ld" % vg.freeSpace) freeLogicalVolumeItem.setDevice(None) freeLogicalVolumeItem.setMountpoint("") # handle RAID next raidarrays = self.storage.raidArrays if raidarrays: raidArraysItem = DeviceTreeItem(self.ui.deviceTree) raidArraysItem.setName(_("Raid Arrays")) for array in raidarrays: raidArrayItem = DeviceTreeItem(raidArraysItem) self.addDevice(array, raidArrayItem) # now normal partitions disks = self.storage.partitioned # also include unpartitioned disks that aren't mpath or biosraid whole = filter(lambda d: not d.partitioned and not d.format.hidden, self.storage.disks) disks.extend(whole) disks.sort(key=lambda d: d.name) # Disk&Partitions drivesItem = DeviceTreeItem(self.ui.deviceTree) drivesItem.setName(_("Hard Drives")) for disk in disks: diskItem = DeviceTreeItem(drivesItem) diskItem.setName("%s - %s" % (disk.model, disk.name)) #self.ui.deviceTree.expandItem(diskItem) if disk.partitioned: partition = disk.format.firstPartition extendedItem = None while partition: if partition.type & parted.PARTITION_METADATA: partition = partition.nextPartition() continue partName = devicePathToName(partition.getDeviceNodeName()) device = self.storage.devicetree.getDeviceByName(partName) if not device and not partition.type & parted.PARTITION_FREESPACE: ctx.logger.debug("can't find partition %s in device tree" % partName) # Force partitions tree item not to be less than 12 MB if partition.getSize(unit="MB") <= 12.0: if not partition.active or not partition.getFlag(parted.PARTITION_BOOT): partition = partition.nextPartition() continue if device and device.isExtended: if extendedItem: raise RuntimeError, _("Can't handle more than " "one extended partition per disk") extendedItem = partItem = DeviceTreeItem(diskItem) partitionItem = extendedItem elif device and device.isLogical: if not extendedItem: raise RuntimeError, _("Crossed logical partition before extended") partitionItem = DeviceTreeItem(extendedItem) else: # Free space item if partition.type & parted.PARTITION_LOGICAL: partitionItem = DeviceTreeItem(extendedItem) else: partitionItem = DeviceTreeItem(diskItem) if device and not device.isExtended: self.addDevice(device, partitionItem) else: # either extended or freespace if partition.type & parted.PARTITION_FREESPACE: deviceName = _("Free") device = partition deviceType = "" else: deviceName = device.name deviceType = _("Extended") partitionItem.setName(deviceName) partitionItem.setType(deviceType) size = partition.getSize(unit="MB") if size < 1.0: size = "< 1" else: size = "%Ld" % (size) partitionItem.setSize(size) partitionItem.setDevice(device) partition = partition.nextPartition() else: self.addDevice(disk, diskItem) #Expands all item in selected device tree item for index in range(self.ui.deviceTree.topLevelItemCount()): self.ui.deviceTree.topLevelItem(index).setExpanded(True) childItem = self.ui.deviceTree.topLevelItem(index) for childIndex in range(childItem.childCount()): childItem.child(childIndex).setExpanded(True)
def updateName(self): if self.partedPartition is None: self._name = self.req_name else: self._name = \ devicePathToName(self.partedPartition.getDeviceNodeName())
def populate(self): # Clear device tree self.ui.deviceTree.clear() # first do LVM vgs = self.storage.vgs if vgs: volumeGroupsItem = DeviceTreeItem(self.ui.deviceTree) volumeGroupsItem.setName(_("Volume Groups")) volumeGroupsItem.setExpanded(True) for vg in vgs: volumeGroupItem = DeviceTreeItem(volumeGroupsItem) self.addDevice(vg, volumeGroupItem) volumeGroupItem.setType("") for lv in vg.lvs: logicalVolumeItem = DeviceTreeItem(volumeGroupItem) self.addDevice(lv, logicalVolumeItem) # We add a row for the VG free space. if vg.freeSpace > 0: freeLogicalVolumeItem = DeviceTreeItem(volumeGroupItem) freeLogicalVolumeItem.setName(_("Free")) freeLogicalVolumeItem.setSize("%Ld" % vg.freeSpace) freeLogicalVolumeItem.setDevice(None) freeLogicalVolumeItem.setMountpoint("") # handle RAID next raidarrays = self.storage.raidArrays if raidarrays: raidArraysItem = DeviceTreeItem(self.ui.deviceTree) raidArraysItem.setName(_("Raid Arrays")) raidArraysItem.setExpanded(True) for array in raidarrays: raidArrayItem = DeviceTreeItem(raidArraysItem) self.addDevice(array, raidArrayItem) # now normal partitions disks = self.storage.partitioned # also include unpartitioned disks that aren't mpath or biosraid whole = filter(lambda d: not d.partitioned and not d.format.hidden, self.storage.disks) disks.extend(whole) disks.sort(key=lambda d: d.name) # Disk&Partitions drivesItem = DeviceTreeItem(self.ui.deviceTree) drivesItem.setName(_("Hard Drives")) drivesItem.setExpanded(True) for disk in disks: diskItem = DeviceTreeItem(drivesItem) diskItem.setExpanded(True) diskItem.setName("%s - %s" % (disk.model, disk.name)) #self.ui.deviceTree.expandItem(diskItem) if disk.partitioned: partition = disk.format.firstPartition extendedItem = None while partition: if partition.type & parted.PARTITION_METADATA: partition = partition.nextPartition() continue partName = devicePathToName(partition.getDeviceNodeName()) device = self.storage.devicetree.getDeviceByName(partName) if not device and not partition.type & parted.PARTITION_FREESPACE: ctx.logger.debug( "can't find partition %s in device tree" % partName) # Force partitions tree item not to be less than 12 MB if partition.getSize(unit="MB") <= 12.0: if not partition.active or not partition.getFlag( parted.PARTITION_BOOT): partition = partition.nextPartition() continue if device and device.isExtended: if extendedItem: raise RuntimeError, _( "Can't handle more than " "one extended partition per disk") extendedItem = partItem = DeviceTreeItem(diskItem) partitionItem = extendedItem elif device and device.isLogical: if not extendedItem: raise RuntimeError, _( "Crossed logical partition before extended") partitionItem = DeviceTreeItem(extendedItem) else: # Free space item if partition.type & parted.PARTITION_LOGICAL: partitionItem = DeviceTreeItem(extendedItem) else: partitionItem = DeviceTreeItem(diskItem) if device and not device.isExtended: self.addDevice(device, partitionItem) else: # either extended or freespace if partition.type & parted.PARTITION_FREESPACE: deviceName = _("Free") device = partition deviceType = "" else: deviceName = device.name deviceType = _("Extended") partitionItem.setName(deviceName) partitionItem.setType(deviceType) size = partition.getSize(unit="MB") if size < 1.0: size = "< 1" else: size = "%Ld" % (size) partitionItem.setSize(size) partitionItem.setDevice(device) partition = partition.nextPartition() else: self.addDevice(disk, diskItem)