FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Ubuntu > Ubuntu Masters Of The Universe

 
 
LinkBack Thread Tools
 
Old 02-11-2009, 11:54 PM
David Cantrell
 
Default Update autopart.py to work with new pyparted syntax.

The way partitions and created and added to disks has changed
with the new pyparted API.
---
autopart.py | 148 +++++++++++++++++++++++++++++++++--------------------------
1 files changed, 83 insertions(+), 65 deletions(-)

diff --git a/autopart.py b/autopart.py
index 1db3f1c..350cf32 100644
--- a/autopart.py
+++ b/autopart.py
@@ -76,10 +76,10 @@ def bootRequestCheck(req, diskset):

if iutil.isEfi():
if req.mountpoint == "/boot":
- if not part.fs_type.name.startswith("ext"):
+ if not part.fileSystem.type.startswith("ext"):
return BOOT_NOT_EXT2
elif req.mountpoint == "/boot/efi":
- if not part.fs_type.name in ["fat16", "fat32"]:
+ if not part.fileSystem.type in ["fat16", "fat32"]:
return BOOTEFI_NOT_VFAT
elif iutil.isAlpha():
return bootAlphaCheckRequirements(part)
@@ -157,13 +157,13 @@ def findFreespace(diskset):

def bestPartType(disk, request):
numPrimary = len(disk.getPrimaryPartitions())
- maxPrimary = disk.max_primary_partition_count
+ maxPrimary = disk.maxPrimaryPartitionCount
if numPrimary == maxPrimary:
raise PartitioningError, "Unable to create additional primary partitions on /dev/%s" % (disk.device.path[5:])
if request.primary:
return parted.PARTITION_NORMAL
if ((numPrimary == (maxPrimary - 1)) and
- not disk.extended_partition and
+ not disk.getExtendedPartition() and
disk.supportsFeature(parted.DISK_TYPE_EXTENDED)):
return parted.PARTITION_EXTENDED
return parted.PARTITION_NORMAL
@@ -192,7 +192,8 @@ class partlist:

def getMinimumSector(disk):
if disk.type.name == 'sun':
- start = long(disk.device.sectors * disk.device.heads)
+ (cylinders, heads, sectors) = disk.device.biosGeometry
+ start = long(sectors * heads)
start /= long(1024 / disk.device.sectorSize)
return start + 1
return 0L
@@ -234,9 +235,9 @@ def fitConstrained(diskset, requests, primOnly=0, newParts = None):
if startSec < minSec:
startSec = minSec

- if disk.supportsFeature(parted.DISK_TYPE_EXTENDED) and disk.extended_partition:
-
- if (disk.extended_partition.geometry.start < startSec) and (disk.extended_partition.geometry.end >= endSec):
+ if disk.supportsFeature(parted.DISK_TYPE_EXTENDED) and disk.getExtendedPartition():
+ extpart = disk.getExtendedPartition()
+ if (extpart.geometry.start < startSec) and (extpart.geometry.end >= endSec):
partType = parted.PARTITION_LOGICAL
if request.primary: # they've required a primary and we can't do it
raise PartitioningError, "Cannot create another primary partition for %s." % request.mountpoint
@@ -253,19 +254,28 @@ def fitConstrained(diskset, requests, primOnly=0, newParts = None):
if ret == parted.PARTITION_NORMAL:
partType = parted.PARTITION_NORMAL
elif ret == parted.PARTITION_EXTENDED:
- newp = disk.partition_new(parted.PARTITION_EXTENDED, None, startSec, endSec)
- constraint = disk.device.constraint_any()
- disk.add_partition(newp, constraint)
- disk.maximize_partition (newp, constraint)
+ geometry = parted.Geometry(device=disk.device,
+ start=startSec,
+ end=endSec)
+ newp = parted.Partition(disk=disk,
+ type=parted.PARTITION_EXTENDED,
+ geometry=geometry)
+ constraint = parted.Constraint(device=disk.device)
+ disk.addPartition(newp, constraint)
+ disk.maximizePartition(newp, constraint)
newParts.parts.append(newp)
requests.nextUniqueID = requests.nextUniqueID + 1
partType = parted.PARTITION_LOGICAL
else: # shouldn't get here
raise PartitioningError, "Impossible partition type to create"
- newp = disk.partition_new (partType, fsType, startSec, endSec)
- constraint = disk.device.constraint_any ()
+ geometry = parted.Geometry(device=disk.device,
+ start=startSec,
+ end=endSec)
+ newp = parted.Partition(disk=disk, type=partType,
+ fs=fsType, geometry=geometry)
+ constraint = parted.Constraint(device=disk.device)
try:
- disk.add_partition (newp, constraint)
+ disk.addPartition(newp, constraint)

