This patch adds support for the <driver...> sub-element of <filesystem> node. driver is an optional sub-element and has path and handle as the supported values as of now. For more details refer to libvirt filesystem doc page at ... http://libvirt.org/formatdomain.html#elementsFilesystems Signed-off-by: Deepak C Shetty <deepakcs@xxxxxxxxxxxxxxxxxx> --- v2: - added test cases tests/xmlparse-xml/change-filesystems-in.xml | 2 ++ tests/xmlparse-xml/change-filesystems-out.xml | 1 + tests/xmlparse.py | 2 ++ virtinst/VirtualFilesystem.py | 21 +++++++++++++++++++++ 4 files changed, 26 insertions(+), 0 deletions(-) diff --git a/tests/xmlparse-xml/change-filesystems-in.xml b/tests/xmlparse-xml/change-filesystems-in.xml index c1f1054..2f95068 100644 --- a/tests/xmlparse-xml/change-filesystems-in.xml +++ b/tests/xmlparse-xml/change-filesystems-in.xml @@ -24,6 +24,7 @@ <target dev="fda" bus="fdc"/> </disk> <filesystem> + <driver type='handle'/> <source dir='/foo/bar'/> <target dir='/bar/baz'/> </filesystem> @@ -32,6 +33,7 @@ <target dir='/bar/baz'/> </filesystem> <filesystem type='mount' accessmode='squash'> + <driver type='path'/> <source dir='/foo/bar'/> <target dir='/bar/baz'/> </filesystem> diff --git a/tests/xmlparse-xml/change-filesystems-out.xml b/tests/xmlparse-xml/change-filesystems-out.xml index c29f064..75dde4c 100644 --- a/tests/xmlparse-xml/change-filesystems-out.xml +++ b/tests/xmlparse-xml/change-filesystems-out.xml @@ -32,6 +32,7 @@ <target dir="/bar/baz"/> </filesystem> <filesystem> + <driver type="handle"/> <source dir="/foo/bar"/> <target dir="/bar/baz"/> </filesystem> diff --git a/tests/xmlparse.py b/tests/xmlparse.py index a781f2c..3fc1839 100644 --- a/tests/xmlparse.py +++ b/tests/xmlparse.py @@ -580,6 +580,7 @@ class XMLParseTest(unittest.TestCase): check = self._make_checker(dev1) check("type", None, "mount") check("mode", None, "passthrough") + check("driver", "handle", None) check("source", "/foo/bar", "/new/path") check("target", "/bar/baz", "/new/target") @@ -592,6 +593,7 @@ class XMLParseTest(unittest.TestCase): check = self._make_checker(dev3) check("type", "mount", None) check("mode", "squash", None) + check("driver", "path", "handle") self._alter_compare(guest.get_config_xml(), outfile) diff --git a/virtinst/VirtualFilesystem.py b/virtinst/VirtualFilesystem.py index 0b8a876..56f2c1f 100644 --- a/virtinst/VirtualFilesystem.py +++ b/virtinst/VirtualFilesystem.py @@ -42,6 +42,11 @@ class VirtualFilesystem(VirtualDevice.VirtualDevice): MODE_DEFAULT = "default" MOUNT_MODES = [MODE_PASSTHROUGH, MODE_MAPPED, MODE_SQUASH, MODE_DEFAULT] + DRIVER_PATH = "path" + DRIVER_HANDLE = "handle" + DRIVER_DEFAULT = "default" + DRIVER_TYPES = [DRIVER_PATH, DRIVER_HANDLE, DRIVER_DEFAULT] + @staticmethod def type_to_source_prop(fs_type): """ @@ -66,6 +71,7 @@ class VirtualFilesystem(VirtualDevice.VirtualDevice): self._type = None self._mode = None + self._driver = None self._target = None self._source = None @@ -74,6 +80,7 @@ class VirtualFilesystem(VirtualDevice.VirtualDevice): self.mode = self.MODE_DEFAULT self.type = self.TYPE_DEFAULT + self.driver = self.DRIVER_DEFAULT def _get_type(self): return self._type @@ -91,6 +98,14 @@ class VirtualFilesystem(VirtualDevice.VirtualDevice): self._mode = val mode = _xml_property(_get_mode, _set_mode, xpath="./@accessmode") + def _get_driver(self): + return self._driver + def _set_driver(self, val): + if val is not None and not self.DRIVER_TYPES.count(val): + raise ValueError(_("Unsupported filesystem driver '%s'" % val)) + self._driver = val + driver = _xml_property(_get_driver, _set_driver, xpath="./driver/@type") + def _get_source(self): return self._source def _set_source(self, val): @@ -135,6 +150,7 @@ class VirtualFilesystem(VirtualDevice.VirtualDevice): def _get_xml_config(self): mode = self.mode ftype = self.type + driver = self.driver source = self.source target = self.target @@ -142,6 +158,8 @@ class VirtualFilesystem(VirtualDevice.VirtualDevice): mode = None if ftype == self.TYPE_DEFAULT: ftype = None + if driver == self.DRIVER_DEFAULT: + driver = None if not source or not target: raise ValueError( @@ -154,6 +172,9 @@ class VirtualFilesystem(VirtualDevice.VirtualDevice): fsxml += " accessmode='%s'" % mode fsxml += ">\n" + if driver: + fsxml += " <driver type='%s'/>\n" % driver + fsxml += " <source %s='%s'/>\n" % ( self.type_to_source_prop(ftype), source)