)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"ea362e7b8a00eacbc2a3e6ded0af016fb8049a65","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"752a67e9_cdabbcd9","updated":"2025-06-17 19:42:15.000000000","message":"For the record, I had to add a skip_checks directive related to CONF.auth.create_isolated_networks for now like it is done in other places [1].\nOtherwise all Zuul pipelines would fail with the following error due to the tests attempting to set up floating IPs for servers for SSH connection testing:\n\n    {\u0027type\u0027: \u0027ExternalGatewayForFloatingIPNotFound\u0027, \u0027message\u0027:\n    \u0027External network 98fa5895-41af-4e13-a2c3-bbae4e3dad79 is not reachable from\n    subnet 1845f6f3-bb68-457d-9a0e-843374b6c544.\n    Therefore, cannot associate Port 1b6b898d-72de-4f98-b172-1aae4c829584 with a\n    Floating IP.\u0027, \u0027detail\u0027: \u0027\u0027}\n\nThis change now seems to skip all of the 4 new tests in the Zuul pipelines as a result.\n\n[1] https://opendev.org/openstack/barbican-tempest-plugin/src/commit/2cd185133a86242c58d721e66c2db753a369fe60/barbican_tempest_plugin/tests/scenario/test_volume_encryption.py#L52-L56","commit_id":"cf83dd92d457f7e7511432c3c7321ae62daca6cf"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"093f386d099824a39e875c847240fd6892fcec68","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"d4200431_edec5fe3","in_reply_to":"53929a1b_68d7d122","updated":"2025-06-27 17:51:14.000000000","message":"Thank you so much for the guidance! Thanks to your hints I was able to introduce a dedicated pipeline job for this, which now passes and executes all 4 tests I implemented.","commit_id":"cf83dd92d457f7e7511432c3c7321ae62daca6cf"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"a5c264ef21eec3fba527c9f9c52d9deb08c5a0c5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"53929a1b_68d7d122","in_reply_to":"752a67e9_cdabbcd9","updated":"2025-06-26 18:02:29.000000000","message":"I think you can try by creating a separate job in .zuul.yaml where you can set \ncreate_isolated_network: True under auth and then set \u0027fixed_network_name: public\u0027 under compute section.","commit_id":"cf83dd92d457f7e7511432c3c7321ae62daca6cf"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e6039526544cdb8a49bc4c621ca94df4c413cce7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"87d79dd7_fd7ab24a","in_reply_to":"d4200431_edec5fe3","updated":"2025-06-27 17:55:39.000000000","message":"Glad it worked!!!\nAppreciated your patience and work!!","commit_id":"cf83dd92d457f7e7511432c3c7321ae62daca6cf"},{"author":{"_account_id":35125,"name":"Mauricio Harley","email":"mharley@redhat.com","username":"mharley-rh"},"change_message_id":"fef0866bbab79c61e9cbc8bb191a9e3795f9ae53","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"fe77720c_b4ea94f9","updated":"2025-11-21 15:29:25.000000000","message":"Another core reviewer verification would be interesting.","commit_id":"da6bcf215f3d873b277a38ce6f5ec92460163f86"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"674f063efe497e906efb8438db77f8ad264ae39f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"73ca29b4_a577db40","updated":"2026-01-02 15:24:46.000000000","message":"Dear Maxim, thank you very much for the thorough code review! I have addressed all your comments in the latest iteration.","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"c4b84eb1e50ca803c3e0d861952738e74e7cc8ad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"fe8212a7_432d0544","updated":"2025-11-24 16:31:15.000000000","message":"For the record, I added a new fifth scenario as a kind of regression test:\n\nimage -\u003e (encrypted) volume -\u003e (encrypted) image -\u003e (encrypted) volume -\u003e server\n\nThis tests a full roundtrip of Cinder\u0027s native image encryption resulting from the volume action `os-volume_upload_image` on LUKS-encrypted volumes, which will automatically result in an encrypted image. It makes sure that such an image can be used to create a successfully booting volume again (includes SSH test).\nIn contrast to the other scenarios, in this case the image is not user-created but originates from Cinder itself.","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"}],"barbican_tempest_plugin/config.py":[{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"e98d0ab4558477b1c87aca978fc49d06dca7afa2","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"ImageEncryptionGroup \u003d ["},{"line_number":109,"context_line":"    cfg.BoolOpt(\u0027enabled\u0027,"},{"line_number":110,"context_line":"                default\u003dTrue,"},{"line_number":111,"context_line":"                help\u003d\"Does the test environment support image encryption? \""},{"line_number":112,"context_line":"                     \"(this requires qemu-img to be available to Tempest)\"),"},{"line_number":113,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":12,"id":"91472078_76991559","line":110,"updated":"2025-12-25 10:45:15.000000000","message":"For improvement I would be changing to False by default","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"674f063efe497e906efb8438db77f8ad264ae39f","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"ImageEncryptionGroup \u003d ["},{"line_number":109,"context_line":"    cfg.BoolOpt(\u0027enabled\u0027,"},{"line_number":110,"context_line":"                default\u003dTrue,"},{"line_number":111,"context_line":"                help\u003d\"Does the test environment support image encryption? \""},{"line_number":112,"context_line":"                     \"(this requires qemu-img to be available to Tempest)\"),"},{"line_number":113,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":12,"id":"7d5af5da_61dd22c7","line":110,"in_reply_to":"91472078_76991559","updated":"2026-01-02 15:24:46.000000000","message":"Done. Added a override to True to the dedicated `.zuul.yaml` section for this scenario.","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"84b42ad1827be468566810e3640c7de8d6649c10","unresolved":true,"context_lines":[{"line_number":101,"context_line":"                     \"certificate validation?\")"},{"line_number":102,"context_line":"]"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"image_encryption_group \u003d cfg.OptGroup("},{"line_number":105,"context_line":"    name\u003d\"image_encryption\","},{"line_number":106,"context_line":"    title\u003d\"Image encryption options\")"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"11619d5b_ff871f86","line":104,"updated":"2026-04-23 11:29:27.000000000","message":"Typically, when a new configuration option is introduced, we also include release notes.","commit_id":"35126c064c12efffba9142ce43f8c76960db13ab"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"61cca29a7d14d75e1c3b844fcc014b2d00d8c693","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                     \"certificate validation?\")"},{"line_number":102,"context_line":"]"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"image_encryption_group \u003d cfg.OptGroup("},{"line_number":105,"context_line":"    name\u003d\"image_encryption\","},{"line_number":106,"context_line":"    title\u003d\"Image encryption options\")"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"a5779366_89b0f1d6","line":104,"in_reply_to":"11619d5b_ff871f86","updated":"2026-04-23 13:55:21.000000000","message":"I added release notes.","commit_id":"35126c064c12efffba9142ce43f8c76960db13ab"}],"barbican_tempest_plugin/plugin.py":[{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"e98d0ab4558477b1c87aca978fc49d06dca7afa2","unresolved":true,"context_lines":[{"line_number":55,"context_line":"        conf.register_opts(project_config.ImageEncryptionGroup,"},{"line_number":56,"context_line":"                           project_config.image_encryption_group)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def get_opt_lists(self):"},{"line_number":59,"context_line":"        return ["},{"line_number":60,"context_line":"            (\u0027service_available\u0027, [project_config.service_option]),"},{"line_number":61,"context_line":"            (project_config.key_manager_group.name,"}],"source_content_type":"text/x-python","patch_set":12,"id":"27542ed3_b4f643a5","line":58,"updated":"2025-12-25 10:45:15.000000000","message":"Missing `image_encryption_group` in `get_opts()`","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"674f063efe497e906efb8438db77f8ad264ae39f","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        conf.register_opts(project_config.ImageEncryptionGroup,"},{"line_number":56,"context_line":"                           project_config.image_encryption_group)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def get_opt_lists(self):"},{"line_number":59,"context_line":"        return ["},{"line_number":60,"context_line":"            (\u0027service_available\u0027, [project_config.service_option]),"},{"line_number":61,"context_line":"            (project_config.key_manager_group.name,"}],"source_content_type":"text/x-python","patch_set":12,"id":"da7a37db_acd8ad34","line":58,"in_reply_to":"27542ed3_b4f643a5","updated":"2026-01-02 15:24:46.000000000","message":"Done","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"}],"barbican_tempest_plugin/tests/scenario/test_image_encryption.py":[{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"e98d0ab4558477b1c87aca978fc49d06dca7afa2","unresolved":true,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class ImageEncryptionTest(barbican_manager.BarbicanScenarioTest):"},{"line_number":40,"context_line":"    min_microversion \u003d \u00272.1\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @classmethod"},{"line_number":43,"context_line":"    def skip_checks(cls):"},{"line_number":44,"context_line":"        super(ImageEncryptionTest, cls).skip_checks()"}],"source_content_type":"text/x-python","patch_set":12,"id":"1cde907c_473e41e2","line":41,"updated":"2025-12-25 10:45:15.000000000","message":"Missing docstring","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"674f063efe497e906efb8438db77f8ad264ae39f","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class ImageEncryptionTest(barbican_manager.BarbicanScenarioTest):"},{"line_number":40,"context_line":"    min_microversion \u003d \u00272.1\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @classmethod"},{"line_number":43,"context_line":"    def skip_checks(cls):"},{"line_number":44,"context_line":"        super(ImageEncryptionTest, cls).skip_checks()"}],"source_content_type":"text/x-python","patch_set":12,"id":"d3724eec_570ecb4c","line":41,"in_reply_to":"1cde907c_473e41e2","updated":"2026-01-02 15:24:46.000000000","message":"Done","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"e98d0ab4558477b1c87aca978fc49d06dca7afa2","unresolved":true,"context_lines":[{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        img_path \u003d CONF.scenario.img_file"},{"line_number":110,"context_line":"        if not os.path.exists(img_path):"},{"line_number":111,"context_line":"            lib_exc.InvalidConfiguration("},{"line_number":112,"context_line":"                \u0027Starting Tempest 25.0.0 release, CONF.scenario.img_file need \u0027"},{"line_number":113,"context_line":"                \u0027a full path for the image. CONF.scenario.img_dir was \u0027"},{"line_number":114,"context_line":"                \u0027deprecated and will be removed in the next release. Till \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"8656473d_597e952d","line":111,"range":{"start_line":111,"start_character":10,"end_line":111,"end_character":41},"updated":"2025-12-25 10:45:15.000000000","message":"Exception not raised here","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"674f063efe497e906efb8438db77f8ad264ae39f","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        img_path \u003d CONF.scenario.img_file"},{"line_number":110,"context_line":"        if not os.path.exists(img_path):"},{"line_number":111,"context_line":"            lib_exc.InvalidConfiguration("},{"line_number":112,"context_line":"                \u0027Starting Tempest 25.0.0 release, CONF.scenario.img_file need \u0027"},{"line_number":113,"context_line":"                \u0027a full path for the image. CONF.scenario.img_dir was \u0027"},{"line_number":114,"context_line":"                \u0027deprecated and will be removed in the next release. Till \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"f15a3098_6391658a","line":111,"range":{"start_line":111,"start_character":10,"end_line":111,"end_character":41},"in_reply_to":"8656473d_597e952d","updated":"2026-01-02 15:24:46.000000000","message":"Done","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"e98d0ab4558477b1c87aca978fc49d06dca7afa2","unresolved":true,"context_lines":[{"line_number":115,"context_line":"                \u0027Tempest 25.0.0, old behavior was maintained and kept working \u0027"},{"line_number":116,"context_line":"                \u0027but starting Tempest 26.0.0, you need to specify the full \u0027"},{"line_number":117,"context_line":"                \u0027path in CONF.scenario.img_file config option.\u0027)"},{"line_number":118,"context_line":"        raw_img_path \u003d tempfile.mktemp()"},{"line_number":119,"context_line":"        cmd \u003d ["},{"line_number":120,"context_line":"            \u0027qemu-img\u0027, \u0027convert\u0027, \u0027-O\u0027, \u0027raw\u0027,"},{"line_number":121,"context_line":"            img_path, raw_img_path"}],"source_content_type":"text/x-python","patch_set":12,"id":"984b82df_3e72d73c","line":118,"updated":"2025-12-25 10:45:15.000000000","message":"Should we use here tempfile.mkstemp() for more secure way","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"674f063efe497e906efb8438db77f8ad264ae39f","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                \u0027Tempest 25.0.0, old behavior was maintained and kept working \u0027"},{"line_number":116,"context_line":"                \u0027but starting Tempest 26.0.0, you need to specify the full \u0027"},{"line_number":117,"context_line":"                \u0027path in CONF.scenario.img_file config option.\u0027)"},{"line_number":118,"context_line":"        raw_img_path \u003d tempfile.mktemp()"},{"line_number":119,"context_line":"        cmd \u003d ["},{"line_number":120,"context_line":"            \u0027qemu-img\u0027, \u0027convert\u0027, \u0027-O\u0027, \u0027raw\u0027,"},{"line_number":121,"context_line":"            img_path, raw_img_path"}],"source_content_type":"text/x-python","patch_set":12,"id":"916cd4b7_53b97476","line":118,"in_reply_to":"984b82df_3e72d73c","updated":"2026-01-02 15:24:46.000000000","message":"Done. I replaced all occurences of `mktemp()`.","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"e98d0ab4558477b1c87aca978fc49d06dca7afa2","unresolved":true,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def _encrypt_image_file(self, image_file, output_path, encryption_key,"},{"line_number":154,"context_line":"                            file_format\u003d\u0027raw\u0027, encryption_format\u003d\u0027luks\u0027,"},{"line_number":155,"context_line":"                            do_hexlify_passphrase\u003dTrue, cipher\u003d\u0027aes-256\u0027,"},{"line_number":156,"context_line":"                            cipher_mode\u003d\u0027xts\u0027, hash_alg\u003d\u0027sha256\u0027,"},{"line_number":157,"context_line":"                            ivgen_alg\u003d\u0027plain64\u0027, ivgen_hash_alg\u003d\u0027sha256\u0027):"},{"line_number":158,"context_line":"        \"\"\"Encrypts an image file using qemu-img\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"6746d86d_ed3cca6b","line":155,"range":{"start_line":155,"start_character":27,"end_line":155,"end_character":50},"updated":"2025-12-25 10:45:15.000000000","message":"Unused parameter","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"674f063efe497e906efb8438db77f8ad264ae39f","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def _encrypt_image_file(self, image_file, output_path, encryption_key,"},{"line_number":154,"context_line":"                            file_format\u003d\u0027raw\u0027, encryption_format\u003d\u0027luks\u0027,"},{"line_number":155,"context_line":"                            do_hexlify_passphrase\u003dTrue, cipher\u003d\u0027aes-256\u0027,"},{"line_number":156,"context_line":"                            cipher_mode\u003d\u0027xts\u0027, hash_alg\u003d\u0027sha256\u0027,"},{"line_number":157,"context_line":"                            ivgen_alg\u003d\u0027plain64\u0027, ivgen_hash_alg\u003d\u0027sha256\u0027):"},{"line_number":158,"context_line":"        \"\"\"Encrypts an image file using qemu-img\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"005cef6b_9ff6e273","line":155,"range":{"start_line":155,"start_character":27,"end_line":155,"end_character":50},"in_reply_to":"6746d86d_ed3cca6b","updated":"2026-01-02 15:24:46.000000000","message":"Done","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"e98d0ab4558477b1c87aca978fc49d06dca7afa2","unresolved":true,"context_lines":[{"line_number":158,"context_line":"        \"\"\"Encrypts an image file using qemu-img\"\"\""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        if encryption_format not in [\u0027luks\u0027, \u0027qcow2\u0027]:"},{"line_number":161,"context_line":"            raise Exception("},{"line_number":162,"context_line":"                f\"encryption format {encryption_format} not supported\""},{"line_number":163,"context_line":"            )"},{"line_number":164,"context_line":"        encryption_key_path \u003d tempfile.mktemp()"}],"source_content_type":"text/x-python","patch_set":12,"id":"2f3621a7_ee7d1b93","line":161,"updated":"2025-12-25 10:45:15.000000000","message":"Generic exception here for values","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"674f063efe497e906efb8438db77f8ad264ae39f","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        \"\"\"Encrypts an image file using qemu-img\"\"\""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        if encryption_format not in [\u0027luks\u0027, \u0027qcow2\u0027]:"},{"line_number":161,"context_line":"            raise Exception("},{"line_number":162,"context_line":"                f\"encryption format {encryption_format} not supported\""},{"line_number":163,"context_line":"            )"},{"line_number":164,"context_line":"        encryption_key_path \u003d tempfile.mktemp()"}],"source_content_type":"text/x-python","patch_set":12,"id":"b466c946_34f1f0c3","line":161,"in_reply_to":"2f3621a7_ee7d1b93","updated":"2026-01-02 15:24:46.000000000","message":"Done","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"e98d0ab4558477b1c87aca978fc49d06dca7afa2","unresolved":true,"context_lines":[{"line_number":198,"context_line":"        putils.execute(*cmd, run_as_root\u003dFalse)"},{"line_number":199,"context_line":"        LOG.debug(\"Encrypted image to %s\" % output_path)"},{"line_number":200,"context_line":"        self.addCleanup(self._delete_local_file, encryption_key_path)"},{"line_number":201,"context_line":"        # os.remove(encryption_key_path)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def _create_encrypted_image(self, image_file, encryption_key, secret_id,"},{"line_number":204,"context_line":"                                file_format\u003d\u0027raw\u0027, encryption_format\u003d\u0027luks\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"215bec52_14d5ef50","line":201,"updated":"2025-12-25 10:45:15.000000000","message":"Commented code","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"674f063efe497e906efb8438db77f8ad264ae39f","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        putils.execute(*cmd, run_as_root\u003dFalse)"},{"line_number":199,"context_line":"        LOG.debug(\"Encrypted image to %s\" % output_path)"},{"line_number":200,"context_line":"        self.addCleanup(self._delete_local_file, encryption_key_path)"},{"line_number":201,"context_line":"        # os.remove(encryption_key_path)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def _create_encrypted_image(self, image_file, encryption_key, secret_id,"},{"line_number":204,"context_line":"                                file_format\u003d\u0027raw\u0027, encryption_format\u003d\u0027luks\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"43c28f12_f9bb0bab","line":201,"in_reply_to":"215bec52_14d5ef50","updated":"2026-01-02 15:24:46.000000000","message":"Done","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"e98d0ab4558477b1c87aca978fc49d06dca7afa2","unresolved":true,"context_lines":[{"line_number":247,"context_line":"        with open(enc_img_path, \u0027rb\u0027) as image_file:"},{"line_number":248,"context_line":"            self.image_client.store_image_file(image[\u0027id\u0027], image_file)"},{"line_number":249,"context_line":"        self.addCleanup(self._delete_local_file, enc_img_path)"},{"line_number":250,"context_line":"        # os.remove(enc_img_path)"},{"line_number":251,"context_line":"        LOG.debug(\"Uploaded encrypted image to glance with id %s\", image[\u0027id\u0027])"},{"line_number":252,"context_line":"        return image"},{"line_number":253,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"6cbc6c19_c9ec31b9","line":250,"updated":"2025-12-25 10:45:15.000000000","message":"Commented code","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"674f063efe497e906efb8438db77f8ad264ae39f","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        with open(enc_img_path, \u0027rb\u0027) as image_file:"},{"line_number":248,"context_line":"            self.image_client.store_image_file(image[\u0027id\u0027], image_file)"},{"line_number":249,"context_line":"        self.addCleanup(self._delete_local_file, enc_img_path)"},{"line_number":250,"context_line":"        # os.remove(enc_img_path)"},{"line_number":251,"context_line":"        LOG.debug(\"Uploaded encrypted image to glance with id %s\", image[\u0027id\u0027])"},{"line_number":252,"context_line":"        return image"},{"line_number":253,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"320b79ec_281fcc4e","line":250,"in_reply_to":"6cbc6c19_c9ec31b9","updated":"2026-01-02 15:24:46.000000000","message":"Done","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"e98d0ab4558477b1c87aca978fc49d06dca7afa2","unresolved":true,"context_lines":[{"line_number":314,"context_line":"        This test uses the following encryption properties:"},{"line_number":315,"context_line":"            * image is encrypted using raw LUKS"},{"line_number":316,"context_line":"            * encryption key is stored with type \u0027symmetric\u0027 in key manager"},{"line_number":317,"context_line":"            * encryption key is hexlified before being used as LUKS phassphrase"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        The test concludes with an SSH connection to the server to verify that"},{"line_number":320,"context_line":"        the encrypted image was successfully converted to a bootable volume."}],"source_content_type":"text/x-python","patch_set":12,"id":"66cd8c6f_4d6306ea","line":317,"updated":"2025-12-25 10:45:15.000000000","message":"nit: typo","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"674f063efe497e906efb8438db77f8ad264ae39f","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        This test uses the following encryption properties:"},{"line_number":315,"context_line":"            * image is encrypted using raw LUKS"},{"line_number":316,"context_line":"            * encryption key is stored with type \u0027symmetric\u0027 in key manager"},{"line_number":317,"context_line":"            * encryption key is hexlified before being used as LUKS phassphrase"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        The test concludes with an SSH connection to the server to verify that"},{"line_number":320,"context_line":"        the encrypted image was successfully converted to a bootable volume."}],"source_content_type":"text/x-python","patch_set":12,"id":"67adb9e9_dd321730","line":317,"in_reply_to":"66cd8c6f_4d6306ea","updated":"2026-01-02 15:24:46.000000000","message":"Done","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"e98d0ab4558477b1c87aca978fc49d06dca7afa2","unresolved":false,"context_lines":[{"line_number":367,"context_line":"            str(test_output.rstrip()))"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    @decorators.idempotent_id(\u002772aa81ad-fd74-4a70-8ddb-555699942661\u0027)"},{"line_number":370,"context_line":"    @utils.services(\u0027compute\u0027, \u0027volume\u0027, \u0027image\u0027)"},{"line_number":371,"context_line":"    def test_encrypted_glance_image_qcow2_luks_with_passphrase(self):"},{"line_number":372,"context_line":"        \"\"\"Encrypt image with qcow2+LUKS, create volume and boot server"},{"line_number":373,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"d2226e4f_da13ddc3","line":370,"range":{"start_line":370,"start_character":4,"end_line":370,"end_character":49},"updated":"2025-12-25 10:45:15.000000000","message":"For improvement I would be adding here slow decorator","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"e98d0ab4558477b1c87aca978fc49d06dca7afa2","unresolved":true,"context_lines":[{"line_number":425,"context_line":"        This test uses the following encryption properties:"},{"line_number":426,"context_line":"            * image is encrypted using qcow2+LUKS"},{"line_number":427,"context_line":"            * encryption key is stored with type \u0027symmetric\u0027 in key manager"},{"line_number":428,"context_line":"            * encryption key is hexlified before being used as LUKS phassphrase"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        The test concludes with an SSH connection to the server to verify that"},{"line_number":431,"context_line":"        the encrypted image was successfully converted to a bootable volume."}],"source_content_type":"text/x-python","patch_set":12,"id":"87e6dc45_f5217427","line":428,"updated":"2025-12-25 10:45:15.000000000","message":"nit: typo","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"674f063efe497e906efb8438db77f8ad264ae39f","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        This test uses the following encryption properties:"},{"line_number":426,"context_line":"            * image is encrypted using qcow2+LUKS"},{"line_number":427,"context_line":"            * encryption key is stored with type \u0027symmetric\u0027 in key manager"},{"line_number":428,"context_line":"            * encryption key is hexlified before being used as LUKS phassphrase"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        The test concludes with an SSH connection to the server to verify that"},{"line_number":431,"context_line":"        the encrypted image was successfully converted to a bootable volume."}],"source_content_type":"text/x-python","patch_set":12,"id":"aba14116_7e241e1f","line":428,"in_reply_to":"87e6dc45_f5217427","updated":"2026-01-02 15:24:46.000000000","message":"Done","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"e98d0ab4558477b1c87aca978fc49d06dca7afa2","unresolved":true,"context_lines":[{"line_number":512,"context_line":"            properties\u003dimg_properties"},{"line_number":513,"context_line":"        )"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        encrypted_volume_type \u003d self.create_volume_type(name\u003d\u0027luks\u0027)"},{"line_number":516,"context_line":"        self.create_encryption_type(type_id\u003dencrypted_volume_type[\u0027id\u0027],"},{"line_number":517,"context_line":"                                    provider\u003d\u0027luks\u0027,"},{"line_number":518,"context_line":"                                    key_size\u003d256,"},{"line_number":519,"context_line":"                                    cipher\u003d\u0027aes-xts-plain64\u0027,"},{"line_number":520,"context_line":"                                    control_location\u003d\u0027front-end\u0027)"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"        source_volume \u003d self.create_volume("},{"line_number":523,"context_line":"            volume_type\u003dencrypted_volume_type[\u0027name\u0027],"},{"line_number":524,"context_line":"            imageRef\u003dunencrypted_img_uuid,"}],"source_content_type":"text/x-python","patch_set":12,"id":"95e887b9_2711f6e7","line":521,"range":{"start_line":515,"start_character":8,"end_line":521,"end_character":0},"updated":"2025-12-25 10:45:15.000000000","message":"Why create new volume type instead reusing from setUp?","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"674f063efe497e906efb8438db77f8ad264ae39f","unresolved":false,"context_lines":[{"line_number":512,"context_line":"            properties\u003dimg_properties"},{"line_number":513,"context_line":"        )"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        encrypted_volume_type \u003d self.create_volume_type(name\u003d\u0027luks\u0027)"},{"line_number":516,"context_line":"        self.create_encryption_type(type_id\u003dencrypted_volume_type[\u0027id\u0027],"},{"line_number":517,"context_line":"                                    provider\u003d\u0027luks\u0027,"},{"line_number":518,"context_line":"                                    key_size\u003d256,"},{"line_number":519,"context_line":"                                    cipher\u003d\u0027aes-xts-plain64\u0027,"},{"line_number":520,"context_line":"                                    control_location\u003d\u0027front-end\u0027)"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"        source_volume \u003d self.create_volume("},{"line_number":523,"context_line":"            volume_type\u003dencrypted_volume_type[\u0027name\u0027],"},{"line_number":524,"context_line":"            imageRef\u003dunencrypted_img_uuid,"}],"source_content_type":"text/x-python","patch_set":12,"id":"f4acc0ad_287c6077","line":521,"range":{"start_line":515,"start_character":8,"end_line":521,"end_character":0},"in_reply_to":"95e887b9_2711f6e7","updated":"2026-01-02 15:24:46.000000000","message":"This test function was added later and at that point I did not recall already having prepared one. Fixed.","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"e98d0ab4558477b1c87aca978fc49d06dca7afa2","unresolved":true,"context_lines":[{"line_number":530,"context_line":"        encrypted_img_meta \u003d self.image_client.show_image(encrypted_img_uuid)"},{"line_number":531,"context_line":"        if \u0027image\u0027 in encrypted_img_meta:"},{"line_number":532,"context_line":"            encrypted_img_meta \u003d encrypted_img_meta[\u0027image\u0027]"},{"line_number":533,"context_line":"        self.assertEquals(\u0027luks\u0027, encrypted_img_meta[\u0027container_format\u0027])"},{"line_number":534,"context_line":"        self.assertEquals(\u0027raw\u0027, encrypted_img_meta[\u0027disk_format\u0027])"},{"line_number":535,"context_line":"        self.assertIn(\u0027os_encrypt_key_id\u0027, encrypted_img_meta)"},{"line_number":536,"context_line":"        self.assertIn(\u0027os_encrypt_format\u0027, encrypted_img_meta)"}],"source_content_type":"text/x-python","patch_set":12,"id":"08833c8a_36091855","line":533,"updated":"2025-12-25 10:45:15.000000000","message":"Fix to `assertEqual`","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"674f063efe497e906efb8438db77f8ad264ae39f","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        encrypted_img_meta \u003d self.image_client.show_image(encrypted_img_uuid)"},{"line_number":531,"context_line":"        if \u0027image\u0027 in encrypted_img_meta:"},{"line_number":532,"context_line":"            encrypted_img_meta \u003d encrypted_img_meta[\u0027image\u0027]"},{"line_number":533,"context_line":"        self.assertEquals(\u0027luks\u0027, encrypted_img_meta[\u0027container_format\u0027])"},{"line_number":534,"context_line":"        self.assertEquals(\u0027raw\u0027, encrypted_img_meta[\u0027disk_format\u0027])"},{"line_number":535,"context_line":"        self.assertIn(\u0027os_encrypt_key_id\u0027, encrypted_img_meta)"},{"line_number":536,"context_line":"        self.assertIn(\u0027os_encrypt_format\u0027, encrypted_img_meta)"}],"source_content_type":"text/x-python","patch_set":12,"id":"273d6ee5_1a11a5de","line":533,"in_reply_to":"08833c8a_36091855","updated":"2026-01-02 15:24:46.000000000","message":"Done","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"e98d0ab4558477b1c87aca978fc49d06dca7afa2","unresolved":true,"context_lines":[{"line_number":531,"context_line":"        if \u0027image\u0027 in encrypted_img_meta:"},{"line_number":532,"context_line":"            encrypted_img_meta \u003d encrypted_img_meta[\u0027image\u0027]"},{"line_number":533,"context_line":"        self.assertEquals(\u0027luks\u0027, encrypted_img_meta[\u0027container_format\u0027])"},{"line_number":534,"context_line":"        self.assertEquals(\u0027raw\u0027, encrypted_img_meta[\u0027disk_format\u0027])"},{"line_number":535,"context_line":"        self.assertIn(\u0027os_encrypt_key_id\u0027, encrypted_img_meta)"},{"line_number":536,"context_line":"        self.assertIn(\u0027os_encrypt_format\u0027, encrypted_img_meta)"},{"line_number":537,"context_line":"        self.assertIn(\u0027os_encrypt_key_deletion_policy\u0027, encrypted_img_meta)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ffd9ed28_cc950ed4","line":534,"updated":"2025-12-25 10:45:15.000000000","message":"Same here","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"674f063efe497e906efb8438db77f8ad264ae39f","unresolved":false,"context_lines":[{"line_number":531,"context_line":"        if \u0027image\u0027 in encrypted_img_meta:"},{"line_number":532,"context_line":"            encrypted_img_meta \u003d encrypted_img_meta[\u0027image\u0027]"},{"line_number":533,"context_line":"        self.assertEquals(\u0027luks\u0027, encrypted_img_meta[\u0027container_format\u0027])"},{"line_number":534,"context_line":"        self.assertEquals(\u0027raw\u0027, encrypted_img_meta[\u0027disk_format\u0027])"},{"line_number":535,"context_line":"        self.assertIn(\u0027os_encrypt_key_id\u0027, encrypted_img_meta)"},{"line_number":536,"context_line":"        self.assertIn(\u0027os_encrypt_format\u0027, encrypted_img_meta)"},{"line_number":537,"context_line":"        self.assertIn(\u0027os_encrypt_key_deletion_policy\u0027, encrypted_img_meta)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fe30bd2c_4d0dea55","line":534,"in_reply_to":"ffd9ed28_cc950ed4","updated":"2026-01-02 15:24:46.000000000","message":"Done","commit_id":"107396ef6d76f261dce2e3bcc027e8a07a5c1a61"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"964ff7633a9e5861bd4dab199623a4a78fc192f2","unresolved":true,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def setUp(self):"},{"line_number":83,"context_line":"        super(ImageEncryptionTest, self).setUp()"},{"line_number":84,"context_line":"        self.volume_type \u003d self.create_volume_type()"},{"line_number":85,"context_line":"        self.create_encryption_type(type_id\u003dself.volume_type[\u0027id\u0027],"},{"line_number":86,"context_line":"                                    provider\u003d\u0027luks\u0027,"},{"line_number":87,"context_line":"                                    key_size\u003d256,"},{"line_number":88,"context_line":"                                    cipher\u003d\u0027aes-xts-plain64\u0027,"},{"line_number":89,"context_line":"                                    control_location\u003d\u0027front-end\u0027)"},{"line_number":90,"context_line":"        self.image_encryption_key \u003d self._get_encryption_key()"},{"line_number":91,"context_line":"        self.ssh_test_string \u003d \"Lorem ipsum\""},{"line_number":92,"context_line":"        self.ssh_client_test_path \u003d \u0027/tmp/encrypted_image_source_test\u0027"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def _upload_encrypted_volume_to_image(self, volume_id):"},{"line_number":95,"context_line":"        image_name \u003d data_utils.rand_name("}],"source_content_type":"text/x-python","patch_set":13,"id":"b95cb76e_138e5f5a","line":92,"range":{"start_line":84,"start_character":6,"end_line":92,"end_character":70},"updated":"2026-04-23 10:23:12.000000000","message":"Test class resources should be defined in the `resource_setup`","commit_id":"35126c064c12efffba9142ce43f8c76960db13ab"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"964ff7633a9e5861bd4dab199623a4a78fc192f2","unresolved":true,"context_lines":[{"line_number":191,"context_line":"            \u0027qemu-img\u0027, \u0027convert\u0027, \u0027-f\u0027, file_format, \u0027-O\u0027, encryption_format,"},{"line_number":192,"context_line":"            \u0027--object\u0027, f\"secret,id\u003dimgkey,file\u003d{encryption_key_path}\","},{"line_number":193,"context_line":"        ]"},{"line_number":194,"context_line":"        if encryption_format \u003d\u003d \u0027luks\u0027:"},{"line_number":195,"context_line":"            cmd.extend(["},{"line_number":196,"context_line":"                \"-o\", \"key-secret\u003dimgkey\","},{"line_number":197,"context_line":"                \"-o\", f\"cipher-alg\u003d{cipher}\","}],"source_content_type":"text/x-python","patch_set":13,"id":"e36f0cfb_654bf2e1","line":194,"updated":"2026-04-23 10:23:12.000000000","message":"Missing details/comment here,\nif condition encryption_format is LUKS why image created without LUKS encrypt parameter?","commit_id":"35126c064c12efffba9142ce43f8c76960db13ab"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"964ff7633a9e5861bd4dab199623a4a78fc192f2","unresolved":true,"context_lines":[{"line_number":200,"context_line":"                \"-o\", f\"ivgen-alg\u003d{ivgen_alg}\","},{"line_number":201,"context_line":"                \"-o\", f\"ivgen-hash-alg\u003d{ivgen_hash_alg}\","},{"line_number":202,"context_line":"            ])"},{"line_number":203,"context_line":"        elif encryption_format \u003d\u003d \u0027qcow2\u0027:"},{"line_number":204,"context_line":"            cmd.extend(["},{"line_number":205,"context_line":"                \"-o\", \"encrypt.key-secret\u003dimgkey\","},{"line_number":206,"context_line":"                \"-o\", \"encrypt.format\u003dluks\","}],"source_content_type":"text/x-python","patch_set":13,"id":"7a081423_9a4bfa56","line":203,"updated":"2026-04-23 10:23:12.000000000","message":"Missing details/comment here,\nIf encryption format `qcow2` why we encrypt with LUKS format parameter?","commit_id":"35126c064c12efffba9142ce43f8c76960db13ab"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"df4ccbcdce41c87f984df9f2d22e12792e4a056e","unresolved":true,"context_lines":[{"line_number":191,"context_line":"            \u0027qemu-img\u0027, \u0027convert\u0027, \u0027-f\u0027, file_format, \u0027-O\u0027, encryption_format,"},{"line_number":192,"context_line":"            \u0027--object\u0027, f\"secret,id\u003dimgkey,file\u003d{encryption_key_path}\","},{"line_number":193,"context_line":"        ]"},{"line_number":194,"context_line":"        if encryption_format \u003d\u003d \u0027luks\u0027:"},{"line_number":195,"context_line":"            cmd.extend(["},{"line_number":196,"context_line":"                \"-o\", \"key-secret\u003dimgkey\","},{"line_number":197,"context_line":"                \"-o\", f\"cipher-alg\u003d{cipher}\","},{"line_number":198,"context_line":"                \"-o\", f\"cipher-mode\u003d{cipher_mode}\","},{"line_number":199,"context_line":"                \"-o\", f\"hash-alg\u003d{hash_alg}\","},{"line_number":200,"context_line":"                \"-o\", f\"ivgen-alg\u003d{ivgen_alg}\","},{"line_number":201,"context_line":"                \"-o\", f\"ivgen-hash-alg\u003d{ivgen_hash_alg}\","},{"line_number":202,"context_line":"            ])"},{"line_number":203,"context_line":"        elif encryption_format \u003d\u003d \u0027qcow2\u0027:"},{"line_number":204,"context_line":"            cmd.extend(["},{"line_number":205,"context_line":"                \"-o\", \"encrypt.key-secret\u003dimgkey\","},{"line_number":206,"context_line":"                \"-o\", \"encrypt.format\u003dluks\","},{"line_number":207,"context_line":"                \"-o\", f\"encrypt.cipher-alg\u003d{cipher}\","},{"line_number":208,"context_line":"                \"-o\", f\"encrypt.cipher-mode\u003d{cipher_mode}\","},{"line_number":209,"context_line":"                \"-o\", f\"encrypt.hash-alg\u003d{hash_alg}\","},{"line_number":210,"context_line":"                \"-o\", f\"encrypt.ivgen-alg\u003d{ivgen_alg}\","},{"line_number":211,"context_line":"                \"-o\", f\"encrypt.ivgen-hash-alg\u003d{ivgen_hash_alg}\","},{"line_number":212,"context_line":"            ])"},{"line_number":213,"context_line":"        cmd.extend([image_file, output_path])"},{"line_number":214,"context_line":"        LOG.debug("}],"source_content_type":"text/x-python","patch_set":13,"id":"c97d9a8b_55c0d259","line":211,"range":{"start_line":194,"start_character":7,"end_line":211,"end_character":65},"updated":"2026-04-20 08:44:34.000000000","message":"I think encryption happens in Cinder. Why use raw qemu commands here?","commit_id":"35126c064c12efffba9142ce43f8c76960db13ab"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"964ff7633a9e5861bd4dab199623a4a78fc192f2","unresolved":false,"context_lines":[{"line_number":191,"context_line":"            \u0027qemu-img\u0027, \u0027convert\u0027, \u0027-f\u0027, file_format, \u0027-O\u0027, encryption_format,"},{"line_number":192,"context_line":"            \u0027--object\u0027, f\"secret,id\u003dimgkey,file\u003d{encryption_key_path}\","},{"line_number":193,"context_line":"        ]"},{"line_number":194,"context_line":"        if encryption_format \u003d\u003d \u0027luks\u0027:"},{"line_number":195,"context_line":"            cmd.extend(["},{"line_number":196,"context_line":"                \"-o\", \"key-secret\u003dimgkey\","},{"line_number":197,"context_line":"                \"-o\", f\"cipher-alg\u003d{cipher}\","},{"line_number":198,"context_line":"                \"-o\", f\"cipher-mode\u003d{cipher_mode}\","},{"line_number":199,"context_line":"                \"-o\", f\"hash-alg\u003d{hash_alg}\","},{"line_number":200,"context_line":"                \"-o\", f\"ivgen-alg\u003d{ivgen_alg}\","},{"line_number":201,"context_line":"                \"-o\", f\"ivgen-hash-alg\u003d{ivgen_hash_alg}\","},{"line_number":202,"context_line":"            ])"},{"line_number":203,"context_line":"        elif encryption_format \u003d\u003d \u0027qcow2\u0027:"},{"line_number":204,"context_line":"            cmd.extend(["},{"line_number":205,"context_line":"                \"-o\", \"encrypt.key-secret\u003dimgkey\","},{"line_number":206,"context_line":"                \"-o\", \"encrypt.format\u003dluks\","},{"line_number":207,"context_line":"                \"-o\", f\"encrypt.cipher-alg\u003d{cipher}\","},{"line_number":208,"context_line":"                \"-o\", f\"encrypt.cipher-mode\u003d{cipher_mode}\","},{"line_number":209,"context_line":"                \"-o\", f\"encrypt.hash-alg\u003d{hash_alg}\","},{"line_number":210,"context_line":"                \"-o\", f\"encrypt.ivgen-alg\u003d{ivgen_alg}\","},{"line_number":211,"context_line":"                \"-o\", f\"encrypt.ivgen-hash-alg\u003d{ivgen_hash_alg}\","},{"line_number":212,"context_line":"            ])"},{"line_number":213,"context_line":"        cmd.extend([image_file, output_path])"},{"line_number":214,"context_line":"        LOG.debug("}],"source_content_type":"text/x-python","patch_set":13,"id":"ed05f8a4_90ec982a","line":211,"range":{"start_line":194,"start_character":7,"end_line":211,"end_character":65},"in_reply_to":"2a6bbc00_d609ce90","updated":"2026-04-23 10:23:12.000000000","message":"Done","commit_id":"35126c064c12efffba9142ce43f8c76960db13ab"},{"author":{"_account_id":34510,"name":"Maxim Sava","email":"msava@redhat.com","username":"msava@redhat.com"},"change_message_id":"964ff7633a9e5861bd4dab199623a4a78fc192f2","unresolved":false,"context_lines":[{"line_number":191,"context_line":"            \u0027qemu-img\u0027, \u0027convert\u0027, \u0027-f\u0027, file_format, \u0027-O\u0027, encryption_format,"},{"line_number":192,"context_line":"            \u0027--object\u0027, f\"secret,id\u003dimgkey,file\u003d{encryption_key_path}\","},{"line_number":193,"context_line":"        ]"},{"line_number":194,"context_line":"        if encryption_format \u003d\u003d \u0027luks\u0027:"},{"line_number":195,"context_line":"            cmd.extend(["},{"line_number":196,"context_line":"                \"-o\", \"key-secret\u003dimgkey\","},{"line_number":197,"context_line":"                \"-o\", f\"cipher-alg\u003d{cipher}\","},{"line_number":198,"context_line":"                \"-o\", f\"cipher-mode\u003d{cipher_mode}\","},{"line_number":199,"context_line":"                \"-o\", f\"hash-alg\u003d{hash_alg}\","},{"line_number":200,"context_line":"                \"-o\", f\"ivgen-alg\u003d{ivgen_alg}\","},{"line_number":201,"context_line":"                \"-o\", f\"ivgen-hash-alg\u003d{ivgen_hash_alg}\","},{"line_number":202,"context_line":"            ])"},{"line_number":203,"context_line":"        elif encryption_format \u003d\u003d \u0027qcow2\u0027:"},{"line_number":204,"context_line":"            cmd.extend(["},{"line_number":205,"context_line":"                \"-o\", \"encrypt.key-secret\u003dimgkey\","},{"line_number":206,"context_line":"                \"-o\", \"encrypt.format\u003dluks\","},{"line_number":207,"context_line":"                \"-o\", f\"encrypt.cipher-alg\u003d{cipher}\","},{"line_number":208,"context_line":"                \"-o\", f\"encrypt.cipher-mode\u003d{cipher_mode}\","},{"line_number":209,"context_line":"                \"-o\", f\"encrypt.hash-alg\u003d{hash_alg}\","},{"line_number":210,"context_line":"                \"-o\", f\"encrypt.ivgen-alg\u003d{ivgen_alg}\","},{"line_number":211,"context_line":"                \"-o\", f\"encrypt.ivgen-hash-alg\u003d{ivgen_hash_alg}\","},{"line_number":212,"context_line":"            ])"},{"line_number":213,"context_line":"        cmd.extend([image_file, output_path])"},{"line_number":214,"context_line":"        LOG.debug("}],"source_content_type":"text/x-python","patch_set":13,"id":"f1d8a64f_de3186f5","line":211,"range":{"start_line":194,"start_character":7,"end_line":211,"end_character":65},"in_reply_to":"2a6bbc00_d609ce90","updated":"2026-04-23 10:23:12.000000000","message":"Done","commit_id":"35126c064c12efffba9142ce43f8c76960db13ab"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"10c92ce81d4884ad483f4b8d7132b7bea4466c3c","unresolved":true,"context_lines":[{"line_number":191,"context_line":"            \u0027qemu-img\u0027, \u0027convert\u0027, \u0027-f\u0027, file_format, \u0027-O\u0027, encryption_format,"},{"line_number":192,"context_line":"            \u0027--object\u0027, f\"secret,id\u003dimgkey,file\u003d{encryption_key_path}\","},{"line_number":193,"context_line":"        ]"},{"line_number":194,"context_line":"        if encryption_format \u003d\u003d \u0027luks\u0027:"},{"line_number":195,"context_line":"            cmd.extend(["},{"line_number":196,"context_line":"                \"-o\", \"key-secret\u003dimgkey\","},{"line_number":197,"context_line":"                \"-o\", f\"cipher-alg\u003d{cipher}\","},{"line_number":198,"context_line":"                \"-o\", f\"cipher-mode\u003d{cipher_mode}\","},{"line_number":199,"context_line":"                \"-o\", f\"hash-alg\u003d{hash_alg}\","},{"line_number":200,"context_line":"                \"-o\", f\"ivgen-alg\u003d{ivgen_alg}\","},{"line_number":201,"context_line":"                \"-o\", f\"ivgen-hash-alg\u003d{ivgen_hash_alg}\","},{"line_number":202,"context_line":"            ])"},{"line_number":203,"context_line":"        elif encryption_format \u003d\u003d \u0027qcow2\u0027:"},{"line_number":204,"context_line":"            cmd.extend(["},{"line_number":205,"context_line":"                \"-o\", \"encrypt.key-secret\u003dimgkey\","},{"line_number":206,"context_line":"                \"-o\", \"encrypt.format\u003dluks\","},{"line_number":207,"context_line":"                \"-o\", f\"encrypt.cipher-alg\u003d{cipher}\","},{"line_number":208,"context_line":"                \"-o\", f\"encrypt.cipher-mode\u003d{cipher_mode}\","},{"line_number":209,"context_line":"                \"-o\", f\"encrypt.hash-alg\u003d{hash_alg}\","},{"line_number":210,"context_line":"                \"-o\", f\"encrypt.ivgen-alg\u003d{ivgen_alg}\","},{"line_number":211,"context_line":"                \"-o\", f\"encrypt.ivgen-hash-alg\u003d{ivgen_hash_alg}\","},{"line_number":212,"context_line":"            ])"},{"line_number":213,"context_line":"        cmd.extend([image_file, output_path])"},{"line_number":214,"context_line":"        LOG.debug("}],"source_content_type":"text/x-python","patch_set":13,"id":"2a6bbc00_d609ce90","line":211,"range":{"start_line":194,"start_character":7,"end_line":211,"end_character":65},"in_reply_to":"c97d9a8b_55c0d259","updated":"2026-04-22 08:16:10.000000000","message":"This is only true if Cinder is both producer and consumer of the image, as in the `os-volume_upload_image` action in the API (e.g. `openstack image create --volume`) in conjunction with a subsequent volume creation based on the image.\n\nIn case of the newly added workflow to upload encrypted images a as a user, only decryption happens in Cinder. Cinder is the consumer of the image, while the producer is the user, who encrypted the image outside of the cloud. In Tempest we need to imitate the actions of the user, i.e., encrypt the image and upload it to Glance before using it as source for volume creation.","commit_id":"35126c064c12efffba9142ce43f8c76960db13ab"}]}