except Exception, msg:
raise PartitioningError, str(msg)
@@ -296,7 +306,7 @@ def getDriveList(request, diskset):
drives.sort(isys.compareDrives)

return drives
-
+

# fit partitions of a specific size with or without a specific disk
# into the freespace
@@ -341,7 +351,7 @@ def fitSized(diskset, requests, primOnly = 0, newParts = None):
isBoot = 1
else:
isBoot = 0
-
+
largestPart = (0, None)
drives = getDriveList(request, diskset)
lvmLog.debug("Trying drives to find best free space out of %s" %(free,))
@@ -357,29 +367,29 @@ def fitSized(diskset, requests, primOnly = 0, newParts = None):
numLogical = len(disk.getLogicalPartitions())

# if there is an extended partition add it in
- if disk.extended_partition:
- numPrimary = numPrimary + 1
-
- maxPrimary = disk.max_primary_partition_count
+ if disk.getExtendedPartition():
+ numPrimary = numPrimary + 1
+
+ maxPrimary = disk.maxPrimaryPartitionCount
maxLogical = disk.getMaxLogicalPartitions()

for part in free[drive]:
- # if this is a free space outside extended partition
- # make sure we have free primary partition slots
- if not part.type & parted.PARTITION_LOGICAL:
- if numPrimary == maxPrimary:
- continue
+ # if this is a free space outside extended partition
+ # make sure we have free primary partition slots
+ if not part.type & parted.PARTITION_LOGICAL:
+ if numPrimary == maxPrimary:
+ continue
else:
if numLogical == maxLogical:
continue
-
+
lvmLog.debug( "Trying partition %s" % (printFreespaceitem(part),))
partSize = part.getSize(unit="MB")
# figure out what the request size will be given the
# geometry (#130885)
requestSectors = long((request.requestSize * 1024L * 1024L) / part.disk.device.sectorSize) - 1
requestSizeMB = long((requestSectors * part.disk.device.sectorSize) / 1024L / 1024L)
- lvmLog.debug("partSize %s request %s" % (partSize, request.requestSize))
+ lvmLog.debug("partSize %s request %s" % (partSize, request.requestSize))
if partSize >= requestSizeMB and partSize > largestPart[0]:
if not request.primary or (not part.type & parted.PARTITION_LOGICAL):
largestPart = (partSize, part)
@@ -407,9 +417,9 @@ def fitSized(diskset, requests, primOnly = 0, newParts = None):

startSec = freeStartSec

- # For alpha reserve space at the begining of disk
- if iutil.isAlpha() and startSec < long((1024L * 1024L)/disk.device.sectorSize):
- startSec = long((2 * 1024L * 1024L)/disk.device.sectorSize)
+ # For alpha reserve space at the begining of disk
+ if iutil.isAlpha() and startSec < long((1024L * 1024L)/disk.device.sectorSize):
+ startSec = long((2 * 1024L * 1024L)/disk.device.sectorSize)

endSec = startSec + long(((request.requestSize * 1024L * 1024L) / disk.device.sectorSize)) - 1

@@ -427,10 +437,15 @@ def fitSized(diskset, requests, primOnly = 0, newParts = None):
if ret == parted.PARTITION_NORMAL:
partType = parted.PARTITION_NORMAL
elif ret == parted.PARTITION_EXTENDED:
- newp = disk.partition_new(parted.PARTITION_EXTENDED, None, startSec, endSec)
- constraint = dev.constraint_any()
- disk.add_partition(newp, constraint)
- disk.maximize_partition (newp, constraint)
+ geometry = parted.Geometry(device=disk.device,
+ start=startSec,
+ end=endSec)
+ newp = parted.Partition(disk=disk,
+ type=parted.PARTITION_EXTENDED,
+ geometry=geometry)
+ constraint = parted.Constraint(device=disk.device)
+ disk.addPartition(newp, constraint)
+ disk.maximizePartition(newp, constraint)
newParts.parts.append(newp)
requests.nextUniqueID = requests.nextUniqueID + 1
partType = parted.PARTITION_LOGICAL
@@ -462,11 +477,15 @@ def fitSized(diskset, requests, primOnly = 0, newParts = None):

