Not all swaps should be used by the system in some cases.
Related: rhbz#1011391
Signed-off-by: Vratislav Podzimek vpodzime@redhat.com --- blivet/__init__.py | 81 +++++++++++++++++++++++++++++++++++++++++++++++++- blivet/partitioning.py | 4 +++ 2 files changed, 84 insertions(+), 1 deletion(-)
diff --git a/blivet/__init__.py b/blivet/__init__.py index 8f6e82a..c70f150 100644 --- a/blivet/__init__.py +++ b/blivet/__init__.py @@ -2120,6 +2120,40 @@ class Blivet(object): parent = getattr(self.ksdata, list_attr) parent.dataList().append(data)
+ def addFstabSwap(self, device): + """ + Add swap device to the list of swaps that should appear in the fstab. + + :param device: swap device that should be added to the list + :type device: blivet.devices.StorageDevice instance holding a swap format + + """ + + self.fsset.addFstabSwap(device) + + def removeFstabSwap(self, device): + """ + Remove swap device from the list of swaps that should appear in the fstab. + + :param device: swap device that should be removed from the list + :type device: blivet.devices.StorageDevice instance holding a swap format + + """ + + self.fsset.removeFstabSwap(device) + + def setFstabSwaps(self, devices): + """ + Set swap devices that should appear in the fstab. + + :param devices: iterable providing devices that should appear in the fstab + :type devices: iterable providing blivet.devices.StorageDevice instances holding + a swap format + + """ + + self.fsset.setFstabSwaps(devices) + def mountExistingSystem(fsset, rootDevice, allowDirty=None, dirtyCB=None, readOnly=None): @@ -2328,6 +2362,7 @@ class FSSet(object): self._usb = None self._selinux = None self._run = None + self._fstab_swaps = set() self.preserveLines = [] # lines we just ignore and preserve
@property @@ -2840,7 +2875,14 @@ class FSSet(object):
devices = sorted(self.mountpoints.values(), key=lambda d: d.format.mountpoint) - devices += self.swapDevices + + # filter swaps only in installer mode + if flags.installer_mode: + devices += [dev for dev in self.swapDevices + if dev in self._fstab_swaps] + else: + devices += self.swapDevices + netdevs = self.devicetree.getDevicesByInstance(NetworkStorageDevice) for device in devices: # why the hell do we put swap in the fstab, anyway? @@ -2890,6 +2932,43 @@ class FSSet(object):
return fstab
+ def addFstabSwap(self, device): + """ + Add swap device to the list of swaps that should appear in the fstab. + + :param device: swap device that should be added to the list + :type device: blivet.devices.StorageDevice instance holding a swap format + + """ + + self._fstab_swaps.add(device) + + def removeFstabSwap(self, device): + """ + Remove swap device from the list of swaps that should appear in the fstab. + + :param device: swap device that should be removed from the list + :type device: blivet.devices.StorageDevice instance holding a swap format + + """ + + try: + self._fstab_swaps.remove(device) + except KeyError: + pass + + def setFstabSwaps(self, devices): + """ + Set swap devices that should appear in the fstab. + + :param devices: iterable providing devices that should appear in the fstab + :type devices: iterable providing blivet.devices.StorageDevice instances holding + a swap format + + """ + + self._fstab_swaps = set(devices) + def getReleaseString(): relName = None relVer = None diff --git a/blivet/partitioning.py b/blivet/partitioning.py index abaf1b3..28e83e7 100644 --- a/blivet/partitioning.py +++ b/blivet/partitioning.py @@ -325,6 +325,10 @@ def doAutoPartition(storage, data):
storage.setUpBootLoader()
+ # only newly added swaps should appear in the fstab + new_swaps = (dev for dev in storage.swaps if not dev.format.exists) + storage.setFstabSwaps(new_swaps) + # now do a full check of the requests (errors, warnings) = storage.sanityCheck() for error in errors: