)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"0eb19eeef7c9265966b27d1e9a89e9015b5bc92b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"4e8dcba5_1cb828aa","updated":"2024-08-14 18:59:55.000000000","message":"recheck","commit_id":"7f0ee6c5d1df539be012e6c8374773c8b7d42e6d"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"fffd38efe21e0d9bf0c3ee23c8482dde83948478","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a9284c5d_8cd45b0a","updated":"2024-08-21 12:47:38.000000000","message":"recheck","commit_id":"757b1ea7c29b047fda29f92b356579286242716c"},{"author":{"_account_id":5263,"name":"Jeremy Stanley","display_name":"fungi","email":"fungi@yuggoth.org","username":"fungi","status":"missing, presumed fed"},"change_message_id":"4b5bb45155bf2d04680ce68056f9d23cc02fd1fb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"aec8877b_b164dce7","updated":"2025-02-25 17:08:28.000000000","message":"I\u0027ll push up a revision to address the various linter errors.","commit_id":"901913bb29f42e9a8fce4d4fbbfb5463f4683a2e"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f83f560edcced334fb11e05615e5f81c63511ea1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"131d8cf5_e0875ca0","updated":"2025-03-12 14:29:20.000000000","message":"It\u0027s probably best to hold off on this until the Glance patch is settled:\nhttps://review.opendev.org/c/openstack/glance/+/926295\n\nThey are holding off on that one for Flamingo.","commit_id":"36b72dd35bf1923a5428e79db1aedb91f3118c11"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"31038ab2524a0af52d28aeae1aa895414a869e96","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"e46950ef_c149386c","updated":"2025-03-04 14:14:10.000000000","message":"This patch looks good to me, CI is passing, coverage appears adequate, tests appear to be updated to exercise the proposed changes.  Additionally, I pulled this down and tested it locally, everything appears to work and I didn\u0027t notice any regressions.","commit_id":"36b72dd35bf1923a5428e79db1aedb91f3118c11"},{"author":{"_account_id":5263,"name":"Jeremy Stanley","display_name":"fungi","email":"fungi@yuggoth.org","username":"fungi","status":"missing, presumed fed"},"change_message_id":"c7c8ce4b435c311a32668a452cc9d0a846693641","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"598fc8cd_36985ab1","updated":"2025-02-25 20:19:57.000000000","message":"recheck since the grenade-skip-level-always and devstack-plugin-nfs-tempest-full failures look related to API call timeouts from tests this change doesn\u0027t touch","commit_id":"36b72dd35bf1923a5428e79db1aedb91f3118c11"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d7936e4c3b442621870e1c1998544d9442e9666b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"a8fc802b_66eb5935","updated":"2025-08-22 01:42:50.000000000","message":"Looks good to me; well-structured and helpful comments throughout.  Only a +1 because I want to look over the upload and create flows again (though I am pretty sure everything is fine).","commit_id":"010fcac43c36b1925087c64a94c80163949df4f7"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"b5720afbd81f300e05f844d883581fd7aeffa572","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"a8d491c3_28a0091c","updated":"2025-07-07 20:05:00.000000000","message":"Restoring my +2 from before, changes continue to look okay to me, os-brick version is sufficient for call from volume_utils.  Looks okay to me.","commit_id":"010fcac43c36b1925087c64a94c80163949df4f7"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"714ab491f828127f1217f2b03e84781792dc3efe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"1408ef1b_2101e8e8","updated":"2025-05-28 13:57:32.000000000","message":"recheck","commit_id":"010fcac43c36b1925087c64a94c80163949df4f7"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"195df705289960783011c9c1a0c429c166aad71f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"8b7e956c_80bb9a5e","updated":"2025-05-27 07:27:53.000000000","message":"recheck","commit_id":"010fcac43c36b1925087c64a94c80163949df4f7"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"cb6987d6759ab14d7829ad3e3e4a8f7c5489a375","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"97d020d7_36898b0d","updated":"2025-06-19 07:29:51.000000000","message":"recheck","commit_id":"010fcac43c36b1925087c64a94c80163949df4f7"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"4f145280ae90fdcf79248d0852474c0eea719154","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"a552729f_97666d17","updated":"2025-06-11 14:34:12.000000000","message":"recheck","commit_id":"010fcac43c36b1925087c64a94c80163949df4f7"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"3a4d7c41e2d277881afb540c667f08814dedee42","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"b55c8130_541a75e0","updated":"2025-06-02 14:00:36.000000000","message":"recheck","commit_id":"010fcac43c36b1925087c64a94c80163949df4f7"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"2c9a1615116c4df64dbe7cbd9b291ab547f6a77c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"e021ffeb_c3d899c8","updated":"2025-06-04 08:12:15.000000000","message":"recheck","commit_id":"010fcac43c36b1925087c64a94c80163949df4f7"},{"author":{"_account_id":28271,"name":"Josephine Seifert","email":"josephine.seifert@cloudandheat.com","username":"josei"},"change_message_id":"c9d25ca4ab67463adae618f84499811f838aa988","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"602a1335_fc001df8","updated":"2025-06-27 09:19:12.000000000","message":"recheck grenade-skip-level-always\n\ntest timed out again","commit_id":"010fcac43c36b1925087c64a94c80163949df4f7"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"2d0a04d73778c9c3f13b1a6e0ae337559892fd6a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"9942c90a_70b0c718","updated":"2025-06-12 14:48:59.000000000","message":"recheck grenade-skip-level-always\n\nthe integraged-storage test passed, but grenade timed out.","commit_id":"010fcac43c36b1925087c64a94c80163949df4f7"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"3f568e847b35bcd1c898918f6318005b3b5c6d22","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"bc43b771_1ef4f99a","updated":"2025-06-19 12:25:04.000000000","message":"recheck tempest-integrated-storage-ubuntu-jammy","commit_id":"010fcac43c36b1925087c64a94c80163949df4f7"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"539d431ad5e70924a2cb350f78ae304f8d61d797","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"c7754994_5dfedbaf","updated":"2025-11-18 16:25:24.000000000","message":"Patchset is now updated to reflect the changes to the spec discussed during the PTG on 2025-10-30.\n\nPrimarily, images encrypted as raw LUKS are now using `container_format\u003dluks` instead of `disk_format\u003dluks`.\n\nAs a nice side effect, all the workarounds for rewriting the disk format from luks to raw internally to prevent unintended qemu-img conversion could now be removed from the patchset, reducing its complexity a bit.\n\nWhen Cinder uploads an image from an encrypted volume (\u003d volume type with LUKS encryptor) to Glance, it will now create an image with `container_format\u003dluks` + `disk_format\u003draw`. Conversely, such an image can be turned into an encrypted volume directly when creating a volume from it, preserving the existing Cinder behavior of being able to consume images originating from itself.\n\nHandling for the new QCOW2+LUKS image format (`disk_format\u003dqcow2` + `os_encrypt_*` metadata) remains unchanged, i.e., they are converted when creating a volume from it. Cinder is able to consume this format but cannot produce it.","commit_id":"546ee01cc2d0e471e85601f1186fa60dd64137cf"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"2c045a2de18f2b373d27ce2ff2ef45cdfae2a4aa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"3f06c4c9_0b23d2b5","updated":"2025-11-25 15:22:21.000000000","message":"recheck","commit_id":"546ee01cc2d0e471e85601f1186fa60dd64137cf"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"8896488eb3d6e2f5cd63feb95c6df3290bb30e50","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"f874db00_9ad74b1f","updated":"2025-11-27 09:07:28.000000000","message":"recheck due to timeout in test_resize_volume_backed_server_confirm","commit_id":"546ee01cc2d0e471e85601f1186fa60dd64137cf"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"e47a812434e7ba217f95ad310e547ff4a69d992b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"fd08f72b_f2685070","updated":"2025-12-01 09:13:56.000000000","message":"recheck","commit_id":"66bbaf67588bf3723465ba6bc5cefeda58c3edb7"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"662621bf9b5f9adc91129fa3f823f4a41d37f0fe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"d35e35f8_43cf68bd","updated":"2025-12-16 10:37:32.000000000","message":"I have made a slight adjustment to the patchset: when creating an image from an encrypted volume, it will now default to visibility\u003dprivate now and does not accept any other visibility in the request.\n\nThis is due to a change request on the Glance patchset making visibility\u003dprivate mandatory for encrypted images: https://review.opendev.org/c/openstack/glance/+/926295/comment/188c335b_e582f3e6/\nReasoning: encryption keys (Barbican secrets) are usually at least project-scoped, so inter-project usage of the image is problematic as the key is inaccessible to other projects.\n\nI also added a unit test for that.","commit_id":"c7b9d5ac7244ad894fa95df62d6863466e709043"}],"cinder/image/image_utils.py":[{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"24cff6f789ee5e8bb4c10e5b269f36ea3f802812","unresolved":true,"context_lines":[{"line_number":601,"context_line":"                       src_img_info\u003ddata)"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"def resize_image(source: str,"},{"line_number":605,"context_line":"                 size: int,"},{"line_number":606,"context_line":"                 run_as_root: bool \u003d False,"},{"line_number":607,"context_line":"                 file_format: Optional[str] \u003d None) -\u003e None:"}],"source_content_type":"text/x-python","patch_set":22,"id":"469d680a_7982c539","line":604,"updated":"2026-04-23 08:57:03.000000000","message":"When volume created from an encrypted image and converted to raw LUKS,\nHow we expand LUKS encrypted image here?","commit_id":"79c161b8f38fad04030d2a8d11ecf0477f417ca2"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"b220c2fa15f2e4056243043485f8315f4cc8c464","unresolved":true,"context_lines":[{"line_number":1140,"context_line":"            LOG.debug(\"Image is encrypted with secret %s\","},{"line_number":1141,"context_line":"                      image_encryption_key_id)"},{"line_number":1142,"context_line":""},{"line_number":1143,"context_line":"        if image_encryption_key_id and disk_format \u003d\u003d \u0027qcow2\u0027:"},{"line_number":1144,"context_line":"            LOG.debug(\"Image is qcow2+LUKS and needs conversion\")"},{"line_number":1145,"context_line":"            keymgr \u003d castellan_key_manager.API(CONF)"},{"line_number":1146,"context_line":"            passphrase \u003d volume_utils.get_encryption_key_as_passphrase("}],"source_content_type":"text/x-python","patch_set":22,"id":"b6e56af4_e67a436f","line":1143,"updated":"2026-04-20 07:54:02.000000000","message":"The current condition only supports qcow2. How do we handle raw LUKS?\nShould we change here to:\n\n\n```suggestion\n        if image_encryption_key_id:\n```","commit_id":"79c161b8f38fad04030d2a8d11ecf0477f417ca2"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"4716ef4a922e47bdf4b57b3623bc2d4e65f21cb8","unresolved":true,"context_lines":[{"line_number":1140,"context_line":"            LOG.debug(\"Image is encrypted with secret %s\","},{"line_number":1141,"context_line":"                      image_encryption_key_id)"},{"line_number":1142,"context_line":""},{"line_number":1143,"context_line":"        if image_encryption_key_id and disk_format \u003d\u003d \u0027qcow2\u0027:"},{"line_number":1144,"context_line":"            LOG.debug(\"Image is qcow2+LUKS and needs conversion\")"},{"line_number":1145,"context_line":"            keymgr \u003d castellan_key_manager.API(CONF)"},{"line_number":1146,"context_line":"            passphrase \u003d volume_utils.get_encryption_key_as_passphrase("}],"source_content_type":"text/x-python","patch_set":22,"id":"715c3de9_0ee69e3e","line":1143,"in_reply_to":"b6e56af4_e67a436f","updated":"2026-04-22 08:26:12.000000000","message":"Cinder handles raw LUKS natively in its encrypted volume types, as it always did. There is no conversion necessary.\n\nThe same currently happens in the existing implementation if you create an image from an encrypted volume (which contains raw LUKS). It will effectively create a 1:1 LUKS dump in Glance. When restoring such image in Cinder, it will be used as-is, simply writing the LUKS dump back into a new volume.\n\nThis patchset preserves this behavior concerning raw LUKS images but the related images might not be solely under Cinder\u0027s own control anymore (might have been created by a user).\nAs a result, we did add a check in the creation flow to make sure that such image is always matched with an encrypted volume type [1], so that the raw LUKS is always correctly used as-is.\n\n[1] https://review.opendev.org/c/openstack/cinder/+/926298/22/cinder/volume/flows/api/create_volume.py","commit_id":"79c161b8f38fad04030d2a8d11ecf0477f417ca2"}],"cinder/volume/volume_utils.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"72d891625b74d9c9a31467de0d84115db6ddf304","unresolved":true,"context_lines":[{"line_number":987,"context_line":"                                     encryption_key_id: str) -\u003e str:"},{"line_number":988,"context_line":"    \"\"\"Convert encryption key to passphrase based on secret type.\"\"\""},{"line_number":989,"context_line":"    key \u003d key_manager.get(context, encryption_key_id)"},{"line_number":990,"context_line":"    return brick_utils.get_passphrase_from_secret(key)"},{"line_number":991,"context_line":""},{"line_number":992,"context_line":""},{"line_number":993,"context_line":"def delete_encryption_key(context: context.RequestContext,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7c5e7b15_ebc19910","line":990,"range":{"start_line":990,"start_character":11,"end_line":990,"end_character":49},"updated":"2024-12-16 19:36:24.000000000","message":"This patch also needs to bump the os-brick version in requirements.txt to 6.9.0 for this method to be available.","commit_id":"6b352d908f050a5ae5acea47761e90353ec6c274"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"32857d46eee426f66d73773de6b7591fa924e995","unresolved":false,"context_lines":[{"line_number":987,"context_line":"                                     encryption_key_id: str) -\u003e str:"},{"line_number":988,"context_line":"    \"\"\"Convert encryption key to passphrase based on secret type.\"\"\""},{"line_number":989,"context_line":"    key \u003d key_manager.get(context, encryption_key_id)"},{"line_number":990,"context_line":"    return brick_utils.get_passphrase_from_secret(key)"},{"line_number":991,"context_line":""},{"line_number":992,"context_line":""},{"line_number":993,"context_line":"def delete_encryption_key(context: context.RequestContext,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3e3898c2_0a262734","line":990,"range":{"start_line":990,"start_character":11,"end_line":990,"end_character":49},"in_reply_to":"079ed1f3_e8ca6345","updated":"2025-02-24 09:55:36.000000000","message":"Thank you! I reverted the change in the patchset.","commit_id":"6b352d908f050a5ae5acea47761e90353ec6c274"},{"author":{"_account_id":5263,"name":"Jeremy Stanley","display_name":"fungi","email":"fungi@yuggoth.org","username":"fungi","status":"missing, presumed fed"},"change_message_id":"748effefd211fa4f48e346776ce2d4947f8e519e","unresolved":true,"context_lines":[{"line_number":987,"context_line":"                                     encryption_key_id: str) -\u003e str:"},{"line_number":988,"context_line":"    \"\"\"Convert encryption key to passphrase based on secret type.\"\"\""},{"line_number":989,"context_line":"    key \u003d key_manager.get(context, encryption_key_id)"},{"line_number":990,"context_line":"    return brick_utils.get_passphrase_from_secret(key)"},{"line_number":991,"context_line":""},{"line_number":992,"context_line":""},{"line_number":993,"context_line":"def delete_encryption_key(context: context.RequestContext,"}],"source_content_type":"text/x-python","patch_set":9,"id":"079ed1f3_e8ca6345","line":990,"range":{"start_line":990,"start_character":11,"end_line":990,"end_character":49},"in_reply_to":"3d426185_9c5365bf","updated":"2025-02-21 19:19:32.000000000","message":"Unrelated change Ieb6be04133e1639b3fa6e3a322604b366e909d81 bumped it to \u003e\u003d6.10.0 yesterday, so now the change needs to either be rebased or reverted to not edit requirements.txt at all.","commit_id":"6b352d908f050a5ae5acea47761e90353ec6c274"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"d6753fe05a829a6323a3e2b3da849032804a23af","unresolved":false,"context_lines":[{"line_number":987,"context_line":"                                     encryption_key_id: str) -\u003e str:"},{"line_number":988,"context_line":"    \"\"\"Convert encryption key to passphrase based on secret type.\"\"\""},{"line_number":989,"context_line":"    key \u003d key_manager.get(context, encryption_key_id)"},{"line_number":990,"context_line":"    return brick_utils.get_passphrase_from_secret(key)"},{"line_number":991,"context_line":""},{"line_number":992,"context_line":""},{"line_number":993,"context_line":"def delete_encryption_key(context: context.RequestContext,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3d426185_9c5365bf","line":990,"range":{"start_line":990,"start_character":11,"end_line":990,"end_character":49},"in_reply_to":"7c5e7b15_ebc19910","updated":"2025-02-17 14:02:56.000000000","message":"Thank you for pointing this out! Done.","commit_id":"6b352d908f050a5ae5acea47761e90353ec6c274"}]}
