)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"de55bc23f455d67d300c3d7f9fa745296016cf3b","unresolved":true,"context_lines":[{"line_number":14,"context_line":"however that is not the same as the standard image properties"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"as a resut it exposed field that are not in line with the spec"},{"line_number":17,"context_line":"or vaild to show to the end user."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"this change simply ensure we use our ovo to retrieve only"},{"line_number":20,"context_line":"the standard image properties."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"6a4f730e_51dd1af5","line":17,"updated":"2025-02-28 10:14:26.000000000","message":"I agree that the merged implementation is not aligned with the intention of the spec. We made a false assumption that what nova stores in system_metadata is the one we want to show. But it seems nova stores a lot more than what nova uses and therefore what we want to show on this API. So there are multiple bugs to fix:\n1. fix the sever show API to only show those properties that nova really uses and not all that nova stores\n2. fix how nova stores the properties in system meta as that today can lead to issues at the time the properties are stored. This is #2098384","commit_id":"0eebb16923991739e5ffdc8d0897d9b3a2cca848"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0f270bc470e84d33ac40e57b4be4342c0c70406b","unresolved":true,"context_lines":[{"line_number":14,"context_line":"however that is not the same as the standard image properties"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"as a resut it exposed field that are not in line with the spec"},{"line_number":17,"context_line":"or vaild to show to the end user."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"this change simply ensure we use our ovo to retrieve only"},{"line_number":20,"context_line":"the standard image properties."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"b368beeb_0eef2332","line":17,"in_reply_to":"6a4f730e_51dd1af5","updated":"2025-03-06 14:19:30.000000000","message":"yep given i have confimred we do not have a secuirty issue due to the direct_url\n\ni was very close to proposing a revert when i first saw this merged without out using the object to filter and without any tempest testing.\n\n\ni think we can take  step back an adress this as normal bug fixes.","commit_id":"0eebb16923991739e5ffdc8d0897d9b3a2cca848"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"de3d707050935325625e59458c3ae7c27b1e0405","unresolved":false,"context_lines":[{"line_number":14,"context_line":"however that is not the same as the standard image properties"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"as a resut it exposed field that are not in line with the spec"},{"line_number":17,"context_line":"or vaild to show to the end user."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"this change simply ensure we use our ovo to retrieve only"},{"line_number":20,"context_line":"the standard image properties."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"87694ed0_6f8da237","line":17,"in_reply_to":"b368beeb_0eef2332","updated":"2025-08-11 09:46:23.000000000","message":"Acknowledged","commit_id":"0eebb16923991739e5ffdc8d0897d9b3a2cca848"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b4ca9deb8cfcdd36e7b98e300ac3ddaecbe03eb2","unresolved":true,"context_lines":[{"line_number":20,"context_line":"the standard image properties."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Depends-On: https://review.opendev.org/c/openstack/tempest/+/942492"},{"line_number":23,"context_line":"Closes-Bug: #2098384"},{"line_number":24,"context_line":"Change-Id: I11a8783b02f35b7dfc964bf49f1a8a0a2469abc3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"2c2cf6f9_a7b394e2","line":23,"updated":"2025-02-24 16:00:22.000000000","message":"this should probably be updated to Releated-Bug:\n\nsince that but is actully about not being able ot boot vms with invalid key/value lenghts.\n\nwhere as here im just fixign which keys are dispalyed reather then fully fixing it by rejecting or droping invalid keys.","commit_id":"0eebb16923991739e5ffdc8d0897d9b3a2cca848"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"de55bc23f455d67d300c3d7f9fa745296016cf3b","unresolved":true,"context_lines":[{"line_number":20,"context_line":"the standard image properties."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Depends-On: https://review.opendev.org/c/openstack/tempest/+/942492"},{"line_number":23,"context_line":"Closes-Bug: #2098384"},{"line_number":24,"context_line":"Change-Id: I11a8783b02f35b7dfc964bf49f1a8a0a2469abc3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"b0732afa_b7e13281","line":23,"in_reply_to":"2c2cf6f9_a7b394e2","updated":"2025-02-28 10:14:26.000000000","message":"Yes, this patch does not solve 2098384. So I agree to change this to Related-Bug","commit_id":"0eebb16923991739e5ffdc8d0897d9b3a2cca848"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95497b233611c1b55881a53157970cc8eb7e5f5f","unresolved":false,"context_lines":[{"line_number":20,"context_line":"the standard image properties."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Depends-On: https://review.opendev.org/c/openstack/tempest/+/942492"},{"line_number":23,"context_line":"Closes-Bug: #2098384"},{"line_number":24,"context_line":"Change-Id: I11a8783b02f35b7dfc964bf49f1a8a0a2469abc3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7137e05f_fd139aed","line":23,"in_reply_to":"b0732afa_b7e13281","updated":"2025-03-07 18:14:11.000000000","message":"Done","commit_id":"0eebb16923991739e5ffdc8d0897d9b3a2cca848"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bf935ef0332bb1fc6691405c5eb5c97a0a32c3c0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1a4426a0_e8c15c4f","updated":"2025-02-22 00:41:33.000000000","message":"this passes unit test but i want to also deploy this with devstack on monday and look at the responce with curl to confirm this is doing what i think it is.","commit_id":"a69f4171025957747733a484f221de95f5247ec7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"de55bc23f455d67d300c3d7f9fa745296016cf3b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f71c9354_88aca18f","updated":"2025-02-28 10:14:26.000000000","message":"I disagree of the schema change. I think we should not show nova internal data format of the properties but show the original format the user used when set it to glance.","commit_id":"0eebb16923991739e5ffdc8d0897d9b3a2cca848"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cf121c08b7d0581e767c2a20110d6f02f8b59005","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3f50b83a_b1d88eda","updated":"2025-02-24 14:52:22.000000000","message":"I\u0027m a bit conflicted about this. Perhaps it\u0027s my glance brain, but I was expecting what Rajesh initially had, i.e. it to match what I see on my image and thus what I would need to put on another image to boot something similar. If I need to set \u0027architecture\u0027 and not \u0027hw_architecture\u0027 on my image, isn\u0027t that going to be confusing to me to see it rendered as the latter here?","commit_id":"0eebb16923991739e5ffdc8d0897d9b3a2cca848"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"7f6e35b58f1d9227add624719ba9a7b1ed9f70d7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"26d39f7c_3baf485e","updated":"2025-02-22 01:20:48.000000000","message":"recheck dep updated","commit_id":"0eebb16923991739e5ffdc8d0897d9b3a2cca848"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4fbbaa26517ea20ee30dcda2f071890776555d3d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"dd965eb0_2cfb44e7","updated":"2025-02-22 10:38:12.000000000","message":"recheck unrelated libvirt error","commit_id":"0eebb16923991739e5ffdc8d0897d9b3a2cca848"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b4ca9deb8cfcdd36e7b98e300ac3ddaecbe03eb2","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"e27c6b59_d3e8a52b","in_reply_to":"3f50b83a_b1d88eda","updated":"2025-02-24 16:00:22.000000000","message":"form my perspective we should only be showing and storing the subset of image properties we actually support\n\nthe legacy names are there for upgrade reasons but not the cannonical represetation of the image prorpety. so 1 i think we should be showing the normaised set and 2 we should only be showing the keys we supprot in nova.\n\ni was discussing with gibi separately the fact we store glance properties not supported as image properties by our object in the db is a bug especially when they can exceed the column length.\n\nwe removed support for custom image properties when we intorduced the objects many years ago so when reviewign the spec my expection is we only show the novalised keys/values with all vlaue returned as strings.","commit_id":"0eebb16923991739e5ffdc8d0897d9b3a2cca848"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"90e5e9f0f4042d04622102b508e47516f47a56c1","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"691d1149_44b05735","in_reply_to":"f71c9354_88aca18f","updated":"2025-03-06 14:23:28.000000000","message":"nova is the canonical definition of the image properties, not glance for what its worth but my intent was to show the string representation.\n\nwe do not need to add null but that possibel today i belive when we tested this in tempest.\n\nthats where the update came form.\n\nmax_Length was incorrect orgianly as it should have been maxLength so that just a typo/bug.","commit_id":"0eebb16923991739e5ffdc8d0897d9b3a2cca848"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9c39874277238663b9255d7a50e85890e53b06f3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"40b09601_d7c6d4b2","updated":"2025-03-10 10:34:13.000000000","message":"Thanks @smooney@redhat.com. The patch looks OK to me now.","commit_id":"89107547459a7fc78faa6b7f3964eec7af688d31"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cbbfe5ab2eedb0561d43d2c121888c4cacf6a97d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"421b4d3b_865b69ab","updated":"2025-03-07 20:33:10.000000000","message":"the 2.100 micorversion also extened server show/detail/rebuild/update\nto add the schduler hints so i need to fix those tests too.","commit_id":"89107547459a7fc78faa6b7f3964eec7af688d31"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"559e0aae3d4eb324a6cff13acf85f98fd7a0f8a2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"19ce9388_74a13169","updated":"2025-03-11 14:09:20.000000000","message":"Sean if you don\u0027t mind splitting (and fixing the comma while you\u0027re at it) that would be cleaner to me. I\u0027ll be glad to +2+W that (or heck I can do it myself if you don\u0027t have time) the result since it won\u0027t be any different, just in two pieces.","commit_id":"c033c1cde50a1e551ca543926dd8784caaf0de45"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a146596382bc078f249f23d27ad9ec55ebd3036c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"ac6e49d5_45fcfa8a","updated":"2025-03-11 11:45:44.000000000","message":"still good","commit_id":"c033c1cde50a1e551ca543926dd8784caaf0de45"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b41e5ad39fd6a2b127ed9169a76c908e9c20a4a9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"fb6ad597_045aaea8","updated":"2025-03-11 15:03:18.000000000","message":"Proxying the previous +2 from gibi because Sean just removed one of the refactors to the next patch.","commit_id":"254c09d91229a1a1ffec22798482eb3708d1f11a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4d0cd989f30f69e872ab18683262841a8fbe11b1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"ef522a87_f980e9d2","updated":"2025-08-13 18:55:43.000000000","message":"I think the CI failure here is unfortunately legit, looks to be caused by a more recent commit that updated the signature of the `is_supported()` method:\n\nhttps://github.com/openstack/nova/commit/a722640b2fea2beba9de4455ee27d38171d56fed","commit_id":"c61489dafa6aa400beed810418869857ab4b6796"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"da9afb20b52e9cc3886866bada2be290a0b91b63","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"ba906ac0_ba237669","updated":"2025-07-24 18:03:10.000000000","message":"Trivial merge conflict resolution fast approving.","commit_id":"c61489dafa6aa400beed810418869857ab4b6796"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"de3d707050935325625e59458c3ae7c27b1e0405","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"8b4cac22_16f0eb7a","updated":"2025-08-11 09:46:23.000000000","message":"recheck","commit_id":"c61489dafa6aa400beed810418869857ab4b6796"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b0d3937b6db443b52820c57b2378ed9eeb6870ca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"961d314a_6f5dfebb","updated":"2025-08-13 13:07:04.000000000","message":"recheck","commit_id":"c61489dafa6aa400beed810418869857ab4b6796"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6de3ea910312ac70c8b543b3603658a3e3c11ef6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"158dc804_8381328a","in_reply_to":"ef522a87_f980e9d2","updated":"2025-08-13 20:20:56.000000000","message":"thanks i did have a chance to look at the failure since we got new results...\n\nthe fix ist trivial but tis not a merge conflict which is i guess why this was not obvious...  i have the unit tests passing and im wiatin gfor the funtional test then ill push.","commit_id":"c61489dafa6aa400beed810418869857ab4b6796"},{"author":{"_account_id":20733,"name":"Rajesh Tailor","email":"ratailor@redhat.com","username":"rajesht"},"change_message_id":"677ce4b7825614150d18fb786dfad51f0afa7541","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"a4d61d2e_cb86cd41","updated":"2025-08-20 05:18:19.000000000","message":"LGTM","commit_id":"c7eac94fc53b02bb890638364f14fbbf361e478a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"0181c0f4dd1febfbd9d5be7ab401bbdc721e2962","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"639a4cb6_b0c3cef9","updated":"2025-08-13 21:29:19.000000000","message":"Very trivial rebase had to be done manually, previously approved so re-approving","commit_id":"c7eac94fc53b02bb890638364f14fbbf361e478a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5c7de0c27f17a0ae0b8bc7b76d80ebe0bd4138aa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"aab5a7f0_76392dca","updated":"2025-08-19 10:11:40.000000000","message":"recheck multiple post failures","commit_id":"c7eac94fc53b02bb890638364f14fbbf361e478a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5f95e058a557bbb0e6d491394b28487b73ab4b7c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"8ca6ab1d_594be4ae","updated":"2025-08-14 17:44:17.000000000","message":"recheck nodepool errors","commit_id":"c7eac94fc53b02bb890638364f14fbbf361e478a"}],"nova/api/openstack/compute/schemas/servers.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"48e70f1e713cc99236ab36fabd1502fe94976e39","unresolved":true,"context_lines":[{"line_number":1241,"context_line":"                    {\u0027type\u0027: \u0027boolean\u0027, },"},{"line_number":1242,"context_line":"                    {"},{"line_number":1243,"context_line":"                        \u0027type\u0027: \u0027string\u0027,"},{"line_number":1244,"context_line":"                        \u0027max_Length\u0027: 255"},{"line_number":1245,"context_line":"                    },"},{"line_number":1246,"context_line":"                    {"},{"line_number":1247,"context_line":"                        \u0027type\u0027: \u0027array\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"c1d9962f_7d516824","line":1244,"range":{"start_line":1244,"start_character":25,"end_line":1244,"end_character":35},"updated":"2025-02-21 23:27:23.000000000","message":"I think this is the wrong key and it\u0027s supposed to be `maxLength`","commit_id":"1612e6f37180b00ed4151bc66c038869f31bc673"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"48e70f1e713cc99236ab36fabd1502fe94976e39","unresolved":true,"context_lines":[{"line_number":1248,"context_line":"                        \u0027items\u0027: {"},{"line_number":1249,"context_line":"                            \u0027type\u0027: \u0027string\u0027,"},{"line_number":1250,"context_line":"                        },"},{"line_number":1251,"context_line":"                    },"},{"line_number":1252,"context_line":"                ]"},{"line_number":1253,"context_line":"            },"},{"line_number":1254,"context_line":"        },"}],"source_content_type":"text/x-python","patch_set":2,"id":"4bc4c7d0_8b704126","line":1251,"updated":"2025-02-21 23:27:23.000000000","message":"This is also missing type `null` if it is possible for returned image properties to be None. I have been testing the spice series and I copied the 2.98 response schema into Tempest [1] and got this error with newer microversions:\n```\nft1.1: setUpClass (tempest.api.compute.admin.test_spice.SpiceDirectConsoleTestJSON)testtools.testresult.real._StringException: Traceback (most recent call last):\n  File \"/opt/stack/tempest/tempest/lib/common/rest_client.py\", line 1108, in validate_response\n    jsonschema.validate(body, body_schema,\n  File \"/opt/stack/tempest/.tox/tempest/lib/python3.11/site-packages/jsonschema/validators.py\", line 1332, in validate\n    raise error\njsonschema.exceptions.ValidationError: None is not of type \u0027string\u0027\n\nFailed validating \u0027type\u0027 in schema[0][\u0027properties\u0027][\u0027properties\u0027][\u0027patternProperties\u0027][\u0027^[a-zA-Z0-9_:. ]{1,255}$\u0027]:\n    {\u0027type\u0027: \u0027string\u0027, \u0027maxLength\u0027: 255}\n\nOn instance[\u0027properties\u0027][\u0027hw_input_bus\u0027]:\n    None\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/opt/stack/tempest/tempest/test.py\", line 185, in setUpClass\n    raise value.with_traceback(trace)\n  File \"/opt/stack/tempest/tempest/test.py\", line 178, in setUpClass\n    cls.resource_setup()\n  File \"/opt/stack/tempest/tempest/api/compute/admin/test_spice.py\", line 63, in resource_setup\n    cls.server \u003d cls.create_test_server(wait_until\u003d\"ACTIVE\")\n                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/opt/stack/tempest/tempest/api/compute/base.py\", line 243, in create_test_server\n    body, servers \u003d compute.create_test_server(\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/opt/stack/tempest/tempest/common/compute.py\", line 340, in create_test_server\n    with excutils.save_and_reraise_exception():\n  File \"/opt/stack/tempest/.tox/tempest/lib/python3.11/site-packages/oslo_utils/excutils.py\", line 227, in __exit__\n    self.force_reraise()\n  File \"/opt/stack/tempest/.tox/tempest/lib/python3.11/site-packages/oslo_utils/excutils.py\", line 200, in force_reraise\n    raise self.value\n  File \"/opt/stack/tempest/tempest/common/compute.py\", line 323, in create_test_server\n    server \u003d waiters.wait_for_server_status(\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/opt/stack/tempest/tempest/common/waiters.py\", line 65, in wait_for_server_status\n    body \u003d client.show_server(server_id)[\u0027server\u0027]\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/opt/stack/tempest/tempest/lib/services/compute/servers_client.py\", line 169, in show_server\n    self.validate_response(schema.get_server, resp, body)\n  File \"/opt/stack/tempest/tempest/lib/common/rest_client.py\", line 1113, in validate_response\n    raise exceptions.InvalidHTTPResponseBody(msg)\ntempest.lib.exceptions.InvalidHTTPResponseBody: HTTP response body is invalid json or xml\nDetails: HTTP response body is invalid (None is not of type \u0027string\u0027\n\nFailed validating \u0027type\u0027 in schema[0][\u0027properties\u0027][\u0027properties\u0027][\u0027patternProperties\u0027][\u0027^[a-zA-Z0-9_:. ]{1,255}$\u0027]:\n    {\u0027type\u0027: \u0027string\u0027, \u0027maxLength\u0027: 255}\n\nOn instance[\u0027properties\u0027][\u0027hw_input_bus\u0027]:\n    None)\n```\n\n[1] https://review.opendev.org/c/openstack/tempest/+/942492","commit_id":"1612e6f37180b00ed4151bc66c038869f31bc673"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1bf4259d2f80813ac51b530e5f4436c327adb7be","unresolved":true,"context_lines":[{"line_number":1248,"context_line":"                        \u0027items\u0027: {"},{"line_number":1249,"context_line":"                            \u0027type\u0027: \u0027string\u0027,"},{"line_number":1250,"context_line":"                        },"},{"line_number":1251,"context_line":"                    },"},{"line_number":1252,"context_line":"                ]"},{"line_number":1253,"context_line":"            },"},{"line_number":1254,"context_line":"        },"}],"source_content_type":"text/x-python","patch_set":2,"id":"097de388_30c9cf9f","line":1251,"in_reply_to":"4bc4c7d0_8b704126","updated":"2025-02-22 00:14:13.000000000","message":"ya i need ot be smarter then just calling to_dict()\nill replace it with a list comprehention that will convert all values to strings\nand only include keys if they are defiend.\n\nill also add a depend on to that tempest test to validate that we are not altering the respocne data types.","commit_id":"1612e6f37180b00ed4151bc66c038869f31bc673"},{"author":{"_account_id":20733,"name":"Rajesh Tailor","email":"ratailor@redhat.com","username":"rajesht"},"change_message_id":"5b31ea62eb32fdad6c558114f4d0c17be06b99a9","unresolved":true,"context_lines":[{"line_number":1237,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":1238,"context_line":"        \u0027patternProperties\u0027: {"},{"line_number":1239,"context_line":"            \u0027^[a-zA-Z0-9_:. ]{1,255}$\u0027: {"},{"line_number":1240,"context_line":"                \u0027oneOf\u0027: ["},{"line_number":1241,"context_line":"                    {\u0027type\u0027: \u0027string\u0027, \u0027maxLength\u0027: 255},"},{"line_number":1242,"context_line":"                    {\u0027type\u0027: \u0027null\u0027},"},{"line_number":1243,"context_line":"                ]"},{"line_number":1244,"context_line":"            },"},{"line_number":1245,"context_line":"        },"}],"source_content_type":"text/x-python","patch_set":4,"id":"c818d886_0719ef6a","line":1242,"range":{"start_line":1240,"start_character":15,"end_line":1242,"end_character":37},"updated":"2025-02-24 13:33:35.000000000","message":"IMO we should also include array type here, because \u0027traits_required\u0027 is of list type [1].\n\n[1] https://opendev.org/openstack/nova/src/commit/375d95565d594182c5472f710b3f7bd53f0746d4/nova/objects/image_meta.py#L614","commit_id":"0eebb16923991739e5ffdc8d0897d9b3a2cca848"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"de55bc23f455d67d300c3d7f9fa745296016cf3b","unresolved":true,"context_lines":[{"line_number":1237,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":1238,"context_line":"        \u0027patternProperties\u0027: {"},{"line_number":1239,"context_line":"            \u0027^[a-zA-Z0-9_:. ]{1,255}$\u0027: {"},{"line_number":1240,"context_line":"                \u0027oneOf\u0027: ["},{"line_number":1241,"context_line":"                    {\u0027type\u0027: \u0027string\u0027, \u0027maxLength\u0027: 255},"},{"line_number":1242,"context_line":"                    {\u0027type\u0027: \u0027null\u0027},"},{"line_number":1243,"context_line":"                ]"},{"line_number":1244,"context_line":"            },"},{"line_number":1245,"context_line":"        },"}],"source_content_type":"text/x-python","patch_set":4,"id":"e7201dc7_69863f48","line":1242,"range":{"start_line":1240,"start_character":15,"end_line":1242,"end_character":37},"in_reply_to":"0b5222d3_4f881947","updated":"2025-02-28 10:14:26.000000000","message":"I think the original intention of the spec was to show the glance image properties nova depends on. I think that means we should show the properties in the format glance shows them, not in the internal format nova parses the properties to. In glance all properties are string:string pairs. \n\nImagine the user wants to diff value of the same property between glance and nova API responses to see if the glance image was updated or not. If nova reports the value in different format then that diffing is lot harder to do.","commit_id":"0eebb16923991739e5ffdc8d0897d9b3a2cca848"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b4ca9deb8cfcdd36e7b98e300ac3ddaecbe03eb2","unresolved":true,"context_lines":[{"line_number":1237,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":1238,"context_line":"        \u0027patternProperties\u0027: {"},{"line_number":1239,"context_line":"            \u0027^[a-zA-Z0-9_:. ]{1,255}$\u0027: {"},{"line_number":1240,"context_line":"                \u0027oneOf\u0027: ["},{"line_number":1241,"context_line":"                    {\u0027type\u0027: \u0027string\u0027, \u0027maxLength\u0027: 255},"},{"line_number":1242,"context_line":"                    {\u0027type\u0027: \u0027null\u0027},"},{"line_number":1243,"context_line":"                ]"},{"line_number":1244,"context_line":"            },"},{"line_number":1245,"context_line":"        },"}],"source_content_type":"text/x-python","patch_set":4,"id":"0b5222d3_4f881947","line":1242,"range":{"start_line":1240,"start_character":15,"end_line":1242,"end_character":37},"in_reply_to":"c818d886_0719ef6a","updated":"2025-02-24 16:00:22.000000000","message":"we also have ListOfDictOfNullableStringsField \n\nhttps://opendev.org/openstack/nova/src/commit/375d95565d594182c5472f710b3f7bd53f0746d4/nova/objects/image_meta.py#L504-L514\n\nin the glance api thsese all addtional properties and just a mapping of string to string.\n\nwhat we said was the schema of that api should not need to change if we add image properties.\n\nif we validate that the value is anything other than a string then that breaks that requirement.","commit_id":"0eebb16923991739e5ffdc8d0897d9b3a2cca848"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0f270bc470e84d33ac40e57b4be4342c0c70406b","unresolved":true,"context_lines":[{"line_number":1237,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":1238,"context_line":"        \u0027patternProperties\u0027: {"},{"line_number":1239,"context_line":"            \u0027^[a-zA-Z0-9_:. ]{1,255}$\u0027: {"},{"line_number":1240,"context_line":"                \u0027oneOf\u0027: ["},{"line_number":1241,"context_line":"                    {\u0027type\u0027: \u0027string\u0027, \u0027maxLength\u0027: 255},"},{"line_number":1242,"context_line":"                    {\u0027type\u0027: \u0027null\u0027},"},{"line_number":1243,"context_line":"                ]"},{"line_number":1244,"context_line":"            },"},{"line_number":1245,"context_line":"        },"}],"source_content_type":"text/x-python","patch_set":4,"id":"78925d03_f2dbbcc1","line":1242,"range":{"start_line":1240,"start_character":15,"end_line":1242,"end_character":37},"in_reply_to":"e7201dc7_69863f48","updated":"2025-03-06 14:19:30.000000000","message":"that was not my intention when approving th espec.\n\nmy intention was explcity to show the nova version fo them\nso we clearly were not aligned on the orginal intent.\n\n\nin glance image properties are type via the metadatfe api althought the canonical defintion fo the ones supported by nova are in nova.\n\nthe metadefs are machine readable validation schemas \nhttps://github.com/openstack/glance/blob/master/etc/metadefs/compute-libvirt-image.json\n\nExpose via a rest api that clint are intened to bele to use to do validation of the content of the image properties.\n\nso while they are stored in the db as a string its not entirly true that they are just strings.\n\nthings like container_format(enum), min_disk(int) protected(boolean) are typed\n\nhttps://docs.openstack.org/api-ref/image/v2/#id3\nand becasue they are list in teh api response i do not consider nay of thos to be image properties and were out of scope of including in the response.\n\n\n\ni spoke to dan about htis offline yesterday because i was concerned this was a serucity vlumenrablity\n\n\nthe direct_url files is also not an image propete from my perspective its a top level filed on the image.\n\n\"\nThe URL to access the image file kept in external store. It is present only if the show_image_direct_url option is true in the Image service’s configuration file. Because it presents a security risk, this option is disabled by default.\n\"\n\nsince we are including non image properties there was a possibleity that that included the direct url.\n\nthe current responce is \n\nhttps://termbin.com/8knx\n\n```\n    \"image\": {\n      \"id\": \"6ffe53fc-5a3f-442a-b5a7-43e83fbebab1\",\n      \"links\": [\n        {\n          \"rel\": \"bookmark\",\n          \"href\": \"http://192.168.50.140/compute/images/6ffe53fc-5a3f-442a-b5a7-43e83fbebab1\"\n        }\n      ],\n      \"properties\": {\n        \"hw_rng_model\": \"virtio\",\n        \"owner_specified.openstack.md5\": \"\",\n        \"owner_specified.openstack.sha256\": \"\",\n        \"owner_specified.openstack.object\": \"images/cirros-0.6.3-x86_64-disk\",\n        \"min_ram\": \"0\",\n        \"min_disk\": \"1\",\n        \"disk_format\": \"qcow2\",\n        \"container_format\": \"bare\",\n        \"base_image_ref\": \"6ffe53fc-5a3f-442a-b5a7-43e83fbebab1\",\n        \"hw_machine_type\": \"pc\",\n        \"hw_cdrom_bus\": \"ide\",\n        \"hw_disk_bus\": \"virtio\",\n        \"hw_input_bus\": null,\n        \"hw_pointer_model\": null,\n        \"hw_video_model\": \"virtio\",\n        \"hw_vif_model\": \"virtio\"\n      }\n    },\n```\n\nthe \"owner_specified\" keys are not part of our ImageMetaProps object just as min_disk is not.\nmy concuer was that if we were including that in the instance_system_metadata tabel we woudl also include the driectr_url in the api respocne.\n\ni.e. for glance backed with ceph if direct_ulr is enable so that thin cloning works then that contains the ceph closter host name in the path.\nfor cidner backed glance images it can in clude backend sepcific info too.\n\n\ndirect_url is part of the ImageMeta object\nhttps://github.com/openstack/nova/blob/master/nova/objects/image_meta.py#L72C10-L72C20\n\n\ndirect_url is not in SM_INHERITABLE_KEYS which is why we are not storing it in https://github.com/openstack/nova/blob/master/nova/utils.py#L65-L67\nthe system metadata table.\n\nstore all image properties + SM_INHERITABLE_KEYS\n\nSM_INHERITABLE_KEYS \u003d (\n    \u0027min_ram\u0027, \u0027min_disk\u0027, \u0027disk_format\u0027, \u0027container_format\u0027,\n)\n\nhhttps://github.com/openstack/nova/blob/0954ec9e5c542b800d213f6e767ab4db2efae6d9/nova/utils.py#L729-L754\n\nso we need to be carful to never add direct_url to SM_INHERITABLE_KEYS in teh future.\n\nthe schema i was updating it too is thei schema that we are not using in tempest to validate this api responce.\n\nhttps://github.com/openstack/tempest/blob/master/tempest/lib/api_schema/response/compute/v2_98/servers.py#L32-L43","commit_id":"0eebb16923991739e5ffdc8d0897d9b3a2cca848"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a59a7d0db79fce8f726207b1436225eaaa4634c5","unresolved":true,"context_lines":[{"line_number":1238,"context_line":"        \u0027patternProperties\u0027: {"},{"line_number":1239,"context_line":"            \u0027^[a-zA-Z0-9_:. ]{1,255}$\u0027: {"},{"line_number":1240,"context_line":"                \u0027type\u0027: \u0027string\u0027,"},{"line_number":1241,"context_line":"                \u0027maxLength\u0027: 255"},{"line_number":1242,"context_line":"            },"},{"line_number":1243,"context_line":"        },"},{"line_number":1244,"context_line":"        \u0027additionalProperties\u0027: False,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7bf111f9_93111304","line":1241,"range":{"start_line":1241,"start_character":31,"end_line":1241,"end_character":32},"updated":"2025-03-11 13:32:16.000000000","message":"Removing this trailing comma is not an improvement to me... accidental damage?","commit_id":"c033c1cde50a1e551ca543926dd8784caaf0de45"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"559e0aae3d4eb324a6cff13acf85f98fd7a0f8a2","unresolved":true,"context_lines":[{"line_number":1238,"context_line":"        \u0027patternProperties\u0027: {"},{"line_number":1239,"context_line":"            \u0027^[a-zA-Z0-9_:. ]{1,255}$\u0027: {"},{"line_number":1240,"context_line":"                \u0027type\u0027: \u0027string\u0027,"},{"line_number":1241,"context_line":"                \u0027maxLength\u0027: 255"},{"line_number":1242,"context_line":"            },"},{"line_number":1243,"context_line":"        },"},{"line_number":1244,"context_line":"        \u0027additionalProperties\u0027: False,"}],"source_content_type":"text/x-python","patch_set":8,"id":"f44f287d_73d32dcb","line":1241,"range":{"start_line":1241,"start_character":31,"end_line":1241,"end_character":32},"in_reply_to":"3caa994c_98e67426","updated":"2025-03-11 14:09:20.000000000","message":"Yes, it\u0027s one of the things I hate the most about JSON. Also, a lot of JSON parsers do tolerate them :)","commit_id":"c033c1cde50a1e551ca543926dd8784caaf0de45"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1dc8e4356c55dc4155890991d379fb469aeda628","unresolved":false,"context_lines":[{"line_number":1238,"context_line":"        \u0027patternProperties\u0027: {"},{"line_number":1239,"context_line":"            \u0027^[a-zA-Z0-9_:. ]{1,255}$\u0027: {"},{"line_number":1240,"context_line":"                \u0027type\u0027: \u0027string\u0027,"},{"line_number":1241,"context_line":"                \u0027maxLength\u0027: 255"},{"line_number":1242,"context_line":"            },"},{"line_number":1243,"context_line":"        },"},{"line_number":1244,"context_line":"        \u0027additionalProperties\u0027: False,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5ab43c62_d534c126","line":1241,"range":{"start_line":1241,"start_character":31,"end_line":1241,"end_character":32},"in_reply_to":"59161e80_28afadf1","updated":"2025-03-11 15:00:34.000000000","message":"Done","commit_id":"c033c1cde50a1e551ca543926dd8784caaf0de45"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3cfb027ab639c7ac40dce032fbeb331e37bc5302","unresolved":true,"context_lines":[{"line_number":1238,"context_line":"        \u0027patternProperties\u0027: {"},{"line_number":1239,"context_line":"            \u0027^[a-zA-Z0-9_:. ]{1,255}$\u0027: {"},{"line_number":1240,"context_line":"                \u0027type\u0027: \u0027string\u0027,"},{"line_number":1241,"context_line":"                \u0027maxLength\u0027: 255"},{"line_number":1242,"context_line":"            },"},{"line_number":1243,"context_line":"        },"},{"line_number":1244,"context_line":"        \u0027additionalProperties\u0027: False,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3caa994c_98e67426","line":1241,"range":{"start_line":1241,"start_character":31,"end_line":1241,"end_character":32},"in_reply_to":"7bf111f9_93111304","updated":"2025-03-11 13:50:45.000000000","message":"partly, i forgot this is not json, even if what we are buildign is a jsonschema data stucture.\n\njson is stricter then python and does not allow trailing commas.\n\ni can put it back if you like.","commit_id":"c033c1cde50a1e551ca543926dd8784caaf0de45"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4735d5c2cc2fb3f60c84546fd4165eba20e58e5e","unresolved":true,"context_lines":[{"line_number":1238,"context_line":"        \u0027patternProperties\u0027: {"},{"line_number":1239,"context_line":"            \u0027^[a-zA-Z0-9_:. ]{1,255}$\u0027: {"},{"line_number":1240,"context_line":"                \u0027type\u0027: \u0027string\u0027,"},{"line_number":1241,"context_line":"                \u0027maxLength\u0027: 255"},{"line_number":1242,"context_line":"            },"},{"line_number":1243,"context_line":"        },"},{"line_number":1244,"context_line":"        \u0027additionalProperties\u0027: False,"}],"source_content_type":"text/x-python","patch_set":8,"id":"59161e80_28afadf1","line":1241,"range":{"start_line":1241,"start_character":31,"end_line":1241,"end_character":32},"in_reply_to":"f44f287d_73d32dcb","updated":"2025-03-11 14:41:25.000000000","message":"ok i can readd it just be aware that by addign the trialing comma in general you are opting into auto formators putting each parmater or itme on its own line.\n\nhttps://docs.astral.sh/ruff/settings/#format_skip-magic-trailing-comma\n\nso i tend to avoid them as a result\n\nwith that said you can usually turn it off too and we would if we were ever to swap to ruff.\n\n[tool.ruff.format]\nskip-magic-trailing-comma \u003d true\n\nthat the other reason I tend to remove extra commas.\n\nolder version of formatters like black didn\u0027t originally support opting out.\n\nhhttps://black.readthedocs.io/en/stable/the_black_code_style/current_style.html#the-magic-trailing-comma","commit_id":"c033c1cde50a1e551ca543926dd8784caaf0de45"}],"nova/api/openstack/compute/views/servers.py":[{"author":{"_account_id":20733,"name":"Rajesh Tailor","email":"ratailor@redhat.com","username":"rajesht"},"change_message_id":"9d9cf097ccd18956f45d1c09f84bccf3cc0e000b","unresolved":true,"context_lines":[{"line_number":593,"context_line":"            }"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"            if api_version_request.is_supported(request, min_version\u003d\u00272.98\u0027):"},{"line_number":596,"context_line":"                image[\u0027properties\u0027] \u003d instance.image_meta.properties.to_dict()"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"            return image"},{"line_number":599,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"6f00fdbe_e0c58508","line":596,"range":{"start_line":596,"start_character":23,"end_line":596,"end_character":33},"updated":"2025-02-21 10:23:46.000000000","message":"IMO we should also rename it to \u0027image_properties\u0027. As \u0027properties\u0027 is special keyword in openstacksdk [1] and if any attr is unknown with resource, it goes under \u0027properties\u0027 key if \u0027_store_unknown_attrs_as_properties \u003d True\u0027 [2] is set for that resource class.\n\n[1] https://opendev.org/openstack/openstacksdk/src/commit/b3e195199745b37558ec45d7f267c4a1aab9404f/openstack/resource.py#L1036-L1048\n[2] https://opendev.org/openstack/openstacksdk/src/commit/b3e195199745b37558ec45d7f267c4a1aab9404f/openstack/image/v2/image.py#L35-L37\n\nhere in our case, we have \u0027links\u0027 key with associated value in \u0027properties\u0027 dict, even if it is not part of image properties, but if we use \u0027image_properties\u0027 then we can get rid of it.","commit_id":"447afffb9ace1b1eaac3d8dabc61f4fe95ad6ca0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95497b233611c1b55881a53157970cc8eb7e5f5f","unresolved":false,"context_lines":[{"line_number":593,"context_line":"            }"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"            if api_version_request.is_supported(request, min_version\u003d\u00272.98\u0027):"},{"line_number":596,"context_line":"                image[\u0027properties\u0027] \u003d instance.image_meta.properties.to_dict()"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"            return image"},{"line_number":599,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"c6ec5274_44eaadec","line":596,"range":{"start_line":596,"start_character":23,"end_line":596,"end_character":33},"in_reply_to":"6aaf86b3_bc84c48c","updated":"2025-03-07 18:14:11.000000000","message":"Acknowledged","commit_id":"447afffb9ace1b1eaac3d8dabc61f4fe95ad6ca0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1bf4259d2f80813ac51b530e5f4436c327adb7be","unresolved":true,"context_lines":[{"line_number":593,"context_line":"            }"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"            if api_version_request.is_supported(request, min_version\u003d\u00272.98\u0027):"},{"line_number":596,"context_line":"                image[\u0027properties\u0027] \u003d instance.image_meta.properties.to_dict()"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"            return image"},{"line_number":599,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"6aaf86b3_bc84c48c","line":596,"range":{"start_line":596,"start_character":23,"end_line":596,"end_character":33},"in_reply_to":"6f00fdbe_e0c58508","updated":"2025-02-22 00:14:13.000000000","message":"that would require us to have a new api micro version\n\nwe could do that but it should be a separate follow-up patch.","commit_id":"447afffb9ace1b1eaac3d8dabc61f4fe95ad6ca0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"390cad99b647e90fe74b7bb0aa4fca7e070cd961","unresolved":true,"context_lines":[{"line_number":594,"context_line":""},{"line_number":595,"context_line":"            if api_version_request.is_supported(request, min_version\u003d\u00272.98\u0027):"},{"line_number":596,"context_line":"                image[\u0027properties\u0027] \u003d {"},{"line_number":597,"context_line":"                    key: str(val) for key, val in"},{"line_number":598,"context_line":"                    instance.image_meta.properties.to_dict().items()}"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"            return image"}],"source_content_type":"text/x-python","patch_set":4,"id":"fb0143ce_d1d51dbd","line":597,"range":{"start_line":597,"start_character":25,"end_line":597,"end_character":33},"updated":"2025-02-25 16:34:46.000000000","message":"im wondering if i should to update this to  a json_utils.dumps(val) to make sure any \"collections\" are printed in a sane way rather then relying on __str__","commit_id":"0eebb16923991739e5ffdc8d0897d9b3a2cca848"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95497b233611c1b55881a53157970cc8eb7e5f5f","unresolved":false,"context_lines":[{"line_number":594,"context_line":""},{"line_number":595,"context_line":"            if api_version_request.is_supported(request, min_version\u003d\u00272.98\u0027):"},{"line_number":596,"context_line":"                image[\u0027properties\u0027] \u003d {"},{"line_number":597,"context_line":"                    key: str(val) for key, val in"},{"line_number":598,"context_line":"                    instance.image_meta.properties.to_dict().items()}"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"            return image"}],"source_content_type":"text/x-python","patch_set":4,"id":"24d3831e_fa5bc43b","line":597,"range":{"start_line":597,"start_character":25,"end_line":597,"end_character":33},"in_reply_to":"fb0143ce_d1d51dbd","updated":"2025-03-07 18:14:11.000000000","message":"i didn this diffently so this nolonger applies.","commit_id":"0eebb16923991739e5ffdc8d0897d9b3a2cca848"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95497b233611c1b55881a53157970cc8eb7e5f5f","unresolved":true,"context_lines":[{"line_number":632,"context_line":"            if api_version_request.is_supported(request, min_version\u003d\u00272.98\u0027):"},{"line_number":633,"context_line":"                prefix_len \u003d len(utils.SM_IMAGE_PROP_PREFIX)"},{"line_number":634,"context_line":"                # allow legacy names if that is what were stored in metadata"},{"line_number":635,"context_line":"                std_fields \u003d list(itertools.chain("},{"line_number":636,"context_line":"                    objects.ImageMetaProps.fields.keys(),"},{"line_number":637,"context_line":"                    objects.ImageMetaProps._legacy_property_map.keys()"},{"line_number":638,"context_line":"                ))"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba49aeee_2acfa082","line":635,"range":{"start_line":635,"start_character":29,"end_line":635,"end_character":33},"updated":"2025-03-07 18:14:11.000000000","message":"a crap forgot to make this a set.","commit_id":"f5c95569cc382d2412c3a819a7daeb8058a1feb7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7c76b46bd351a819c8d0848892e29888b06bbca3","unresolved":false,"context_lines":[{"line_number":632,"context_line":"            if api_version_request.is_supported(request, min_version\u003d\u00272.98\u0027):"},{"line_number":633,"context_line":"                prefix_len \u003d len(utils.SM_IMAGE_PROP_PREFIX)"},{"line_number":634,"context_line":"                # allow legacy names if that is what were stored in metadata"},{"line_number":635,"context_line":"                std_fields \u003d list(itertools.chain("},{"line_number":636,"context_line":"                    objects.ImageMetaProps.fields.keys(),"},{"line_number":637,"context_line":"                    objects.ImageMetaProps._legacy_property_map.keys()"},{"line_number":638,"context_line":"                ))"}],"source_content_type":"text/x-python","patch_set":5,"id":"d29fde0d_5b296607","line":635,"range":{"start_line":635,"start_character":29,"end_line":635,"end_character":33},"in_reply_to":"ba49aeee_2acfa082","updated":"2025-03-07 18:16:09.000000000","message":"Done","commit_id":"f5c95569cc382d2412c3a819a7daeb8058a1feb7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a59a7d0db79fce8f726207b1436225eaaa4634c5","unresolved":true,"context_lines":[{"line_number":634,"context_line":"                # allow legacy names if that is what were stored in metadata"},{"line_number":635,"context_line":"                std_fields \u003d set(itertools.chain("},{"line_number":636,"context_line":"                    objects.ImageMetaProps.fields.keys(),"},{"line_number":637,"context_line":"                    objects.ImageMetaProps._legacy_property_map.keys()"},{"line_number":638,"context_line":"                ))"},{"line_number":639,"context_line":"                image[\u0027properties\u0027] \u003d {"},{"line_number":640,"context_line":"                    key[prefix_len:]: value for key, value in"}],"source_content_type":"text/x-python","patch_set":8,"id":"47f5944e_712864ef","line":637,"updated":"2025-03-11 13:32:16.000000000","message":"and why not ImageProps.keys()? This filters out thinks like disk_format and things but I\u0027m not sure why we need to hide that.","commit_id":"c033c1cde50a1e551ca543926dd8784caaf0de45"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1dc8e4356c55dc4155890991d379fb469aeda628","unresolved":false,"context_lines":[{"line_number":634,"context_line":"                # allow legacy names if that is what were stored in metadata"},{"line_number":635,"context_line":"                std_fields \u003d set(itertools.chain("},{"line_number":636,"context_line":"                    objects.ImageMetaProps.fields.keys(),"},{"line_number":637,"context_line":"                    objects.ImageMetaProps._legacy_property_map.keys()"},{"line_number":638,"context_line":"                ))"},{"line_number":639,"context_line":"                image[\u0027properties\u0027] \u003d {"},{"line_number":640,"context_line":"                    key[prefix_len:]: value for key, value in"}],"source_content_type":"text/x-python","patch_set":8,"id":"54c69cbe_9f99cbe6","line":637,"in_reply_to":"217ddf29_1930b2e1","updated":"2025-03-11 15:00:34.000000000","message":"Ack","commit_id":"c033c1cde50a1e551ca543926dd8784caaf0de45"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3cfb027ab639c7ac40dce032fbeb331e37bc5302","unresolved":true,"context_lines":[{"line_number":634,"context_line":"                # allow legacy names if that is what were stored in metadata"},{"line_number":635,"context_line":"                std_fields \u003d set(itertools.chain("},{"line_number":636,"context_line":"                    objects.ImageMetaProps.fields.keys(),"},{"line_number":637,"context_line":"                    objects.ImageMetaProps._legacy_property_map.keys()"},{"line_number":638,"context_line":"                ))"},{"line_number":639,"context_line":"                image[\u0027properties\u0027] \u003d {"},{"line_number":640,"context_line":"                    key[prefix_len:]: value for key, value in"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa927f40_d09b170d","line":637,"in_reply_to":"47f5944e_712864ef","updated":"2025-03-11 13:50:45.000000000","message":"can you state this more clearly?\n\nImageProps is not a class\n\nAre you asking why I\u0027m not including\nImageMeta.fields.keys() ?\nhttps://github.com/openstack/nova/blob/master/nova/objects/image_meta.py#L57-L76\n\nthose are specifically things I did not think were correct to expose to a user and were not in line with the spec.\n\nsince they are not image properties, they are field on the image, which are two different thing.","commit_id":"c033c1cde50a1e551ca543926dd8784caaf0de45"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"559e0aae3d4eb324a6cff13acf85f98fd7a0f8a2","unresolved":true,"context_lines":[{"line_number":634,"context_line":"                # allow legacy names if that is what were stored in metadata"},{"line_number":635,"context_line":"                std_fields \u003d set(itertools.chain("},{"line_number":636,"context_line":"                    objects.ImageMetaProps.fields.keys(),"},{"line_number":637,"context_line":"                    objects.ImageMetaProps._legacy_property_map.keys()"},{"line_number":638,"context_line":"                ))"},{"line_number":639,"context_line":"                image[\u0027properties\u0027] \u003d {"},{"line_number":640,"context_line":"                    key[prefix_len:]: value for key, value in"}],"source_content_type":"text/x-python","patch_set":8,"id":"217ddf29_1930b2e1","line":637,"in_reply_to":"fa927f40_d09b170d","updated":"2025-03-11 14:09:20.000000000","message":"They\u0027re actually stored the same way in glance in some of the middle layers of the onion so I guess I don\u0027t distinguish between them as much as maybe someone should from the outside, but okay. I guess if they were exposed they could/should be up a level, *peer* to properties.","commit_id":"c033c1cde50a1e551ca543926dd8784caaf0de45"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5f95e058a557bbb0e6d491394b28487b73ab4b7c","unresolved":true,"context_lines":[{"line_number":635,"context_line":"                }],"},{"line_number":636,"context_line":"            }"},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"            if api_version_request.is_supported(request, min_version\u003d\u00272.98\u0027):"},{"line_number":639,"context_line":"                prefix_len \u003d len(utils.SM_IMAGE_PROP_PREFIX)"},{"line_number":640,"context_line":"                # allow legacy names if that is what were stored in metadata"},{"line_number":641,"context_line":"                std_fields \u003d set(itertools.chain("}],"source_content_type":"text/x-python","patch_set":10,"id":"c743d41f_6a94eed0","line":638,"updated":"2025-08-14 17:44:17.000000000","message":"so this is the merge conflict i think i resolve ti the wrong way the last time i rebased.","commit_id":"c61489dafa6aa400beed810418869857ab4b6796"}],"nova/tests/functional/api_samples_test_base.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"95497b233611c1b55881a53157970cc8eb7e5f5f","unresolved":true,"context_lines":[{"line_number":376,"context_line":"        self.assertEqual(exp_code, response.status_code, message)"},{"line_number":377,"context_line":"        response_data \u003d response.content"},{"line_number":378,"context_line":"        response_data \u003d pretty_data(response_data)"},{"line_number":379,"context_line":"        template_path \u003d self._get_template(name,self.microversion)"},{"line_number":380,"context_line":"        if not os.path.exists(template_path):"},{"line_number":381,"context_line":"            self._write_template(name, response_data)"},{"line_number":382,"context_line":"            template_data \u003d response_data"}],"source_content_type":"text/x-python","patch_set":5,"id":"647ce6cd_9247272b","line":379,"updated":"2025-03-07 18:14:11.000000000","message":"while this is somewhat unreatled fitguring out exactly which template is wrong and which sameple to update is an absoute pain without this.","commit_id":"f5c95569cc382d2412c3a819a7daeb8058a1feb7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a59a7d0db79fce8f726207b1436225eaaa4634c5","unresolved":true,"context_lines":[{"line_number":377,"context_line":"        response_data \u003d response.content"},{"line_number":378,"context_line":"        response_data \u003d pretty_data(response_data)"},{"line_number":379,"context_line":"        template_path \u003d self._get_template(name, self.microversion)"},{"line_number":380,"context_line":"        if not os.path.exists(template_path):"},{"line_number":381,"context_line":"            self._write_template(name, response_data)"},{"line_number":382,"context_line":"            template_data \u003d response_data"},{"line_number":383,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ea2fc54d_f77a723a","line":380,"updated":"2025-03-11 13:32:16.000000000","message":"I wish all this refactoring could be a separate patch. It would be unfortunate to lose it if we had to revert this patch, and it also means anyone backporting it gets more change. Would(n\u0027t) it be trivial to split this off to a separate patch that just refactors this test?","commit_id":"c033c1cde50a1e551ca543926dd8784caaf0de45"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4735d5c2cc2fb3f60c84546fd4165eba20e58e5e","unresolved":true,"context_lines":[{"line_number":377,"context_line":"        response_data \u003d response.content"},{"line_number":378,"context_line":"        response_data \u003d pretty_data(response_data)"},{"line_number":379,"context_line":"        template_path \u003d self._get_template(name, self.microversion)"},{"line_number":380,"context_line":"        if not os.path.exists(template_path):"},{"line_number":381,"context_line":"            self._write_template(name, response_data)"},{"line_number":382,"context_line":"            template_data \u003d response_data"},{"line_number":383,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3d5d621c_7f1cce17","line":380,"in_reply_to":"18cb83ba_5e38fe13","updated":"2025-03-11 14:41:25.000000000","message":"right i personally would do that but ill split the patch.","commit_id":"c033c1cde50a1e551ca543926dd8784caaf0de45"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"559e0aae3d4eb324a6cff13acf85f98fd7a0f8a2","unresolved":true,"context_lines":[{"line_number":377,"context_line":"        response_data \u003d response.content"},{"line_number":378,"context_line":"        response_data \u003d pretty_data(response_data)"},{"line_number":379,"context_line":"        template_path \u003d self._get_template(name, self.microversion)"},{"line_number":380,"context_line":"        if not os.path.exists(template_path):"},{"line_number":381,"context_line":"            self._write_template(name, response_data)"},{"line_number":382,"context_line":"            template_data \u003d response_data"},{"line_number":383,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"18cb83ba_5e38fe13","line":380,"in_reply_to":"95b8ee18_3201564d","updated":"2025-03-11 14:09:20.000000000","message":"No, I don\u0027t want to backport the test refactor, but someone wanting this image props thing would have to bring the test refactor if they\u0027re the same patch.","commit_id":"c033c1cde50a1e551ca543926dd8784caaf0de45"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3cfb027ab639c7ac40dce032fbeb331e37bc5302","unresolved":true,"context_lines":[{"line_number":377,"context_line":"        response_data \u003d response.content"},{"line_number":378,"context_line":"        response_data \u003d pretty_data(response_data)"},{"line_number":379,"context_line":"        template_path \u003d self._get_template(name, self.microversion)"},{"line_number":380,"context_line":"        if not os.path.exists(template_path):"},{"line_number":381,"context_line":"            self._write_template(name, response_data)"},{"line_number":382,"context_line":"            template_data \u003d response_data"},{"line_number":383,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"95b8ee18_3201564d","line":380,"in_reply_to":"ea2fc54d_f77a723a","updated":"2025-03-11 13:50:45.000000000","message":"I can put it first.\n\nuntil I added this, I spent almost 3 hours trying to figure which files to edit\nAs I kept updating either the template or the sample, but not both.\n\nDo you want to backport this test refactor? \n\nI assumed since it does not fix a bug and just makes the developer experience sane, we probably would not backport it. we would only do that really if this overall patch missed RC1","commit_id":"c033c1cde50a1e551ca543926dd8784caaf0de45"}]}
