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 a44dc1327e9e..29a8b10b5cdb 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 c68a656e486b..6d5c28b99d23 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 d4cad62fa0b3..40833339f947 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 28bbef41a507..e9e4700f4225 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 559e3ddf74b8..a1556272bc7c 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 252d30d407a8..ea8acac7716a 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 d92b16a435d7..b012a5b43c99 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 7555549621bb..7014e8b2b16e 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 38e88cc6e3db..973dddc9c04a 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 444688a7fd4e..481122ba378a 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 034fa944f56b..33d2955bdeab 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 459f166ac474..920829726350 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 c662e0e8c302..caef8cd28fe7 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 f0bdf5ff38f5..3cb45747ba6a 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 fa0e60cc000b..85ce4ff4c7ff 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 38dbefebdba5..e01ba4f6ecc6 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 1d9678524a9e..fbf2da9a1d48 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 aac2e4f0bf8b..b4bfd2f7eb2f 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 fa1c6bbd1702..fa49bc6b49d6 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,