From e1092323e216203b7a7004f787c4061f97fad355 Mon Sep 17 00:00:00 2001 From: Sahid Orentino Ferdjaoui Date: Tue, 25 Apr 2017 05:42:41 -0400 Subject: [PATCH] libvirt: update LibvirtConfigGuestDeviceAddress to provide XML This commit is adding a method format_dom() to the config object LibvirtConfigGuestDeviceAddress. That in the aim to provide full description of the controller used by the device. Closes-Bug: #1686116 Change-Id: I9620feffa74b8f7bc932eed03e3a60f46533681d (cherry picked from commit 724ca8227a23a918d1810f866af661ac2a0730a3) --- nova/tests/unit/virt/libvirt/test_config.py | 12 ++++++++++++ nova/virt/libvirt/config.py | 19 +++++++++++++++++++ 2 files changed, 31 insertions(+) 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')