libvirt: ensure LibvirtConfigGuestDisk parses readonly/shareable flags

The LibvirtConfigGuestDisk class did not handle parsing of the
readonly flag and was missing support for the shareable flag
entirely. Add support for dealing with both.

Related-bug: #1429220
Change-Id: I69df232951c99f6c79f2c2c0ee95327ca872624e
This commit is contained in:
Daniel P. Berrange 2015-07-28 16:58:01 +01:00
parent da33ab4f7b
commit f67b8fd5ce
2 changed files with 77 additions and 25 deletions

View File

@ -566,6 +566,76 @@ class LibvirtConfigGuestDiskTest(LibvirtConfigBaseTest):
self.assertEqual(obj.source_path, '/tmp/hello')
self.assertEqual(obj.target_dev, '/dev/hda')
self.assertEqual(obj.target_bus, 'ide')
self.assertFalse(obj.readonly)
self.assertFalse(obj.shareable)
def test_config_file_readonly(self):
obj = config.LibvirtConfigGuestDisk()
obj.source_type = "file"
obj.source_path = "/tmp/hello"
obj.target_dev = "/dev/hda"
obj.target_bus = "ide"
obj.readonly = True
xml = obj.to_xml()
self.assertXmlEqual(xml, """
<disk type="file" device="disk">
<source file="/tmp/hello"/>
<target bus="ide" dev="/dev/hda"/>
<readonly/>
</disk>""")
def test_config_file_parse_readonly(self):
xml = """<disk type="file" device="disk">
<source file="/tmp/hello"/>
<target bus="ide" dev="/dev/hda"/>
<readonly/>
</disk>"""
xmldoc = etree.fromstring(xml)
obj = config.LibvirtConfigGuestDisk()
obj.parse_dom(xmldoc)
self.assertEqual(obj.source_type, 'file')
self.assertEqual(obj.source_path, '/tmp/hello')
self.assertEqual(obj.target_dev, '/dev/hda')
self.assertEqual(obj.target_bus, 'ide')
self.assertTrue(obj.readonly)
self.assertFalse(obj.shareable)
def test_config_file_shareable(self):
obj = config.LibvirtConfigGuestDisk()
obj.source_type = "file"
obj.source_path = "/tmp/hello"
obj.target_dev = "/dev/hda"
obj.target_bus = "ide"
obj.shareable = True
xml = obj.to_xml()
self.assertXmlEqual(xml, """
<disk type="file" device="disk">
<source file="/tmp/hello"/>
<target bus="ide" dev="/dev/hda"/>
<shareable/>
</disk>""")
def test_config_file_parse_shareable(self):
xml = """<disk type="file" device="disk">
<source file="/tmp/hello"/>
<target bus="ide" dev="/dev/hda"/>
<shareable/>
</disk>"""
xmldoc = etree.fromstring(xml)
obj = config.LibvirtConfigGuestDisk()
obj.parse_dom(xmldoc)
self.assertEqual(obj.source_type, 'file')
self.assertEqual(obj.source_path, '/tmp/hello')
self.assertEqual(obj.target_dev, '/dev/hda')
self.assertEqual(obj.target_bus, 'ide')
self.assertFalse(obj.readonly)
self.assertTrue(obj.shareable)
def test_config_file_serial(self):
obj = config.LibvirtConfigGuestDisk()
@ -2136,31 +2206,6 @@ class LibvirtConfigNodeDevicePciCapTest(LibvirtConfigBaseTest):
self.assertEqual(obj.fun_capability[1].device_addrs,
[(0, 10, 1, 1), ])
def test_config_read_only_disk(self):
obj = config.LibvirtConfigGuestDisk()
obj.source_type = "disk"
obj.source_device = "disk"
obj.driver_name = "kvm"
obj.target_dev = "/dev/hdc"
obj.target_bus = "virtio"
obj.readonly = True
xml = obj.to_xml()
self.assertXmlEqual(xml, """
<disk type="disk" device="disk">
<driver name="kvm"/>
<target bus="virtio" dev="/dev/hdc"/>
<readonly/>
</disk>""")
obj.readonly = False
xml = obj.to_xml()
self.assertXmlEqual(xml, """
<disk type="disk" device="disk">
<driver name="kvm"/>
<target bus="virtio" dev="/dev/hdc"/>
</disk>""")
class LibvirtConfigNodeDevicePciSubFunctionCap(LibvirtConfigBaseTest):

View File

@ -731,6 +731,7 @@ class LibvirtConfigGuestDisk(LibvirtConfigGuestDevice):
self.logical_block_size = None
self.physical_block_size = None
self.readonly = False
self.shareable = False
self.snapshot = None
self.backing_store = None
@ -832,6 +833,8 @@ class LibvirtConfigGuestDisk(LibvirtConfigGuestDevice):
if self.readonly:
dev.append(etree.Element("readonly"))
if self.shareable:
dev.append(etree.Element("shareable"))
return dev
@ -875,6 +878,10 @@ class LibvirtConfigGuestDisk(LibvirtConfigGuestDevice):
b = LibvirtConfigGuestDiskBackingStore()
b.parse_dom(c)
self.backing_store = b
elif c.tag == 'readonly':
self.readonly = True
elif c.tag == 'shareable':
self.shareable = True
class LibvirtConfigGuestDiskBackingStore(LibvirtConfigObject):