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

Vratislav Podzimek vpodzime at redhat.com
Thu Jul 2 06:09:16 UTC 2015


On Wed, 2015-07-01 at 14:45 -0400, Chris Lumens wrote:
> 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.
Looks good to me.

-- 
Vratislav Podzimek

Anaconda Rider | Red Hat, Inc. | Brno - Czech Republic



More information about the anaconda-patches mailing list