def destroyDevice(self, device): """ Schedule destruction of a device. """ if device.format.exists and device.format.type: # schedule destruction of any formatting while we're at it self.devicetree.addOperation(OperationDestroyFormat(device)) operation = OperationDestroyDevice(device) self.devicetree.addOperation(operation)
def run(self): if self.dialog is None: return [] while 1: rc = self.dialog.exec_() operations = [] if not rc: if self.isNew: if self.lvs.has_key(self.origrequest.name): del self.lvs[self.origrequest.name] self.destroy() return [] widget = self.dialog.content name = str(widget.name.text()) pvs = widget.selectedPhysicalVolumes msg = sanityCheckVolumeGroupName(name) if msg: self.intf.messageWindow(_("Invalid Volume Group Name"), msg, type="warning") continue origname = self.origrequest.name if origname != name: if name in [vg.name for vg in self.storage.vgs]: self.intf.messageWindow(_("Name in use"), _("The volume group name \"%s\" is " "already in use. Please pick another.") % (name,), type="warning") continue peSize = widget.physicalExtends.itemData(widget.physicalExtends.currentIndex()).toInt()[0] / 1024.0 origlvs = self.origrequest.lvs if not self.origrequest.exists: ctx.logger.debug("non-existing vg -- setting up lvs, pvs, name, peSize") for lv in self.origrequest.lvs: self.origrequest._removeLogicalVolume(lv) for pv in self.origrequest.pvs: if pv not in self.pvs: self.origrequest._removePhysicalVolume(pv) for pv in self.pvs: if pv not in self.origrequest.pvs: self.origrequest._addPhysicalVolume(pv) self.origrequest.name = name self.origrequest.peSize = peSize if self.isNew: operations = [OperationCreateDevice(self.origrequest)] for lv in origlvs: ctx.logger.debug("old lv %s..." % lv.lvname) if not lv.exists or lv.lvname not in self.lvs or \ (not self.lvs[lv.lvname]['exists'] and lv.exists): ctx.logger.debug("removing lv %s" % lv.lvname) if lv.format.type: operations.append(OperationDestroyFormat(lv)) if lv in self.origrequest.lvs: self.origrequest._removeLogicalVolume(lv) operations.append(OperationDestroyDevice(lv)) # schedule creation of all new lvs, their formats, luks devices, &c tempvg = widget.tmpVolumeGroup for lv in tempvg.lvs: ctx.logger.debug("new lv %s" % lv) if not lv.exists: ctx.logger.debug("creating lv %s" % lv.lvname) logicalvolume = LogicalVolume(lv.lvname, self.origrequest, size=lv.size) operations.append(OperationCreateDevice(logicalvolume)) # create the format mountpoint = getattr(lv.format, "mountpoint", None) format = formats.getFormat(lv.format.type, mountpoint=mountpoint, device=logicalvolume.path) operations.append(OperationCreateFormat(logicalvolume, format)) else: ctx.logger.debug("lv %s already exists" % lv.lvname) origlv = widget.getLogicalVolumeByName(lv.lvname) if lv.resizable and lv.targetSize != origlv.size: operations.append(OperationResizeDevice(origlv, lv.targetSize)) if lv.format.exists: ctx.logger.debug("format already exists") usedev = origlv format = lv.format if format == usedev.originalFormat: cancel = [] cancel.extend(self.parent.storage.devicetree.findOperations(type="create", object="format", devid=origlv.id)) cancel.extend(self.parent.storage.devicetree.findOperations(type="destroy", object="format", devid=origlv.id)) for operation in cancel: self.storage.devicetree.cancelOperation(operation) if hasattr(format, "mountpoint"): usedev.format.mountpoint = format.mountpoint if format.migratable and format.migrate and \ not usedev.format.migrate: usedev.format.migrate = format.migrate operations.append(OperationMigrateFormat(usedev)) if format.resizable and lv.format.resizable and \ lv.targetSize != format.targetSize and \ lv.targetSize != lv.currentSize and \ usedev.format.exists: ctx.logger.debug("resizing format on %s to %d" % (usedev.lvname, lv.targetSize)) operations.append(OperationResizeFormat(usedev, lv.targetSize)) elif lv.format.type: ctx.logger.debug("new format: %s" % lv.format.type) if origlv.format.type: operations.append(OperationDestroyFormat(origlv)) mountpoint = getattr(lv.format, "mountpoint", None) format = formats.getFormat(lv.format.type, mountpoint=mountpoint, device=origlv.path) operations.append(OperationCreateFormat(origlv, format)) else: ctx.logger.debug("no format!") break return operations
def formatDevice(self, device, format): """ Schedule formatting of a device. """ self.devicetree.addOperation(OperationDestroyFormat(device)) self.devicetree.addOperation(OperationCreateFormat(device, format))