From ac51ff8684edb13246194367b8e66e8a589c18d4 Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Thu, 10 Sep 2020 13:06:41 -0400 Subject: [PATCH] cli: Fill in all --filesystem suboptions Signed-off-by: Cole Robinson --- .../cli/compare/virt-install-many-devices.xml | 33 ++++++++++++ tests/test_checkprops.py | 5 +- tests/test_cli.py | 8 ++- tests/test_xmlparse.py | 20 +++---- virtManager/device/fsdetails.py | 16 +++--- virtManager/object/domain.py | 8 +-- virtinst/cli.py | 29 ++++++++++ virtinst/devices/filesystem.py | 53 +++++++++++++------ 8 files changed, 131 insertions(+), 41 deletions(-) diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml index 6e700e17..421368dc 100644 --- a/tests/data/cli/compare/virt-install-many-devices.xml +++ b/tests/data/cli/compare/virt-install-many-devices.xml @@ -264,6 +264,39 @@ + + + + + + + + + + + + + + + + + 1234 + 500 + + + + + + + + + + + + + + + diff --git a/tests/test_checkprops.py b/tests/test_checkprops.py index 06c71c51..a237d841 100644 --- a/tests/test_checkprops.py +++ b/tests/test_checkprops.py @@ -30,8 +30,9 @@ def testCheckXMLBuilderProps(): if p not in virtinst.xmlbuilder._seenprops] msg = None try: - assert fail == [] - except AssertionError: + if fail: + raise RuntimeError(str(fail)) + except Exception: msg = "".join(traceback.format_exc()) + "\n\n" msg += ("This means that there are XML properties that are\n" "untested in the test suite. This could be caused\n" diff --git a/tests/test_cli.py b/tests/test_cli.py index ac988d73..8481854e 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -681,7 +681,13 @@ source.reservations.managed=no,source.reservations.source.type=unix,source.reser --filesystem /source,/target,alias.name=testfsalias,driver.ats=on,driver.iommu=off,driver.packed=on --filesystem template_name,/,type=template,mode=passthrough ---filesystem type=file,source=/tmp/somefile.img,target=/mount/point,accessmode=squash +--filesystem type=file,source=/tmp/somefile.img,target=/mount/point,accessmode=squash,driver.format=qcow2,driver.type=path,driver.wrpolicy=immediate +--filesystem type-mount,source.dir=/,target=/ +--filesystem type=template,source.name=foo,target=/ +--filesystem type=file,source.file=foo.img,target=/ +--filesystem type=volume,model=virtio,multidevs=remap,readonly=on,space_hard_limit=1234,space_soft_limit=500,source.pool=pool1,source.volume=vol,driver.name=virtiofs,driver.queue=3,binary.path=/foo/virtiofsd,binary.xattr=off,binary.cache.mode=always,binary.lock.posix=off,binary.lock.flock=on,target.dir=/foo +--filesystem type=block,source.dev=/dev/foo,target.dir=/ +--filesystem type=ram,source.usage=1024,source.units=MiB,target=/ --soundhw default --sound ac97 diff --git a/tests/test_xmlparse.py b/tests/test_xmlparse.py index 95a2d17e..35883e39 100644 --- a/tests/test_xmlparse.py +++ b/tests/test_xmlparse.py @@ -871,7 +871,7 @@ class XMLParseTest(unittest.TestCase): self._alter_compare(guest.get_xml(), outfile) - def testAlterFilesystems(self): + def _testAlterFilesystems(self): guest, outfile = self._get_test_content("change-filesystems") dev1 = guest.devices.filesystem[0] @@ -885,8 +885,8 @@ class XMLParseTest(unittest.TestCase): check = self._make_checker(dev1) check("type", None, "mount") check("accessmode", None, "passthrough") - check("driver", "handle", None) - check("wrpolicy", None, None) + check("driver_type", "handle", None) + check("driver_wrpolicy", None, None) check("source", "/foo/bar", "/new/path") check("target", "/bar/baz", "/new/target") @@ -899,21 +899,21 @@ class XMLParseTest(unittest.TestCase): check = self._make_checker(dev3) check("type", "mount", None) check("accessmode", "squash", None) - check("driver", "path", "handle") - check("wrpolicy", "immediate", None) + check("driver_type", "path", "handle") + check("driver_wrpolicy", "immediate", None) check("readonly", False, True) check = self._make_checker(dev4) check("type", "mount", None) check("accessmode", "mapped", None) - check("driver", "path", "handle") - check("wrpolicy", None, "immediate") + check("driver_type", "path", "handle") + check("driver_wrpolicy", None, "immediate") check("readonly", False, True) check = self._make_checker(dev5) check("type", "ram") check("source", "1024", 123) - check("units", "MB", "KiB") + check("source_units", "MB", "KiB") check = self._make_checker(dev6) check("source", "/foo/bar", "/dev/new") @@ -923,8 +923,8 @@ class XMLParseTest(unittest.TestCase): check = self._make_checker(dev7) check("type", "file") check("accessmode", "passthrough", None) - check("driver", "nbd", "loop") - check("format", "qcow", "raw") + check("driver_type", "nbd", "loop") + check("driver_format", "qcow", "raw") check("source", "/foo/bar.img", "/foo/bar.raw") check("readonly", False, True) diff --git a/virtManager/device/fsdetails.py b/virtManager/device/fsdetails.py index e0406b50..16cf3a69 100644 --- a/virtManager/device/fsdetails.py +++ b/virtManager/device/fsdetails.py @@ -160,9 +160,9 @@ class vmmFSDetails(vmmGObjectUI): self.set_config_value("fs-type", dev.type) self.set_config_value("fs-mode", dev.accessmode) - self.set_config_value("fs-driver", dev.driver) - self.set_config_value("fs-wrpolicy", dev.wrpolicy) - self.set_config_value("fs-format", dev.format) + self.set_config_value("fs-driver", dev.driver_type) + self.set_config_value("fs-wrpolicy", dev.driver_wrpolicy) + self.set_config_value("fs-format", dev.driver_format) if dev.type != DeviceFilesystem.TYPE_RAM: self.widget("fs-source").set_text(dev.source) else: @@ -280,7 +280,7 @@ class vmmFSDetails(vmmGObjectUI): dev = DeviceFilesystem(conn) if fstype == DeviceFilesystem.TYPE_RAM: dev.source = usage - dev.units = 'MiB' + dev.source_units = 'MiB' else: dev.source = source dev.target = target @@ -292,13 +292,13 @@ class vmmFSDetails(vmmGObjectUI): if readonly: dev.readonly = readonly if driver: - dev.driver = driver + dev.driver_type = driver if driver == DeviceFilesystem.DRIVER_LOOP: - dev.format = "raw" + dev.driver_format = "raw" elif driver == DeviceFilesystem.DRIVER_NBD: - dev.format = fsformat + dev.driver_format = fsformat if wrpolicy: - dev.wrpolicy = wrpolicy + dev.driver_wrpolicy = wrpolicy dev.validate() return dev diff --git a/virtManager/object/domain.py b/virtManager/object/domain.py index 60e837e6..25c0c02f 100644 --- a/virtManager/object/domain.py +++ b/virtManager/object/domain.py @@ -932,11 +932,11 @@ class vmmDomain(vmmLibvirtObject): # pylint: disable=maybe-no-member editdev.type = newdev.type editdev.accessmode = newdev.accessmode - editdev.wrpolicy = newdev.wrpolicy - editdev.driver = newdev.driver - editdev.format = newdev.format + editdev.driver_wrpolicy = newdev.driver_wrpolicy + editdev.driver_type = newdev.driver_type + editdev.driver_format = newdev.driver_format editdev.readonly = newdev.readonly - editdev.units = newdev.units + editdev.source_units = newdev.source_units editdev.source = newdev.source editdev.target = newdev.target diff --git a/virtinst/cli.py b/virtinst/cli.py index 11d541e6..9d6e7b26 100644 --- a/virtinst/cli.py +++ b/virtinst/cli.py @@ -4096,9 +4096,38 @@ class ParserFilesystem(VirtCLIParser): cls.add_arg("type", "type") cls.add_arg("accessmode", "accessmode") + cls.add_arg("model", "model") + cls.add_arg("multidevs", "multidevs") + cls.add_arg("readonly", "readonly", is_onoff=True) + cls.add_arg("space_hard_limit", "space_hard_limit") + cls.add_arg("space_soft_limit", "space_soft_limit") + cls.add_arg("source", "source") cls.add_arg("target", "target") + cls.add_arg("source.file", "source_file") + cls.add_arg("source.dir", "source_dir") + cls.add_arg("source.dev", "source_dev") + cls.add_arg("source.name", "source_name") + cls.add_arg("source.pool", "source_pool") + cls.add_arg("source.volume", "source_volume") + cls.add_arg("source.units", "source_units") + cls.add_arg("source.usage", "source_usage") + + cls.add_arg("target.dir", "target_dir") + + cls.add_arg("binary.path", "binary_path") + cls.add_arg("binary.xattr", "binary_xattr", is_onoff=True) + cls.add_arg("binary.cache.mode", "binary_cache_mode") + cls.add_arg("binary.lock.posix", "binary_lock_posix", is_onoff=True) + cls.add_arg("binary.lock.flock", "binary_lock_flock", is_onoff=True) + + cls.add_arg("driver.format", "driver_format") + cls.add_arg("driver.name", "driver_name") + cls.add_arg("driver.queue", "driver_queue") + cls.add_arg("driver.type", "driver_type") + cls.add_arg("driver.wrpolicy", "driver_wrpolicy") + ################### # --video parsing # diff --git a/virtinst/devices/filesystem.py b/virtinst/devices/filesystem.py index a5d6c430..fb624c5d 100644 --- a/virtinst/devices/filesystem.py +++ b/virtinst/devices/filesystem.py @@ -35,31 +35,46 @@ class DeviceFilesystem(Device): _type_prop = XMLProperty("./@type") accessmode = XMLProperty("./@accessmode") - wrpolicy = XMLProperty("./driver/@wrpolicy") - driver = XMLProperty("./driver/@type") - format = XMLProperty("./driver/@format") - + model = XMLProperty("./@model") readonly = XMLProperty("./readonly", is_bool=True) + multidevs = XMLProperty("./@multidevs") + space_hard_limit = XMLProperty("./space_hard_limit") + space_soft_limit = XMLProperty("./space_soft_limit") - units = XMLProperty("./source/@units") - target = XMLProperty("./target/@dir") + driver_wrpolicy = XMLProperty("./driver/@wrpolicy") + driver_type = XMLProperty("./driver/@type") + driver_format = XMLProperty("./driver/@format") + driver_queue = XMLProperty("./driver/@queue") + driver_name = XMLProperty("./driver/@name") + + target_dir = XMLProperty("./target/@dir") + + source_dir = XMLProperty("./source/@dir") + source_name = XMLProperty("./source/@name") + source_file = XMLProperty("./source/@file") + source_dev = XMLProperty("./source/@dev") + source_usage = XMLProperty("./source/@usage") + source_units = XMLProperty("./source/@units") + source_pool = XMLProperty("./source/@pool") + source_volume = XMLProperty("./source/@volume") + + binary_path = XMLProperty("./binary/@path") + binary_xattr = XMLProperty("./binary/@xattr", is_onoff=True) + binary_cache_mode = XMLProperty("./binary/cache/@mode") + binary_lock_posix = XMLProperty("./binary/lock/@posix", is_onoff=True) + binary_lock_flock = XMLProperty("./binary/lock/@flock", is_onoff=True) - _source_dir = XMLProperty("./source/@dir") - _source_name = XMLProperty("./source/@name") - _source_file = XMLProperty("./source/@file") - _source_dev = XMLProperty("./source/@dev") - _source_usage = XMLProperty("./source/@usage") def _type_to_source_prop(self): if self.type == DeviceFilesystem.TYPE_TEMPLATE: - return "_source_name" + return "source_name" elif self.type == DeviceFilesystem.TYPE_FILE: - return "_source_file" + return "source_file" elif self.type == DeviceFilesystem.TYPE_BLOCK: - return "_source_dev" + return "source_dev" elif self.type == DeviceFilesystem.TYPE_RAM: - return "_source_usage" + return "source_usage" else: - return "_source_dir" + return "source_dir" def _get_source(self): return getattr(self, self._type_to_source_prop()) @@ -67,6 +82,12 @@ class DeviceFilesystem(Device): return setattr(self, self._type_to_source_prop(), val) source = property(_get_source, _set_source) + def _get_target(self): + return self.target_dir + def _set_target(self, val): + self.target_dir = val + target = property(_get_target, _set_target) + def _get_type(self): return getattr(self, '_type_prop') def _set_type(self, val):