fsType = request.fstype.getPartedFileSystemType()
lvmLog.debug("creating newp with start=%s, end=%s, len=%s" % (startSec, endSec, endSec - startSec))
- newp = disk.partition_new (partType, fsType, startSec, endSec)
- constraint = dev.constraint_any ()
+ geometry = parted.Geometry(device=disk.device,
+ start=startSec,
+ end=endSec)
+ newp = parted.Partition(disk=disk, type=partType,
+ fs=fsType, geometry=geometry)
+ constraint = parted.Constraint(device=disk.device)

try:
- disk.add_partition (newp, constraint)
+ disk.addPartition(newp, constraint)
except Exception, msg:
raise PartitioningError, str(msg)
for flag in request.fstype.getPartedPartitionFlags():
@@ -691,7 +710,7 @@ def growParts(diskset, requests, newParts):
growList = growable[drive]

sectorSize = diskset.disks[drive].device.sectorSize
- cylsectors = diskset.disks[drive].device.sectors*diskset.disks[drive].device.heads
+ cylsectors = diskset.disks[drive].device.biosGeometry.sectors*diskset.disks[drive].device.biosGeometry.heads

# sort in order of request size, consider biggest first
n = 0
@@ -874,11 +893,11 @@ def setPreexistParts(diskset, requests):
endSec = part.geometry.start + long(((request.targetSize * 1024L * 1024L) / disk.device.sectorSize)) - 1

try:
- g = part.geometry.duplicate()
- g.set_end(endSec)
- constraint = g.constraint_exact()
- part.set_geometry(constraint, startSec, endSec)
- except parted.error, msg:
+ g = copy.deepcopy(part.geometry)
+ g.end = endSec
+ constraint = parted.Constraint(exactGeom=g)
+ part.geometry = g
+ except Exception, msg:
log.error("error setting geometry for partition %s: %s" %(part.getDeviceNodeName(), msg))
raise PartitioningError, _("Error resizing partition %s.

%s") %(part.getDeviceNodeName(), msg)

@@ -1007,10 +1026,10 @@ def processPartitioning(diskset, requests, newParts):
elif request.type == REQUEST_VG:
request.size = request.getActualSize(requests, diskset)
elif request.type == REQUEST_LV:
- if request.grow:
- request.setSize(request.getStartSize())
- else:
- request.size = request.getActualSize(requests, diskset)
+ if request.grow:
+ request.setSize(request.getStartSize())
+ else:
+ request.size = request.getActualSize(requests, diskset)
elif request.preexist:
# we need to keep track of the max size of preexisting partitions
# FIXME: we should also get the max size for LVs at some point
@@ -1062,13 +1081,13 @@ def doPartitioning(diskset, requests, doRefresh = 1):

# now grow the logical partitions
growLogicalVolumes(diskset, requests)
-
+
# make sure our logical volumes still fit
#
# XXXX should make all this used lvm.getVGFreeSpace() and
# lvm.getVGUsedSpace() at some point
#
-
+
vgused = {}
for request in requests.requests:
if request.type == REQUEST_LV:
@@ -1078,10 +1097,10 @@ def doPartitioning(diskset, requests, doRefresh = 1):
size)
else:
vgused[request.volumeGroup] = size
-
+
for vg in vgused.keys():
request = requests.getRequestByID(vg)
- lvmLog.info("Used size vs. available for vg %s: %s %s", request.volumeGroupName, vgused[vg], request.getActualSize(requests, diskset))
+ lvmLog.info("Used size vs. available for vg %s: %s %s", request.volumeGroupName, vgused[vg], request.getActualSize(requests, diskset))
if vgused[vg] > request.getActualSize(requests, diskset):
raise PartitioningError, _("Adding this partition would not "
"leave enough disk space for already "
@@ -1116,9 +1135,9 @@ def doClearPartAction(anaconda, partitions, diskset):
disk = diskset.disks[drive]
for part in disk.partitions.values():
if (not part.active or (part.type == parted.PARTITION_EXTENDED) or
- (part.disk.type.name == "mac" and part.num == 1 and part.name == "Apple")):
+ (part.disk.type == "mac" and part.number == 1 and part.name == "Apple")):
continue
- if part.fs_type:
+ if part.fileSystem:
ptype = partedUtils.get_partition_file_system_type(part)
else:
ptype = None
@@ -1134,7 +1153,7 @@ def doClearPartAction(anaconda, partitions, diskset):
partedUtils.hasProtectedPartitions(drive, anaconda)) or
(not ptype and
partedUtils.isLinuxNative(part)) or
- ((part._fileSystem is None) and # the ptable doesn't have types
+ ((part.fileSystem is None) and # the ptable doesn't have types
((part.isFlagAvailable(parted.PARTITION_RAID) and part.getFlag(parted.PARTITION_RAID)) or # this is a RAID
(part.isFlagAvailable(parted.PARTITION_LVM) and part.getFlag(parted.PARTITION_LVM)) or # or an LVM
(iutil.isMactel() and not ptype)))): # or we're on a mactel and have a blank partition from bootcamp #FIXME: this could be dangerous...
@@ -1204,7 +1223,7 @@ def doClearPartAction(anaconda, partitions, diskset):
continue

