diff --git a/nova/tests/unit/virt/libvirt/test_config.py b/nova/tests/unit/virt/libvirt/test_config.py index fdbac5d98d4d..7aad1c9ea154 100644 --- a/nova/tests/unit/virt/libvirt/test_config.py +++ b/nova/tests/unit/virt/libvirt/test_config.py @@ -1027,6 +1027,18 @@ class LibvirtConfigGuestDiskTest(LibvirtConfigBaseTest): obj.device_addr.unit)) self.assertIsNone(obj.device_addr.format_address()) + def test_config_disk_device_address_drive(self): + obj = config.LibvirtConfigGuestDeviceAddressDrive() + obj.controller = 1 + obj.bus = 2 + obj.target = 3 + obj.unit = 4 + + xml = """ +
+ """ + self.assertXmlEqual(xml, obj.to_xml()) + def test_config_disk_device_address_type_virtio_mmio(self): xml = """ diff --git a/nova/virt/libvirt/config.py b/nova/virt/libvirt/config.py index 5f215c89eb3c..2547607bdfca 100644 --- a/nova/virt/libvirt/config.py +++ b/nova/virt/libvirt/config.py @@ -1138,6 +1138,11 @@ class LibvirtConfigGuestDeviceAddress(LibvirtConfigObject): root_name='address', **kwargs) self.type = type + def format_dom(self): + xml = super(LibvirtConfigGuestDeviceAddress, self).format_dom() + xml.set("type", self.type) + return xml + @staticmethod def parse_dom(xmldoc): addr_type = xmldoc.get('type') @@ -1160,6 +1165,20 @@ class LibvirtConfigGuestDeviceAddressDrive(LibvirtConfigGuestDeviceAddress): self.target = None self.unit = None + def format_dom(self): + xml = super(LibvirtConfigGuestDeviceAddressDrive, self).format_dom() + + if self.controller is not None: + xml.set("controller", str(self.controller)) + if self.bus is not None: + xml.set("bus", str(self.bus)) + if self.target is not None: + xml.set("target", str(self.target)) + if self.unit is not None: + xml.set("unit", str(self.unit)) + + return xml + def parse_dom(self, xmldoc): self.controller = xmldoc.get('controller') self.bus = xmldoc.get('bus')