|
|
|
@ -194,25 +194,44 @@ class AutoPartition:
|
|
|
|
|
pvRemoveProg = getProgPath('/sbin/pvremove')
|
|
|
|
|
lvRemoveProg = getProgPath('/sbin/lvremove')
|
|
|
|
|
disks = dv.Select('os_disk_dev',where='os_disk_parent',_in=devices)
|
|
|
|
|
failed = False
|
|
|
|
|
for group, pair in groupby(dv.Select(['os_lvm_vgname','os_lvm_lvname'],
|
|
|
|
|
where='os_lvm_pvname',_in=disks),
|
|
|
|
|
key=operator.itemgetter(0)):
|
|
|
|
|
where='os_lvm_pvname',_in=disks,
|
|
|
|
|
sort="ASC/1"),
|
|
|
|
|
operator.itemgetter(0)):
|
|
|
|
|
for vgname,lvname in pair:
|
|
|
|
|
process(lvRemoveProg,"%s/%s"%(vgname,lvname),"-f").success()
|
|
|
|
|
process(vgRemoveProg,group,"-f").success()
|
|
|
|
|
failed |= process(lvRemoveProg,
|
|
|
|
|
"%s/%s"%(vgname,lvname),"-f").failed()
|
|
|
|
|
failed |= process(vgRemoveProg,group,"-f").failed()
|
|
|
|
|
for pvname in list(set(disks)&set(dv.Get('os_lvm_pvname'))):
|
|
|
|
|
process(pvRemoveProg,pvname,"-ffy")
|
|
|
|
|
failed |= process(pvRemoveProg,pvname,"-ffy").failed()
|
|
|
|
|
return not failed
|
|
|
|
|
|
|
|
|
|
def clearRaid(self,devices):
|
|
|
|
|
def clearRaid(self,devices,dv):
|
|
|
|
|
"""
|
|
|
|
|
Remove raid physical volumes from devices
|
|
|
|
|
Remove raid from devices
|
|
|
|
|
"""
|
|
|
|
|
mdAdmProg = getProgPath('/sbin/mdadm')
|
|
|
|
|
failed = False
|
|
|
|
|
for disktype,grouped in groupby(
|
|
|
|
|
dv.Select(['os_disk_type','os_disk_dev'],
|
|
|
|
|
where='os_disk_parent',
|
|
|
|
|
_in=['/dev/sda','/dev/sdb'],
|
|
|
|
|
sort="ASC/1"),
|
|
|
|
|
operator.itemgetter(0)):
|
|
|
|
|
if disktype.endswith('-raid'):
|
|
|
|
|
for disk_type, disk_dev in grouped:
|
|
|
|
|
failed |= process(mdAdmProg,'-S',disk_dev).success()
|
|
|
|
|
if "raidmember" in disktype:
|
|
|
|
|
for disk_type, disk_dev in grouped:
|
|
|
|
|
failed |= process(mdAdmProg,
|
|
|
|
|
'--zero-superblock',disk_dev).success()
|
|
|
|
|
return not failed
|
|
|
|
|
|
|
|
|
|
def recreateLvm(self,table,devices,data,vgname):
|
|
|
|
|
"""
|
|
|
|
|
Create GPT partition table by /sbin/gdisk
|
|
|
|
|
"""
|
|
|
|
|
self._removeVolumeGroup(vgname)
|
|
|
|
|
for device in devices:
|
|
|
|
|
self.recreatePartitionTable(table,[device],[['','','','allfree']])
|
|
|
|
|
|
|
|
|
@ -349,30 +368,52 @@ class VariableClAutopartitionDevice(AutopartitionHelper,Variable):
|
|
|
|
|
deviceParentMap.get(x,_("Unknown")))),
|
|
|
|
|
self.Get('os_device_dev'))
|
|
|
|
|
|
|
|
|
|
def checkNeeded(self,valuelist,usedDevices,agregationType):
|
|
|
|
|
needDevices = list(set(usedDevices) - set(valuelist))
|
|
|
|
|
if needDevices:
|
|
|
|
|
raise VariableError(_("Disks {selecteddisk} is {agrtype} part.\n"
|
|
|
|
|
"You need use also {needdisk} or clear {agrtype} manualy")
|
|
|
|
|
.format(selecteddisk=",".join(
|
|
|
|
|
list(set(usedDevices)&set(valuelist))),
|
|
|
|
|
needdisk=",".join(needDevices),
|
|
|
|
|
agrtype=agregationType))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def checkOnLvm(self,valuelist):
|
|
|
|
|
disks = self.Select('os_disk_dev',
|
|
|
|
|
where='os_disk_parent',_in=valuelist)
|
|
|
|
|
vgroups = self.Select('os_lvm_vgname',
|
|
|
|
|
where='os_lvm_pvname',_in=disks)
|
|
|
|
|
lvmDisks = self.Select('os_lvm_pvname',
|
|
|
|
|
where='os_lvm_vgname',_in=vgroups)
|
|
|
|
|
lvmDevices = self.Select('os_disk_parent',where='os_disk_dev',
|
|
|
|
|
_in=lvmDisks)
|
|
|
|
|
self.checkNeeded(valuelist,lvmDevices,"LVM")
|
|
|
|
|
|
|
|
|
|
def checkOnRaid(self,valuelist):
|
|
|
|
|
disks = self.Select('os_disk_dev',
|
|
|
|
|
where='os_disk_parent',_in=valuelist)
|
|
|
|
|
raids = filter(None,self.Select('os_disk_raid',
|
|
|
|
|
where='os_disk_dev',_in=disks))
|
|
|
|
|
raidDisks = self.Select('os_disk_dev',where='os_disk_raid',_in=raids)
|
|
|
|
|
raidDevices = self.Select('os_disk_parent',
|
|
|
|
|
where='os_disk_dev',
|
|
|
|
|
_in=raidDisks)
|
|
|
|
|
self.checkNeeded(valuelist,raidDevices,"RAID")
|
|
|
|
|
|
|
|
|
|
def check(self,valuelist):
|
|
|
|
|
if self.Get('cl_autopartition_set') == "auto":
|
|
|
|
|
if not valuelist:
|
|
|
|
|
raise VariableError(_("For autopartition need select install"
|
|
|
|
|
" device"))
|
|
|
|
|
useDisks = self.Select('os_disk_parent',
|
|
|
|
|
where='os_disk_mount',
|
|
|
|
|
ne='')
|
|
|
|
|
where='os_disk_mount',ne='')
|
|
|
|
|
for value in valuelist:
|
|
|
|
|
if value in useDisks:
|
|
|
|
|
raise VariableError(
|
|
|
|
|
_("Device %s already is used by current system")%value)
|
|
|
|
|
disks = self.Select('os_disk_dev',
|
|
|
|
|
where='os_disk_parent',_in=valuelist)
|
|
|
|
|
vgroups = self.Select('os_lvm_vgname',
|
|
|
|
|
where='os_lvm_pvname',_in=disks)
|
|
|
|
|
lvmDisks = self.Select('os_lvm_pvname',
|
|
|
|
|
where='os_lvm_vgname',_in=vgroups)
|
|
|
|
|
lvmDevices = self.Select('os_disk_parent',where='os_disk_dev',
|
|
|
|
|
_in=lvmDisks)
|
|
|
|
|
needDevices = list(set(lvmDevices) - set(valuelist))
|
|
|
|
|
if needDevices:
|
|
|
|
|
raise VariableError(_("For recreate current LVM you need"
|
|
|
|
|
" to add %s devices")%",".join(needDevices))
|
|
|
|
|
self.checkOnLvm(valuelist)
|
|
|
|
|
self.checkOnRaid(valuelist)
|
|
|
|
|
if len(valuelist) > 1 and \
|
|
|
|
|
self.Get('cl_autopartition_lvm_set') == 'off':
|
|
|
|
|
raise VariableError(
|
|
|
|
|