summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Katz <katzj@redhat.com>2001-06-21 19:07:45 +0000
committerJeremy Katz <katzj@redhat.com>2001-06-21 19:07:45 +0000
commit677d07d2e696e04ba3dc6c7b31d93348f62e115b (patch)
treed79ac28f83ba03692a9f07794bded0a4890372e6
parent9118a73a77c03164492f7ad9c0f98ac4c7ee86dc (diff)
downloadanaconda-677d07d2e696e04ba3dc6c7b31d93348f62e115b.tar.gz
anaconda-677d07d2e696e04ba3dc6c7b31d93348f62e115b.tar.xz
anaconda-677d07d2e696e04ba3dc6c7b31d93348f62e115b.zip
select raid partitions already used
-rw-r--r--iw/partition_gui.py20
-rw-r--r--partitioning.py15
-rw-r--r--textw/partition_text.py26
3 files changed, 31 insertions, 30 deletions
diff --git a/iw/partition_gui.py b/iw/partition_gui.py
index a00140456..9ba9431e8 100644
--- a/iw/partition_gui.py
+++ b/iw/partition_gui.py
@@ -345,17 +345,11 @@ def createAllowedRaidPartitionsClist(allraidparts, reqraidpart):
partclist.set_selection_mode (SELECTION_MULTIPLE)
partrow = 0
- for part in allraidparts:
+ for (part, used) in allraidparts:
partname = get_partition_name(part)
partclist.append((partname,))
- if reqraidpart:
- for member in reqraidpart:
- mempart = member.partition
- if partname == get_partition_name(mempart):
- partclist.select_row(partrow, 0)
- break
- else:
+ if used or not reqraidpart:
partclist.select_row(partrow, 0)
partrow = partrow + 1
@@ -999,13 +993,9 @@ class PartitionWindow(InstallWindow):
row = 0
availraidparts = get_available_raid_partitions(self.diskset,
- self.partitions.requests)
+ self.partitions.requests,
+ raidrequest)
- # add in partitions we're currently using
- if raidrequest.raidmembers:
- for member in raidrequest.raidmembers:
- availraidparts.append(member.partition)
-
# Mount Point entry
maintable.attach(createAlignedLabel(_("Mount Point:")),
0, 1, row, row + 1)
@@ -1110,7 +1100,7 @@ class PartitionWindow(InstallWindow):
raidmembers = []
for i in raidclist.selection:
- raidmembers.append(PartedPartitionDevice(availraidparts[i]))
+ raidmembers.append(PartedPartitionDevice(availraidparts[i][0]))
request.raidmembers = raidmembers
request.raidspares = sparesb.get_value_as_int()
diff --git a/partitioning.py b/partitioning.py
index d7180cce6..1f10c919d 100644
--- a/partitioning.py
+++ b/partitioning.py
@@ -139,8 +139,9 @@ def get_raid_devices(requests):
return raidRequests
-# returns a list of raid partitions which haven't been used in a device yet
-def get_available_raid_partitions(diskset, requests):
+# returns a list of tuples of raid partitions which can be used or are used
+# with whether they're used (0 if not, 1 if so) eg (part, used)
+def get_available_raid_partitions(diskset, requests, request):
rc = []
drives = diskset.disks.keys()
raiddevs = get_raid_devices(requests)
@@ -153,15 +154,21 @@ def get_available_raid_partitions(diskset, requests):
if raid.raidmembers:
for raidmem in raid.raidmembers:
if get_partition_name(part) == get_partition_name(raidmem.partition):
- used = 1
+ if raid.device == request.device:
+ used = 2
+ else:
+ used = 1
break
if used:
break
if not used:
- rc.append(part)
+ rc.append((part, 0))
+ elif used == 2:
+ rc.append((part, 1))
return rc
+
# return minimum numer of raid members required for a raid level
def get_raid_min_members(raidlevel):
if raidlevel == "RAID0":
diff --git a/textw/partition_text.py b/textw/partition_text.py
index 907067db1..176efd9c3 100644
--- a/textw/partition_text.py
+++ b/textw/partition_text.py
@@ -335,14 +335,14 @@ class PartitionWindow:
subgrid.setField(driveLbl, 0, 0)
disks = self.diskset.disks.keys()
drivelist = CheckboxTree(height=2, scroll=1)
- avail = []
- for disk in disks:
- for part in get_raid_partitions(self.diskset.disks[disk]):
- name = get_partition_name(part)
- if request.raidmembers and name in request.raidmembers:
- drivelist.append(name, part, selected = 1)
- else:
- drivelist.append(name, part, selected = 0)
+ avail = get_available_raid_partitions(self.diskset, self.partitions.requests, request)
+ # XXX
+ if not request.raidmembers:
+ for (part, used) in avail:
+ drivelist.append(get_partition_name(part), part, 1)
+ else:
+ for (part, used) in avail:
+ drivelist.append(get_partition_name(part), part, used)
subgrid.setField(drivelist, 0, 1)
return (drivelist, subgrid)
@@ -657,14 +657,18 @@ class PartitionWindow:
ButtonChoiceWindow(self.screen, _("Unable to Remove"),
_("You must first select a partition"),
buttons = [ TEXT_OK_BUTTON ] )
- return
- if partition.type & parted.PARTITION_FREESPACE:
+ return
+ elif type(partition) == type("RAID"):
+ device = partition
+ elif partition.type & parted.PARTITION_FREESPACE:
ButtonChoiceWindow(self.screen, _("Unable to Remove"),
_("You cannot remove freespace"),
buttons = [ TEXT_OK_BUTTON ] )
return
+ else:
+ device = get_partition_name(partition)
- request = self.partitions.getRequestByDeviceName(get_partition_name(partition))
+ request = self.partitions.getRequestByDeviceName(device)
if request:
self.partitions.removeRequest(request)