)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"8fe9980885808becf34af4302a907bf64cbc3623","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3b0a86fd_63a32f9d","updated":"2025-02-24 02:31:09.000000000","message":"The intention of this patch is to be minimal so it can be backported since I\u0027m seeing this issue on stable/2024.2 and James is seeing it older than that. As a follow on I\u0027d like to touch the tests and the code a bit more to avoid this issue from happening in the future.","commit_id":"6ed47b5b71888e1b28ff088cfc4804158eaf3f90"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"eb61dea847ae89c6fedc0390f0cdd38f2ab412fe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"e5138079_3f4f5de5","updated":"2025-02-24 02:29:18.000000000","message":"This is what I needed as a minimum to have kernel_id, ramdisk_id, and stage2_id from the Glance image supplied in image_source be used.","commit_id":"6ed47b5b71888e1b28ff088cfc4804158eaf3f90"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"39f6f947feb9a35d0bf136d47ed9586ece82f751","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"85213dbe_afd2ca52","updated":"2025-02-25 04:33:57.000000000","message":"recheck a release note doesn’t cause these failures","commit_id":"de9ded8a9600101e05267adfff26cc101d4b5db5"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"74bdbfe3140e752d0d02d809c56b9a66b42e4805","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"5a1f1eee_8d286458","updated":"2025-03-02 17:49:07.000000000","message":"This only needs to be backported to 2024.2 because that\u0027s where the switch from glanceclient to OpenStack SDK was introduced.","commit_id":"fa8569cd9e4ae53690759e41680563f443f29f7c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a7da51931fe7a3284d034f88f330d8664cb008f8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"a665bbd4_f6d9c55b","updated":"2025-02-28 14:29:56.000000000","message":"recheck conductor just stopped running?","commit_id":"fa8569cd9e4ae53690759e41680563f443f29f7c"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"15c51bd417041f433cee304a34f34714afcbb98f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"ac6484d1_29febb2f","updated":"2025-03-02 17:47:13.000000000","message":"recheck metal3 failed to finish inspecting","commit_id":"fa8569cd9e4ae53690759e41680563f443f29f7c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9608e7f6d190e96ce502366742ddcbd66825a29f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"220c9752_85720cbb","updated":"2025-02-26 14:23:54.000000000","message":"recheck need fresh results","commit_id":"fa8569cd9e4ae53690759e41680563f443f29f7c"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"168852423bb1bca1bd8cc062811103d692c1dfd8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"19293945_34c8f458","updated":"2025-02-27 18:44:30.000000000","message":"recheck pesky vmedia-4k failure","commit_id":"fa8569cd9e4ae53690759e41680563f443f29f7c"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"afa0cf325e6249f2d7e98a76be21f35f03fb5d73","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"7868ecb1_7e4ee6d5","updated":"2025-02-26 22:31:33.000000000","message":"recheck this shouldn\u0027t be timing out like that","commit_id":"fa8569cd9e4ae53690759e41680563f443f29f7c"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"6b8a8e960f254b14add3861a70e42712e80db304","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"14685ece_adb2292a","updated":"2025-03-05 01:49:40.000000000","message":"recheck metal3 ran out of disk space","commit_id":"17ec00b0169ecdaaadc832ce48eea16e75e3e68e"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"0a98dcb0d962058bd5a33ec5591e534c32feb119","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"35ed6c50_c3520bad","updated":"2025-03-11 18:36:57.000000000","message":"recheck checksum mismatch on apt mirror E: Failed to fetch https://mirror.gra1.ovh.opendev.org/ubuntu/dists/noble-updates/main/binary-amd64/Packages.gz  File has unexpected size (1215823 !\u003d 1220439). Mirror sync in progress? [IP: 217.182.142.242 443]","commit_id":"05734cfc95ad36ecf7325195077fe505ed33ae30"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"22494dfcc73dcb003d504347d84865df8b995c26","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"1c5ac213_d7e82b2a","updated":"2025-03-11 13:04:24.000000000","message":"recheck ironic-tempest-bios-redfish-pxe","commit_id":"05734cfc95ad36ecf7325195077fe505ed33ae30"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"e2bf2f31495a470772d6606a9c971cc6c23d723d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"ec0de4cc_e566af8b","updated":"2025-03-11 22:52:54.000000000","message":"recheck post failure","commit_id":"05734cfc95ad36ecf7325195077fe505ed33ae30"}],"ironic/common/glance_service/service_utils.py":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"7585aedb615beede21e90fbdc8cdd79c43ad2001","unresolved":true,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    # copy the properties over to start so that image properties"},{"line_number":47,"context_line":"    # are not nested in another properties key"},{"line_number":48,"context_line":"    output[\u0027properties\u0027] \u003d getattr(image, \u0027properties\u0027, {})"},{"line_number":49,"context_line":"    output[\u0027schema\u0027] \u003d image.schema"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    # attributes already copied so we copy the rest into properties"}],"source_content_type":"text/x-python","patch_set":11,"id":"6f818bc4_94a7f852","line":48,"updated":"2025-03-07 08:54:30.000000000","message":"in the fixture you set `tags: []` instead of `None`, maybe that would need a similar special case here?","commit_id":"05734cfc95ad36ecf7325195077fe505ed33ae30"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"90aacc9ce82dae0a9a942305f033975bedae8894","unresolved":true,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    # copy the properties over to start so that image properties"},{"line_number":47,"context_line":"    # are not nested in another properties key"},{"line_number":48,"context_line":"    output[\u0027properties\u0027] \u003d getattr(image, \u0027properties\u0027, {})"},{"line_number":49,"context_line":"    output[\u0027schema\u0027] \u003d image.schema"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    # attributes already copied so we copy the rest into properties"}],"source_content_type":"text/x-python","patch_set":11,"id":"c3f44d7a_789ed360","line":48,"in_reply_to":"6f818bc4_94a7f852","updated":"2025-03-07 15:09:01.000000000","message":"Maybe? So an Image object has an attribute `tags` which ensures it\u0027s always a list and always present. Which is why I had to change the test (not the fixture) to check against that. Previously the fixture just made an object that took a dictionary and made all the fields accessible with `getattr()`. Now we\u0027re using a real `Image` object for the `getattr()` calls. The reason it was `None` was because of the `getattr()` call a few lines up because `tags` didn\u0027t exist in all of our fake objects.","commit_id":"05734cfc95ad36ecf7325195077fe505ed33ae30"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"93b1bf0a7089d120a97a3d0a28c5a754413b8797","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    # copy the properties over to start so that image properties"},{"line_number":47,"context_line":"    # are not nested in another properties key"},{"line_number":48,"context_line":"    output[\u0027properties\u0027] \u003d getattr(image, \u0027properties\u0027, {})"},{"line_number":49,"context_line":"    output[\u0027schema\u0027] \u003d image.schema"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    # attributes already copied so we copy the rest into properties"}],"source_content_type":"text/x-python","patch_set":11,"id":"e9243c87_b71e12f5","line":48,"in_reply_to":"c3f44d7a_789ed360","updated":"2025-03-07 21:15:46.000000000","message":"Yes, it\u0027s just that when I was reading this code I though that there might be some issue hiding, but with the reasoning of keeping this patch backportable I agree it is better not to touch it.","commit_id":"05734cfc95ad36ecf7325195077fe505ed33ae30"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"7585aedb615beede21e90fbdc8cdd79c43ad2001","unresolved":true,"context_lines":[{"line_number":46,"context_line":"    # copy the properties over to start so that image properties"},{"line_number":47,"context_line":"    # are not nested in another properties key"},{"line_number":48,"context_line":"    output[\u0027properties\u0027] \u003d getattr(image, \u0027properties\u0027, {})"},{"line_number":49,"context_line":"    output[\u0027schema\u0027] \u003d image.schema"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    # attributes already copied so we copy the rest into properties"},{"line_number":52,"context_line":"    copied \u003d set(_IMAGE_ATTRIBUTES)"}],"source_content_type":"text/x-python","patch_set":11,"id":"abae6e92_28775dd0","line":49,"updated":"2025-03-07 08:54:30.000000000","message":"why is `schema` being treated once again here? the key is listed in `_IMAGE_ATTRIBUTES` and thus should already have been handled by the loop above? or is `image.schema` somehow subtly different from `getattr(image, \u0027schema\u0027)`? in that case some explanation might be good","commit_id":"05734cfc95ad36ecf7325195077fe505ed33ae30"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"90aacc9ce82dae0a9a942305f033975bedae8894","unresolved":true,"context_lines":[{"line_number":46,"context_line":"    # copy the properties over to start so that image properties"},{"line_number":47,"context_line":"    # are not nested in another properties key"},{"line_number":48,"context_line":"    output[\u0027properties\u0027] \u003d getattr(image, \u0027properties\u0027, {})"},{"line_number":49,"context_line":"    output[\u0027schema\u0027] \u003d image.schema"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    # attributes already copied so we copy the rest into properties"},{"line_number":52,"context_line":"    copied \u003d set(_IMAGE_ATTRIBUTES)"}],"source_content_type":"text/x-python","patch_set":11,"id":"b2d631d9_58c7aa5e","line":49,"in_reply_to":"abae6e92_28775dd0","updated":"2025-03-07 15:09:01.000000000","message":"I dunno. That\u0027s how the code always was, you\u0027ll notice it\u0027s not in my diff. I thought it was weird. I\u0027m shooting for most minimal change here to make this backportable. Long term I want to delete this translation and just use the Image object so we have a specific type and can do type checking in the future.","commit_id":"05734cfc95ad36ecf7325195077fe505ed33ae30"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"93b1bf0a7089d120a97a3d0a28c5a754413b8797","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    # copy the properties over to start so that image properties"},{"line_number":47,"context_line":"    # are not nested in another properties key"},{"line_number":48,"context_line":"    output[\u0027properties\u0027] \u003d getattr(image, \u0027properties\u0027, {})"},{"line_number":49,"context_line":"    output[\u0027schema\u0027] \u003d image.schema"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    # attributes already copied so we copy the rest into properties"},{"line_number":52,"context_line":"    copied \u003d set(_IMAGE_ATTRIBUTES)"}],"source_content_type":"text/x-python","patch_set":11,"id":"e07ec79d_12512807","line":49,"in_reply_to":"b2d631d9_58c7aa5e","updated":"2025-03-07 21:15:46.000000000","message":"Acknowledged","commit_id":"05734cfc95ad36ecf7325195077fe505ed33ae30"}],"releasenotes/notes/bug-2099275-glance-image-properties-check-2a11337c9e517a5c.yaml":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f4c40659172a6c6e79932f05780f68e3817afb4d","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    validate_image_properties() was unable to read the properties set on a"},{"line_number":5,"context_line":"    Glance  image due to an issue where the properties loaded being nested"},{"line_number":6,"context_line":"    under another properties key. This resulted in the Anaconda deploy"},{"line_number":7,"context_line":"    interface being unable to use Glance images due to the requirement of"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"a08185f7_8bc28160","line":4,"updated":"2025-03-05 14:05:05.000000000","message":"nit: This is written as a developer, we should convey it as a user. What does thsi fix, how it relates.","commit_id":"17ec00b0169ecdaaadc832ce48eea16e75e3e68e"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"66578aa736c238429c823c11b257d325efbe3632","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    validate_image_properties() was unable to read the properties set on a"},{"line_number":5,"context_line":"    Glance  image due to an issue where the properties loaded being nested"},{"line_number":6,"context_line":"    under another properties key. This resulted in the Anaconda deploy"},{"line_number":7,"context_line":"    interface being unable to use Glance images due to the requirement of"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"a991a340_7c34c8cd","line":4,"in_reply_to":"a08185f7_8bc28160","updated":"2025-03-07 02:48:24.000000000","message":"Done","commit_id":"17ec00b0169ecdaaadc832ce48eea16e75e3e68e"}]}
