From c7eac94fc53b02bb890638364f14fbbf361e478a Mon Sep 17 00:00:00 2001 From: Sean Mooney Date: Fri, 7 Mar 2025 18:08:43 +0000 Subject: [PATCH] only show standard image properties in server show. nova stopped supporting custom image properties many years ago with the introduction of ovo. when the image property show feature was added it incorrectly filtered the instance_system_metadata table for the image prefix but didnt restrict the responce to only standard image properties This change adds that filtering and fixes minor issues with the responce schema validation. Related-Bug: #2098384 Change-Id: I11a8783b02f35b7dfc964bf49f1a8a0a2469abc3 Signed-off-by: Sean Mooney --- .../v2.100/server-action-rebuild-resp.json | 9 +------- .../servers/v2.100/server-get-resp.json | 9 +------- .../servers/v2.100/server-update-resp.json | 9 +------- .../servers/v2.100/servers-details-resp.json | 9 +------- .../v2.98/server-action-rebuild-resp.json | 9 +------- .../servers/v2.98/server-get-resp.json | 9 +------- .../servers/v2.98/server-update-resp.json | 9 +------- .../servers/v2.98/servers-details-resp.json | 9 +------- nova/api/openstack/compute/schemas/servers.py | 6 ++--- nova/api/openstack/compute/views/servers.py | 23 +++++++++++-------- .../server-action-rebuild-resp.json.tpl | 9 +------- .../servers/v2.100/server-get-resp.json.tpl | 9 +------- .../v2.100/server-update-resp.json.tpl | 9 +------- .../v2.100/servers-details-resp.json.tpl | 9 +------- .../v2.98/server-action-rebuild-resp.json.tpl | 9 +------- .../v2.98/server-details-resp.json.tpl | 9 +------- .../servers/v2.98/server-get-resp.json.tpl | 9 +------- .../servers/v2.98/server-update-resp.json.tpl | 9 +------- .../v2.98/servers-details-resp.json.tpl | 9 +------- 19 files changed, 33 insertions(+), 149 deletions(-) diff --git a/doc/api_samples/servers/v2.100/server-action-rebuild-resp.json b/doc/api_samples/servers/v2.100/server-action-rebuild-resp.json index a44dc1327e..29a8b10b5c 100644 --- a/doc/api_samples/servers/v2.100/server-action-rebuild-resp.json +++ b/doc/api_samples/servers/v2.100/server-action-rebuild-resp.json @@ -45,14 +45,7 @@ ], "properties": { "architecture": "x86_64", - "auto_disk_config": "True", - "base_image_ref": "70a599e0-31e7-49b7-b260-868f441e862b", - "container_format": "ova", - "disk_format": "vhd", - "kernel_id": "nokernel", - "min_disk": "1", - "min_ram": "0", - "ramdisk_id": "nokernel" + "auto_disk_config": "True" } }, "key_name": null, diff --git a/doc/api_samples/servers/v2.100/server-get-resp.json b/doc/api_samples/servers/v2.100/server-get-resp.json index c68a656e48..6d5c28b99d 100644 --- a/doc/api_samples/servers/v2.100/server-get-resp.json +++ b/doc/api_samples/servers/v2.100/server-get-resp.json @@ -37,14 +37,7 @@ ], "properties": { "architecture": "x86_64", - "auto_disk_config": "True", - "base_image_ref": "70a599e0-31e7-49b7-b260-868f441e862b", - "container_format": "ova", - "disk_format": "vhd", - "kernel_id": "nokernel", - "min_disk": "1", - "min_ram": "0", - "ramdisk_id": "nokernel" + "auto_disk_config": "True" } }, "key_name": null, diff --git a/doc/api_samples/servers/v2.100/server-update-resp.json b/doc/api_samples/servers/v2.100/server-update-resp.json index d4cad62fa0..40833339f9 100644 --- a/doc/api_samples/servers/v2.100/server-update-resp.json +++ b/doc/api_samples/servers/v2.100/server-update-resp.json @@ -37,14 +37,7 @@ ], "properties": { "architecture": "x86_64", - "auto_disk_config": "True", - "base_image_ref": "70a599e0-31e7-49b7-b260-868f441e862b", - "container_format": "ova", - "disk_format": "vhd", - "kernel_id": "nokernel", - "min_disk": "1", - "min_ram": "0", - "ramdisk_id": "nokernel" + "auto_disk_config": "True" } }, "key_name": null, diff --git a/doc/api_samples/servers/v2.100/servers-details-resp.json b/doc/api_samples/servers/v2.100/servers-details-resp.json index 28bbef41a5..e9e4700f42 100644 --- a/doc/api_samples/servers/v2.100/servers-details-resp.json +++ b/doc/api_samples/servers/v2.100/servers-details-resp.json @@ -36,14 +36,7 @@ ], "properties": { "architecture": "x86_64", - "auto_disk_config": "True", - "base_image_ref": "70a599e0-31e7-49b7-b260-868f441e862b", - "container_format": "ova", - "disk_format": "vhd", - "kernel_id": "nokernel", - "min_disk": "1", - "min_ram": "0", - "ramdisk_id": "nokernel" + "auto_disk_config": "True" } }, "key_name": null, diff --git a/doc/api_samples/servers/v2.98/server-action-rebuild-resp.json b/doc/api_samples/servers/v2.98/server-action-rebuild-resp.json index 559e3ddf74..a1556272bc 100644 --- a/doc/api_samples/servers/v2.98/server-action-rebuild-resp.json +++ b/doc/api_samples/servers/v2.98/server-action-rebuild-resp.json @@ -45,14 +45,7 @@ ], "properties": { "architecture": "x86_64", - "auto_disk_config": "True", - "base_image_ref": "70a599e0-31e7-49b7-b260-868f441e862b", - "container_format": "ova", - "disk_format": "vhd", - "kernel_id": "nokernel", - "min_disk": "1", - "min_ram": "0", - "ramdisk_id": "nokernel" + "auto_disk_config": "True" } }, "key_name": null, diff --git a/doc/api_samples/servers/v2.98/server-get-resp.json b/doc/api_samples/servers/v2.98/server-get-resp.json index 252d30d407..ea8acac771 100644 --- a/doc/api_samples/servers/v2.98/server-get-resp.json +++ b/doc/api_samples/servers/v2.98/server-get-resp.json @@ -37,14 +37,7 @@ ], "properties": { "architecture": "x86_64", - "auto_disk_config": "True", - "base_image_ref": "70a599e0-31e7-49b7-b260-868f441e862b", - "container_format": "ova", - "disk_format": "vhd", - "kernel_id": "nokernel", - "min_disk": "1", - "min_ram": "0", - "ramdisk_id": "nokernel" + "auto_disk_config": "True" } }, "key_name": null, diff --git a/doc/api_samples/servers/v2.98/server-update-resp.json b/doc/api_samples/servers/v2.98/server-update-resp.json index d92b16a435..b012a5b43c 100644 --- a/doc/api_samples/servers/v2.98/server-update-resp.json +++ b/doc/api_samples/servers/v2.98/server-update-resp.json @@ -44,14 +44,7 @@ ], "properties": { "architecture": "x86_64", - "auto_disk_config": "True", - "base_image_ref": "70a599e0-31e7-49b7-b260-868f441e862b", - "container_format": "ova", - "disk_format": "vhd", - "kernel_id": "nokernel", - "min_disk": "1", - "min_ram": "0", - "ramdisk_id": "nokernel" + "auto_disk_config": "True" } }, "key_name": null, diff --git a/doc/api_samples/servers/v2.98/servers-details-resp.json b/doc/api_samples/servers/v2.98/servers-details-resp.json index 7555549621..7014e8b2b1 100644 --- a/doc/api_samples/servers/v2.98/servers-details-resp.json +++ b/doc/api_samples/servers/v2.98/servers-details-resp.json @@ -36,14 +36,7 @@ ], "properties": { "architecture": "x86_64", - "auto_disk_config": "True", - "base_image_ref": "70a599e0-31e7-49b7-b260-868f441e862b", - "container_format": "ova", - "disk_format": "vhd", - "kernel_id": "nokernel", - "min_disk": "1", - "min_ram": "0", - "ramdisk_id": "nokernel" + "auto_disk_config": "True" } }, "key_name": null, diff --git a/nova/api/openstack/compute/schemas/servers.py b/nova/api/openstack/compute/schemas/servers.py index 38e88cc6e3..973dddc9c0 100644 --- a/nova/api/openstack/compute/schemas/servers.py +++ b/nova/api/openstack/compute/schemas/servers.py @@ -1216,10 +1216,10 @@ rebuild_response_v298['properties']['server']['properties']['image'][ 'patternProperties': { '^[a-zA-Z0-9_:. ]{1,255}$': { 'type': 'string', - 'max_Length': 255, - }, + 'maxLength': 255, }, - 'additionalProperties': False, + }, + 'additionalProperties': False, }, }) diff --git a/nova/api/openstack/compute/views/servers.py b/nova/api/openstack/compute/views/servers.py index 444688a7fd..481122ba37 100644 --- a/nova/api/openstack/compute/views/servers.py +++ b/nova/api/openstack/compute/views/servers.py @@ -14,6 +14,8 @@ # License for the specific language governing permissions and limitations # under the License. +import itertools + from oslo_log import log as logging from oslo_serialization import jsonutils @@ -634,16 +636,17 @@ class ViewBuilder(common.ViewBuilder): } if api_version_request.is_supported(request, '2.98'): - image_props = {} - for key, value in instance.system_metadata.items(): - if key.startswith(utils.SM_IMAGE_PROP_PREFIX): - # remove prefix 'image_' at start of key, so that - # key 'image_' becomes '' - k = key.partition('_')[2] - image_props[k] = value - - image['properties'] = image_props - + prefix_len = len(utils.SM_IMAGE_PROP_PREFIX) + # allow legacy names if that is what were stored in metadata + std_fields = set(itertools.chain( + objects.ImageMetaProps.fields.keys(), + objects.ImageMetaProps._legacy_property_map.keys() + )) + image['properties'] = { + key[prefix_len:]: value for key, value in + instance.system_metadata.items() + if (key.startswith(utils.SM_IMAGE_PROP_PREFIX) and + key[prefix_len:] in std_fields and value is not None)} return image else: return "" diff --git a/nova/tests/functional/api_sample_tests/api_samples/servers/v2.100/server-action-rebuild-resp.json.tpl b/nova/tests/functional/api_sample_tests/api_samples/servers/v2.100/server-action-rebuild-resp.json.tpl index 034fa944f5..33d2955bde 100644 --- a/nova/tests/functional/api_sample_tests/api_samples/servers/v2.100/server-action-rebuild-resp.json.tpl +++ b/nova/tests/functional/api_sample_tests/api_samples/servers/v2.100/server-action-rebuild-resp.json.tpl @@ -45,14 +45,7 @@ ], "properties": { "architecture": "x86_64", - "auto_disk_config": "True", - "base_image_ref": "%(uuid)s", - "container_format": "ova", - "disk_format": "vhd", - "kernel_id": "nokernel", - "min_disk": "1", - "min_ram": "0", - "ramdisk_id": "nokernel" + "auto_disk_config": "True" } }, "key_name": null, diff --git a/nova/tests/functional/api_sample_tests/api_samples/servers/v2.100/server-get-resp.json.tpl b/nova/tests/functional/api_sample_tests/api_samples/servers/v2.100/server-get-resp.json.tpl index 459f166ac4..9208297263 100644 --- a/nova/tests/functional/api_sample_tests/api_samples/servers/v2.100/server-get-resp.json.tpl +++ b/nova/tests/functional/api_sample_tests/api_samples/servers/v2.100/server-get-resp.json.tpl @@ -38,14 +38,7 @@ ], "properties": { "architecture": "x86_64", - "auto_disk_config": "True", - "base_image_ref": "%(uuid)s", - "container_format": "ova", - "disk_format": "vhd", - "kernel_id": "nokernel", - "min_disk": "1", - "min_ram": "0", - "ramdisk_id": "nokernel" + "auto_disk_config": "True" } }, "key_name": null, diff --git a/nova/tests/functional/api_sample_tests/api_samples/servers/v2.100/server-update-resp.json.tpl b/nova/tests/functional/api_sample_tests/api_samples/servers/v2.100/server-update-resp.json.tpl index c662e0e8c3..caef8cd28f 100644 --- a/nova/tests/functional/api_sample_tests/api_samples/servers/v2.100/server-update-resp.json.tpl +++ b/nova/tests/functional/api_sample_tests/api_samples/servers/v2.100/server-update-resp.json.tpl @@ -37,14 +37,7 @@ ], "properties": { "architecture": "x86_64", - "auto_disk_config": "True", - "base_image_ref": "%(uuid)s", - "container_format": "ova", - "disk_format": "vhd", - "kernel_id": "nokernel", - "min_disk": "1", - "min_ram": "0", - "ramdisk_id": "nokernel" + "auto_disk_config": "True" } }, "key_name": null, diff --git a/nova/tests/functional/api_sample_tests/api_samples/servers/v2.100/servers-details-resp.json.tpl b/nova/tests/functional/api_sample_tests/api_samples/servers/v2.100/servers-details-resp.json.tpl index f0bdf5ff38..3cb45747ba 100644 --- a/nova/tests/functional/api_sample_tests/api_samples/servers/v2.100/servers-details-resp.json.tpl +++ b/nova/tests/functional/api_sample_tests/api_samples/servers/v2.100/servers-details-resp.json.tpl @@ -37,14 +37,7 @@ ], "properties": { "architecture": "x86_64", - "auto_disk_config": "True", - "base_image_ref": "%(uuid)s", - "container_format": "ova", - "disk_format": "vhd", - "kernel_id": "nokernel", - "min_disk": "1", - "min_ram": "0", - "ramdisk_id": "nokernel" + "auto_disk_config": "True" } }, "key_name": null, diff --git a/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/server-action-rebuild-resp.json.tpl b/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/server-action-rebuild-resp.json.tpl index fa0e60cc00..85ce4ff4c7 100644 --- a/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/server-action-rebuild-resp.json.tpl +++ b/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/server-action-rebuild-resp.json.tpl @@ -45,14 +45,7 @@ ], "properties": { "architecture": "x86_64", - "auto_disk_config": "True", - "base_image_ref": "%(uuid)s", - "container_format": "ova", - "disk_format": "vhd", - "kernel_id": "nokernel", - "min_disk": "1", - "min_ram": "0", - "ramdisk_id": "nokernel" + "auto_disk_config": "True" } }, "key_name": null, diff --git a/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/server-details-resp.json.tpl b/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/server-details-resp.json.tpl index 38dbefebdb..e01ba4f6ec 100644 --- a/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/server-details-resp.json.tpl +++ b/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/server-details-resp.json.tpl @@ -37,14 +37,7 @@ ], "properties": { "architecture": "x86_64", - "auto_disk_config": "True", - "base_image_ref": "%(uuid)s", - "container_format": "ova", - "disk_format": "vhd", - "kernel_id": "nokernel", - "min_disk": "1", - "min_ram": "0", - "ramdisk_id": "nokernel" + "auto_disk_config": "True" } }, "key_name": null, diff --git a/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/server-get-resp.json.tpl b/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/server-get-resp.json.tpl index 1d9678524a..fbf2da9a1d 100644 --- a/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/server-get-resp.json.tpl +++ b/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/server-get-resp.json.tpl @@ -38,14 +38,7 @@ ], "properties": { "architecture": "x86_64", - "auto_disk_config": "True", - "base_image_ref": "%(uuid)s", - "container_format": "ova", - "disk_format": "vhd", - "kernel_id": "nokernel", - "min_disk": "1", - "min_ram": "0", - "ramdisk_id": "nokernel" + "auto_disk_config": "True" } }, "key_name": null, diff --git a/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/server-update-resp.json.tpl b/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/server-update-resp.json.tpl index aac2e4f0bf..b4bfd2f7eb 100644 --- a/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/server-update-resp.json.tpl +++ b/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/server-update-resp.json.tpl @@ -37,14 +37,7 @@ ], "properties": { "architecture": "x86_64", - "auto_disk_config": "True", - "base_image_ref": "%(uuid)s", - "container_format": "ova", - "disk_format": "vhd", - "kernel_id": "nokernel", - "min_disk": "1", - "min_ram": "0", - "ramdisk_id": "nokernel" + "auto_disk_config": "True" } }, "key_name": null, diff --git a/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/servers-details-resp.json.tpl b/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/servers-details-resp.json.tpl index fa1c6bbd17..fa49bc6b49 100644 --- a/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/servers-details-resp.json.tpl +++ b/nova/tests/functional/api_sample_tests/api_samples/servers/v2.98/servers-details-resp.json.tpl @@ -37,14 +37,7 @@ ], "properties": { "architecture": "x86_64", - "auto_disk_config": "True", - "base_image_ref": "%(uuid)s", - "container_format": "ova", - "disk_format": "vhd", - "kernel_id": "nokernel", - "min_disk": "1", - "min_ram": "0", - "ramdisk_id": "nokernel" + "auto_disk_config": "True" } }, "key_name": null,