disk = diskset.disks[drive]
- ext = disk.extended_partition
+ ext = disk.getExtendedPartition()
# if the extended is empty, blow it away
if ext and len(disk.getLogicalPartitions()) == 0:
delete = partRequests.DeleteSpec(drive, ext.geometry.start,
@@ -1280,7 +1299,7 @@ def doAutoPartition(anaconda):
"for %s.

"
"Press 'OK' to exit the installer.")
% (request.device, request.mountpoint),
- custom_icon='error')
+ custom_icon='error')
sys.exit(0)

# now go through and set things from the request to the
@@ -1363,7 +1382,6 @@ def doAutoPartition(anaconda):
for lv in partitions.getLVMLVForVGID(oldid):
lv.volumeGroup = req.uniqueID

-
elif (isinstance(request, partRequests.LogicalVolumeRequestSpec) and
request.preexist == 1):
# get the preexisting partition they want to use
@@ -1375,7 +1393,7 @@ def doAutoPartition(anaconda):
"Press 'OK' to exit the installer.")
% (request.logicalVolumeName,
request.mountpoint),
- custom_icon='error')
+ custom_icon='error')
sys.exit(0)

# now go through and set things from the request to the
@@ -1409,7 +1427,7 @@ def doAutoPartition(anaconda):
if req.type == REQUEST_NEW and req.multidrive:
if not req.drive:
req.drive = diskset.disks.keys()
-
+
for drive in req.drive:
r = copy.copy(req)
r.encryption = copy.deepcopy(req.encryption)
@@ -1465,7 +1483,7 @@ def doAutoPartition(anaconda):
req.volumeGroup = r.uniqueID
else:
raise RuntimeError, "Unable to find the volume group for logical volume %s" %(req.logicalVolumeName,)
-
+
partitions.addRequest(req)

# Remove all preexisting VG requests that reference nonexistant PV
@@ -1518,7 +1536,7 @@ def doAutoPartition(anaconda):
anaconda.intf.messageWindow(_("Warnings During Automatic Partitioning"),
_("Following warnings occurred during automatic "
"partitioning:

%s") % (msg,),
- custom_icon='warning')
+ custom_icon='warning')
else:
lvmLog.warning(str(msg))
except PartitioningError, msg:
@@ -1581,21 +1599,21 @@ def autoCreatePartitionRequests(autoreq):
format = 0 or 1, whether to format
asvol = 0 or 1, whether or not it should be a logical volume (ignored)
"""
-
+
requests = []
for (mntpt, fstype, minsize, maxsize, grow, format, asvol) in autoreq:
if fstype:
ptype = fsset.fileSystemTypeGet(fstype)
else:
ptype = fsset.fileSystemTypeGetDefault()
-
+
newrequest = partRequests.PartitionSpec(ptype,
mountpoint = mntpt,
size = minsize,
maxSizeMB = maxsize,
grow = grow,
format = format)
-
+
requests.append(newrequest)

return requests
--
1.6.1.3

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@redhat.com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list
 

Thread Tools




All times are GMT. The time now is 10:35 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org