[PATCH blivet master] Add support for specifying arbitrary mkfs options.

Chris Lumens clumens at redhat.com
Wed Jul 1 18:45:52 UTC 2015


While we have support for fsprofile, that is only supported by the
various ext* filesystems.  We have no way to support passing options for
any of the other filesystems, including the default in RHEL.

Resolves: rhbz#1220898
---
 blivet/formats/__init__.py | 23 +++++++++++++++++++----
 blivet/formats/fs.py       |  1 +
 blivet/tasks/fsmkfs.py     |  4 +++-
 3 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/blivet/formats/__init__.py b/blivet/formats/__init__.py
index b3e58fa..89976e6 100644
--- a/blivet/formats/__init__.py
+++ b/blivet/formats/__init__.py
@@ -187,19 +187,22 @@ class DeviceFormat(ObjectID):
         self.uuid = kwargs.get("uuid")
         self.exists = kwargs.get("exists", False)
         self.options = kwargs.get("options")
+        self._createOptions = kwargs.get("createOptions")
 
     def __repr__(self):
         s = ("%(classname)s instance (%(id)s) object id %(object_id)d--\n"
              "  type = %(type)s  name = %(name)s  status = %(status)s\n"
              "  device = %(device)s  uuid = %(uuid)s  exists = %(exists)s\n"
-             "  options = %(options)s  supported = %(supported)s"
+             "  options = %(options)s\n"
+             "  createOptions = %(createOptions)s  supported = %(supported)s"
              "  formattable = %(format)s  resizable = %(resize)s\n" %
              {"classname": self.__class__.__name__, "id": "%#x" % id(self),
-              "object_id": self.id,
+              "object_id": self.id, "createOptions": self.createOptions,
               "type": self.type, "name": self.name, "status": self.status,
               "device": self.device, "uuid": self.uuid, "exists": self.exists,
               "options": self.options, "supported": self.supported,
-              "format": self.formattable, "resize": self.resizable})
+              "format": self.formattable, "resize": self.resizable,
+              "createOptions": self.createOptions})
         return s
 
     @property
@@ -218,7 +221,7 @@ class DeviceFormat(ObjectID):
         d = {"type": self.type, "name": self.name, "device": self.device,
              "uuid": self.uuid, "exists": self.exists,
              "options": self.options, "supported": self.supported,
-             "resizable": self.resizable}
+             "resizable": self.resizable, "createOptions": self.createOptions}
         return d
 
     def labeling(self):
@@ -290,6 +293,18 @@ class DeviceFormat(ObjectID):
        doc="fstab entry option string"
     )
 
+    def _setCreateOptions(self, options):
+        self._createOptions = options
+
+    def _getCreateOptions(self):
+        return self._createOptions
+
+    createOptions = property(
+        lambda s: s._getCreateOptions(),
+        lambda s,v: s._setCreateOptions(v),
+        doc="options to be used when running mkfs"
+    }
+
     def _deviceCheck(self, devspec):
         """ Verifies that device spec has a proper format.
 
diff --git a/blivet/formats/fs.py b/blivet/formats/fs.py
index e2c5ef3..90cbca6 100644
--- a/blivet/formats/fs.py
+++ b/blivet/formats/fs.py
@@ -782,6 +782,7 @@ class FS(DeviceFormat):
         else:
             data.fsopts = ""
 
+        data.mkfsopts = self.createOptions or ""
         data.fsprofile = self.fsprofile or ""
 
 class Ext2FS(FS):
diff --git a/blivet/tasks/fsmkfs.py b/blivet/tasks/fsmkfs.py
index 542e61d..15138ae 100644
--- a/blivet/tasks/fsmkfs.py
+++ b/blivet/tasks/fsmkfs.py
@@ -20,6 +20,7 @@
 # Red Hat Author(s): Anne Mulhern <amulhern at redhat.com>
 
 import abc
+import shlex
 
 from six import add_metaclass
 
@@ -90,7 +91,8 @@ class FSMkfs(task.BasicApplication, FSMkfsTask):
             raise FSError("options parameter must be a list.")
 
         label_options = self._labelOptions if label else []
-        return options + self.args + label_options + [self.fs.device]
+        create_options = shlex.split(self.fs.createOptions or "")
+        return options + self.args + label_options + create_options + [self.fs.device]
 
     def _mkfsCommand(self, options, label):
         """Return the command to make the filesystem.
-- 
2.4.3



More information about the anaconda-patches mailing list