From 619cd0a9c733125d8c2bac10c8b0b40e00bd2594 Mon Sep 17 00:00:00 2001 From: Callum Dickinson Date: Fri, 28 Feb 2025 13:43:54 +1300 Subject: [PATCH] Add more flavor metadata to libvirt guest XML This change adds the the following new information to the existing flavor metadata structure in the libvirt guest XML: * Flavor ID * Extra specs Downstream clients that query this guest XML such as Ceilometer may also require this information. If it's not defined in this metadata, clients are forced to perform a Nova API query just to fetch this additional information. This change should almost eliminate the need to perform such API queries. Signed-off-by: Callum Dickinson Implements: blueprint xml-image-meta Change-Id: I249bc117a796f28e9929e12707a5afb6c869eb89 --- nova/tests/unit/virt/ironic/utils.py | 3 + nova/tests/unit/virt/libvirt/test_config.py | 93 ++++++++++++++++++- nova/tests/unit/virt/libvirt/test_driver.py | 75 +++++++++++---- nova/virt/driver.py | 2 + nova/virt/libvirt/config.py | 25 +++++ nova/virt/libvirt/driver.py | 2 + .../bp-xml-image-meta-037f4eba59f0121e.yaml | 15 +++ 7 files changed, 197 insertions(+), 18 deletions(-) create mode 100644 releasenotes/notes/bp-xml-image-meta-037f4eba59f0121e.yaml diff --git a/nova/tests/unit/virt/ironic/utils.py b/nova/tests/unit/virt/ironic/utils.py index 185cbbf173..a521635197 100644 --- a/nova/tests/unit/virt/ironic/utils.py +++ b/nova/tests/unit/virt/ironic/utils.py @@ -31,6 +31,7 @@ TEST_IMAGE_UUID = "cccccccc-cccc-cccc-cccc-cccccccccccc" TEST_IMAGE_NAME = "test-image" TEST_FLAVOR_ID = 1 TEST_FLAVOR_NAME = "fake.flavor" +TEST_FLAVOR_FLAVORID = "iiiiiiii-iiii-iiii-iiii-iiiiiiiiiiii" TEST_FLAVOR_EXTRA_SPECS = { 'baremetal:deploy_kernel_id': 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'baremetal:deploy_ramdisk_id': 'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'} @@ -226,6 +227,8 @@ def get_test_instance_driver_metadata(**kw): properties={}) default_flavor_meta = driver.FlavorMeta( name=kw.get('flavor_name', TEST_FLAVOR_NAME), + flavorid=kw.get('flavor_flavorid', + TEST_FLAVOR_FLAVORID), memory_mb=kw.get('flavor_memorymb', TEST_FLAVOR_MEMORYMB), vcpus=kw.get('flavor_vcpus', TEST_FLAVOR_VCPUS), diff --git a/nova/tests/unit/virt/libvirt/test_config.py b/nova/tests/unit/virt/libvirt/test_config.py index 1d772f5432..90be09354e 100644 --- a/nova/tests/unit/virt/libvirt/test_config.py +++ b/nova/tests/unit/virt/libvirt/test_config.py @@ -4117,6 +4117,7 @@ class LibvirtConfigGuestMetadataNovaTest(LibvirtConfigBaseTest): flavor = config.LibvirtConfigGuestMetaNovaFlavor() flavor.name = "m1.lowgravity" + flavor.id = "f719a0dd-4b43-4efe-8336-48ef74099ad4" flavor.vcpus = 8 flavor.memory = 2048 flavor.swap = 10 @@ -4152,12 +4153,102 @@ class LibvirtConfigGuestMetadataNovaTest(LibvirtConfigBaseTest): moonbuggy 2009-02-13 23:31:30 - + 2048 50 10 10 8 + + + + buzz + moonshot + + + + + + + + + + + + + + + + """) + + def test_config_metadata_flavor_extra_specs(self): + meta = config.LibvirtConfigGuestMetaNovaInstance() + meta.package = "2014.2.3" + meta.name = "moonbuggy" + meta.creationTime = 1234567890 + meta.roottype = "image" + meta.rootid = "fe55c69a-8b2e-4bbc-811a-9ad2023a0426" + + owner = config.LibvirtConfigGuestMetaNovaOwner() + owner.userid = "3472c2a6-de91-4fb5-b618-42bc781ef670" + owner.username = "buzz" + owner.projectid = "f241e906-010e-4917-ae81-53f4fb8aa021" + owner.projectname = "moonshot" + + meta.owner = owner + + flavor = config.LibvirtConfigGuestMetaNovaFlavor() + flavor.name = "m1.lowgravity" + flavor.id = "f719a0dd-4b43-4efe-8336-48ef74099ad4" + flavor.vcpus = 8 + flavor.memory = 2048 + flavor.swap = 10 + flavor.disk = 50 + flavor.ephemeral = 10 + flavor.extra_specs = {"hw_rng:allowed": "true"} + + meta.flavor = flavor + + meta.ports = config.LibvirtConfigGuestMetaNovaPorts( + ports=[ + config.LibvirtConfigGuestMetaNovaPort( + '567a4527-b0e4-4d0a-bcc2-71fda37897f7', + ips=[ + config.LibvirtConfigGuestMetaNovaIp( + 'fixed', '192.168.1.1', '4'), + config.LibvirtConfigGuestMetaNovaIp( + 'fixed', 'fe80::f95c:b030:7094', '6'), + config.LibvirtConfigGuestMetaNovaIp( + 'floating', '11.22.33.44', '4')]), + config.LibvirtConfigGuestMetaNovaPort( + 'a3ca97e2-0cf9-4159-9bfc-afd55bc13ead', + ips=[ + config.LibvirtConfigGuestMetaNovaIp( + 'fixed', '10.0.0.1', '4'), + config.LibvirtConfigGuestMetaNovaIp( + 'fixed', 'fdf8:f53b:82e4::52', '6'), + config.LibvirtConfigGuestMetaNovaIp( + 'floating', '1.2.3.4', '4')])]) + + xml = meta.to_xml() + self.assertXmlEqual(xml, """ + + + moonbuggy + 2009-02-13 23:31:30 + + 2048 + 50 + 10 + 10 + 8 + + true +