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')