[blivet] Allow specifying which swaps should appear in fstab

Vratislav Podzimek vpodzime at redhat.com
Thu Oct 3 14:04:26 UTC 2013


Not all swaps should be used by the system in some cases.

Related: rhbz#1011391
Signed-off-by: Vratislav Podzimek <vpodzime at redhat.com>
---
 blivet/__init__.py     | 57 +++++++++++++++++++++++++++++++++++++++++++++++++-
 blivet/partitioning.py |  8 +++++++
 2 files changed, 64 insertions(+), 1 deletion(-)

diff --git a/blivet/__init__.py b/blivet/__init__.py
index 8f6e82a..538c1a1 100644
--- a/blivet/__init__.py
+++ b/blivet/__init__.py
@@ -2120,6 +2120,30 @@ 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.
+
+        """
+
+        self.fsset.add_fstab_swap(device)
+
+    def removeFstabSwap(self, device):
+        """
+        Remove swap device from the list of swaps that should appear in the fstab.
+
+        """
+
+        self.fsset.remove_fstab_swap(device)
+
+    def setFstabSwaps(self, devices):
+        """
+        Set swap devices that should appear in the fstab.
+
+        """
+
+        self.fsset.set_fstab_swaps(devices)
+
 def mountExistingSystem(fsset, rootDevice,
                         allowDirty=None, dirtyCB=None,
                         readOnly=None):
@@ -2328,6 +2352,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 +2865,10 @@ class FSSet(object):
 
         devices = sorted(self.mountpoints.values(),
                          key=lambda d: d.format.mountpoint)
-        devices += self.swapDevices
+
+        # XXX: filter swaps only in installer mode?
+        devices += [dev for dev in self.swapDevices
+                    if dev in self._fstab_swaps]
         netdevs = self.devicetree.getDevicesByInstance(NetworkStorageDevice)
         for device in devices:
             # why the hell do we put swap in the fstab, anyway?
@@ -2890,6 +2918,33 @@ class FSSet(object):
 
         return fstab
 
+    def addFstabSwap(self, device):
+        """
+        Add swap device to the list of swaps that should appear in the fstab.
+
+        """
+
+        self._fstab_swaps.add(device)
+
+    def removeFstabSwap(self, device):
+        """
+        Remove swap device from the list of swaps that should appear in the fstab.
+
+        """
+
+        try:
+            self._fstab_swaps.remove(device)
+        except KeyError:
+            pass
+
+    def setFstabSwaps(self, devices):
+        """
+        Set swap devices that should appear in the fstab.
+
+        """
+
+        self._fstab_swaps = set(devices)
+
 def getReleaseString():
     relName = None
     relVer = None
diff --git a/blivet/partitioning.py b/blivet/partitioning.py
index abaf1b3..2740848 100644
--- a/blivet/partitioning.py
+++ b/blivet/partitioning.py
@@ -302,6 +302,9 @@ def doAutoPartition(storage, data):
     if not storage.doAutoPart:
         return
 
+    old_swaps = set(dev for dev in storage.devicetree.devices
+                 if dev.format.type == "swap")
+
     if not storage.partitioned:
         raise NoDisksError(_("No usable disks selected"))
 
@@ -325,6 +328,11 @@ def doAutoPartition(storage, data):
 
     storage.setUpBootLoader()
 
+    new_swaps = (dev for dev in storage.devicetree.devices
+                 if dev.format.type == "swap" and dev not in old_swaps)
+
+    storage.setFstabSwaps(new_swaps)
+
     # now do a full check of the requests
     (errors, warnings) = storage.sanityCheck()
     for error in errors:
-- 
1.8.3.1



More information about the anaconda-patches mailing list