)]}'
{"cinder/image/image_utils.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1ea3be61d7954a92fab8bce3ec2b4fdd6375c817","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                        \"from a source volume encrypted.\""},{"line_number":209,"context_line":"                        ) % {\u0027format\u0027: out_format}"},{"line_number":210,"context_line":"            LOG.error(message)"},{"line_number":211,"context_line":"            raise \"TODO:FIXME\"  # TODO: handle encrypted-\u003eunencrypted"},{"line_number":212,"context_line":"        return _get_qemu_convert_luks_cmd("},{"line_number":213,"context_line":"            src,"},{"line_number":214,"context_line":"            dest,"}],"source_content_type":"text/x-python","patch_set":27,"id":"df33271e_784353b0","line":211,"range":{"start_line":211,"start_character":19,"end_line":211,"end_character":31},"updated":"2020-04-08 16:47:42.000000000","message":"Should include username here for future reference.","commit_id":"b3c293c30409e277d36bcb9ce35c0a1d2e4648d3"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"52420a7f4f7360631edf01e8e434ff6bd0138c96","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                          passphrase_file\u003dNone, compress\u003dFalse,"},{"line_number":203,"context_line":"                          src_passphrase_file\u003dNone):"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    if src_passphrase_file is not None:"},{"line_number":206,"context_line":"        if passphrase_file is None:"},{"line_number":207,"context_line":"            message \u003d _(\"Can\u0027t create unencrypted volume %(format)s \""},{"line_number":208,"context_line":"                        \"from a source volume encrypted.\""}],"source_content_type":"text/x-python","patch_set":29,"id":"3f4c43b2_d2639bdb","line":205,"updated":"2020-04-15 07:51:29.000000000","message":"As we already check the encryption key for source and volume  in nfs._copy_volume_from_snapshot [1], maybe we could just check for the \u0027luks\u0027 output format here. \n\n[1] https://review.opendev.org/#/c/597148/29/cinder/volume/drivers/nfs.py@620","commit_id":"adcc0d39ea7cbceff3729377a38f626a6a31393e"},{"author":{"_account_id":20813,"name":"Sofia Enriquez","email":"lsofia.enriquez@gmail.com","username":"enriquetaso"},"change_message_id":"5c1ae7047808a0475f53d81dfee14559af750592","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                          passphrase_file\u003dNone, compress\u003dFalse,"},{"line_number":203,"context_line":"                          src_passphrase_file\u003dNone):"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    if src_passphrase_file is not None:"},{"line_number":206,"context_line":"        if passphrase_file is None:"},{"line_number":207,"context_line":"            message \u003d _(\"Can\u0027t create unencrypted volume %(format)s \""},{"line_number":208,"context_line":"                        \"from a source volume encrypted.\""}],"source_content_type":"text/x-python","patch_set":29,"id":"1f493fa4_c43dd42d","line":205,"in_reply_to":"3f4c43b2_d2639bdb","updated":"2020-04-20 18:43:45.000000000","message":"I think it is valid to recheck the passphrase file here, in case we\u0027d like to reuse this in other drivers.","commit_id":"adcc0d39ea7cbceff3729377a38f626a6a31393e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2594a284beabe79d704e17c544062b774414cef1","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    if src_passphrase_file is not None:"},{"line_number":206,"context_line":"        if passphrase_file is None:"},{"line_number":207,"context_line":"            message \u003d _(\"Can\u0027t create unencrypted volume %(format)s \""},{"line_number":208,"context_line":"                        \"from a source volume encrypted.\""},{"line_number":209,"context_line":"                        ) % {\u0027format\u0027: out_format}"},{"line_number":210,"context_line":"            LOG.error(message)"},{"line_number":211,"context_line":"            # TODO(enriquetaso): handle encrypted-\u003eunencrypted"}],"source_content_type":"text/x-python","patch_set":29,"id":"3f4c43b2_2786aadc","line":208,"range":{"start_line":208,"start_character":30,"end_line":208,"end_character":55},"updated":"2020-04-20 14:47:15.000000000","message":"Should be \"from an encrypted source volume\".","commit_id":"adcc0d39ea7cbceff3729377a38f626a6a31393e"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"52420a7f4f7360631edf01e8e434ff6bd0138c96","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                        ) % {\u0027format\u0027: out_format}"},{"line_number":210,"context_line":"            LOG.error(message)"},{"line_number":211,"context_line":"            # TODO(enriquetaso): handle encrypted-\u003eunencrypted"},{"line_number":212,"context_line":"            raise \"TODO:FIXME\""},{"line_number":213,"context_line":"        return _get_qemu_convert_luks_cmd("},{"line_number":214,"context_line":"            src,"},{"line_number":215,"context_line":"            dest,"}],"source_content_type":"text/x-python","patch_set":29,"id":"3f4c43b2_af9b0c70","line":212,"updated":"2020-04-15 07:51:29.000000000","message":"Hi Sofia! I think we should raise a proper exception here.","commit_id":"adcc0d39ea7cbceff3729377a38f626a6a31393e"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"1e81a6b63f322ecdcbc9288efe0cf3a25736333d","unresolved":false,"context_lines":[{"line_number":186,"context_line":"    obj2 \u003d [\u0027--object\u0027,"},{"line_number":187,"context_line":"            \u0027secret,id\u003dsec2,format\u003draw,file\u003d%s\u0027 % passphrase_file]"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    src_opts \u003d \u0027encrypt.format\u003dluks,encrypt.key-secret\u003dsec1,\u0027 \\"},{"line_number":190,"context_line":"               \u0027file.filename\u003d%s\u0027 % src"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    image_opts \u003d [\u0027--image-opts\u0027, src_opts]"}],"source_content_type":"text/x-python","patch_set":37,"id":"bf51134e_af71b1aa","line":189,"range":{"start_line":189,"start_character":31,"end_line":189,"end_character":35},"updated":"2020-06-26 12:47:45.000000000","message":"Does this need to be \u0027luks1\u0027 ? (It does for cryptsetup, but I don\u0027t know if libcryptsetup is being used by qemu-img to do the conversion.)","commit_id":"44c7da9a44cc235b514e1b714cc7882683a8491d"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5725be6c901866b3ed4dc833d793ff3e8cf8c295","unresolved":false,"context_lines":[{"line_number":186,"context_line":"    obj2 \u003d [\u0027--object\u0027,"},{"line_number":187,"context_line":"            \u0027secret,id\u003dsec2,format\u003draw,file\u003d%s\u0027 % passphrase_file]"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    src_opts \u003d \u0027encrypt.format\u003dluks,encrypt.key-secret\u003dsec1,\u0027 \\"},{"line_number":190,"context_line":"               \u0027file.filename\u003d%s\u0027 % src"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    image_opts \u003d [\u0027--image-opts\u0027, src_opts]"}],"source_content_type":"text/x-python","patch_set":37,"id":"bf51134e_d5cf5226","line":189,"range":{"start_line":189,"start_character":31,"end_line":189,"end_character":35},"in_reply_to":"bf51134e_921cd078","updated":"2020-06-26 15:06:30.000000000","message":"Gorka helped poke around in qemu [0], and it looks like it\u0027s using luks1 when it actually calls cryptsetup, so \u0027luks\u0027 for qumu \u003d\u003d \u0027luks1\u0027.\n\n[0] https://github.com/qemu/qemu/blob/ea1329bb3a8d5cd25b70e3dbf73e7ded4d5ad756/tests/qemu-iotests/149#L155","commit_id":"44c7da9a44cc235b514e1b714cc7882683a8491d"},{"author":{"_account_id":20813,"name":"Sofia Enriquez","email":"lsofia.enriquez@gmail.com","username":"enriquetaso"},"change_message_id":"c399e6680e620a4e20bdd6a48c221cbe9df39471","unresolved":false,"context_lines":[{"line_number":186,"context_line":"    obj2 \u003d [\u0027--object\u0027,"},{"line_number":187,"context_line":"            \u0027secret,id\u003dsec2,format\u003draw,file\u003d%s\u0027 % passphrase_file]"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    src_opts \u003d \u0027encrypt.format\u003dluks,encrypt.key-secret\u003dsec1,\u0027 \\"},{"line_number":190,"context_line":"               \u0027file.filename\u003d%s\u0027 % src"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    image_opts \u003d [\u0027--image-opts\u0027, src_opts]"}],"source_content_type":"text/x-python","patch_set":37,"id":"bf51134e_921cd078","line":189,"range":{"start_line":189,"start_character":31,"end_line":189,"end_character":35},"in_reply_to":"bf51134e_af71b1aa","updated":"2020-06-26 14:24:51.000000000","message":"Good question, let me double check libcryptsetup.","commit_id":"44c7da9a44cc235b514e1b714cc7882683a8491d"}],"cinder/tests/unit/volume/drivers/test_nfs.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"efb976e866e310057e12eaa932e81b79cf1d111d","unresolved":false,"context_lines":[{"line_number":1200,"context_line":""},{"line_number":1201,"context_line":"        drv._ensure_share_mounted(self.TEST_NFS_EXPORT1)"},{"line_number":1202,"context_line":""},{"line_number":1203,"context_line":"        drv._remotefsclient.mount.assert_called_once()"},{"line_number":1204,"context_line":""},{"line_number":1205,"context_line":"    @mock.patch(\u0027time.sleep\u0027)"},{"line_number":1206,"context_line":"    def test_ensure_share_mounted_exception(self, _mock_sleep):"}],"source_content_type":"text/x-python","patch_set":35,"id":"ff570b3c_01881720","line":1203,"updated":"2020-06-10 15:24:01.000000000","message":"This can be hardened as\n    drv._remotefsclient.mount.assert_called_once_with(self.TEST_NFS_EXPORT1, [])","commit_id":"427e06b906d27628b644db52f87d17eaf34ce6d1"}],"cinder/volume/drivers/nfs.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"51c6f8a77186880db033bfcc35441b6361334344","unresolved":false,"context_lines":[{"line_number":624,"context_line":"                            ) % {\u0027format\u0027: out_format}"},{"line_number":625,"context_line":"                LOG.error(message)"},{"line_number":626,"context_line":"                # TODO: handle encrypted-\u003eunencrypted"},{"line_number":627,"context_line":"                raise \"TODO:FIXME\""},{"line_number":628,"context_line":"            keymgr \u003d key_manager.API(CONF)"},{"line_number":629,"context_line":"            new_key \u003d keymgr.get(volume.obj_context, new_encryption_key_id)"},{"line_number":630,"context_line":"            new_passphrase \u003d \\"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_dfb28ee8","line":627,"range":{"start_line":627,"start_character":17,"end_line":627,"end_character":34},"updated":"2020-01-20 19:09:51.000000000","message":"Should change this to raise a proper error.","commit_id":"50a44d8ea0f27df26017d6c054673abd83f60cf5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1ea3be61d7954a92fab8bce3ec2b4fdd6375c817","unresolved":false,"context_lines":[{"line_number":623,"context_line":"                            \"from a source volume encrypted.\""},{"line_number":624,"context_line":"                            ) % {\u0027format\u0027: out_format}"},{"line_number":625,"context_line":"                LOG.error(message)"},{"line_number":626,"context_line":"                # TODO: handle encrypted-\u003eunencrypted"},{"line_number":627,"context_line":"                raise exception.NfsException(message)"},{"line_number":628,"context_line":"            keymgr \u003d key_manager.API(CONF)"},{"line_number":629,"context_line":"            new_key \u003d keymgr.get(volume.obj_context, new_encryption_key_id)"}],"source_content_type":"text/x-python","patch_set":27,"id":"df33271e_38d54bb8","line":626,"range":{"start_line":626,"start_character":18,"end_line":626,"end_character":23},"updated":"2020-04-08 16:47:42.000000000","message":"Should add a username here too.","commit_id":"b3c293c30409e277d36bcb9ce35c0a1d2e4648d3"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"52420a7f4f7360631edf01e8e434ff6bd0138c96","unresolved":false,"context_lines":[{"line_number":617,"context_line":"        else:"},{"line_number":618,"context_line":"            out_format \u003d \u0027raw\u0027"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"        if new_encryption_key_id is not None:"},{"line_number":621,"context_line":"            if src_encryption_key_id is None:"},{"line_number":622,"context_line":"                message \u003d _(\"Can\u0027t create unencrypted volume %(format)s \""},{"line_number":623,"context_line":"                            \"from a source volume encrypted.\""},{"line_number":624,"context_line":"                            ) % {\u0027format\u0027: out_format}"},{"line_number":625,"context_line":"                LOG.error(message)"},{"line_number":626,"context_line":"                # TODO(enriquetaso): handle encrypted-\u003eunencrypted"},{"line_number":627,"context_line":"                raise exception.NfsException(message)"}],"source_content_type":"text/x-python","patch_set":29,"id":"3f4c43b2_329e3f56","line":624,"range":{"start_line":620,"start_character":0,"end_line":624,"end_character":54},"updated":"2020-04-15 07:51:29.000000000","message":"I have two questions here. I\u0027m sleepy and worried that both can be wrong :S\n\n1) if we have a new_encryption_key_id (volume key) but src_encryption_key_id (source key) is None, I understand it means we are trying to create a encrypted volume from a unencrypted source, but the message says the opposite. am I correct our I\u0027m losing something here?\n\n2) Can we create a encrypted volume from a unencrypted source? If it should be possible, looks like the second check (if src_encryption_key_id is None) will prevent the driver from creating the volume.","commit_id":"adcc0d39ea7cbceff3729377a38f626a6a31393e"},{"author":{"_account_id":20813,"name":"Sofia Enriquez","email":"lsofia.enriquez@gmail.com","username":"enriquetaso"},"change_message_id":"5c1ae7047808a0475f53d81dfee14559af750592","unresolved":false,"context_lines":[{"line_number":617,"context_line":"        else:"},{"line_number":618,"context_line":"            out_format \u003d \u0027raw\u0027"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"        if new_encryption_key_id is not None:"},{"line_number":621,"context_line":"            if src_encryption_key_id is None:"},{"line_number":622,"context_line":"                message \u003d _(\"Can\u0027t create unencrypted volume %(format)s \""},{"line_number":623,"context_line":"                            \"from a source volume encrypted.\""},{"line_number":624,"context_line":"                            ) % {\u0027format\u0027: out_format}"},{"line_number":625,"context_line":"                LOG.error(message)"},{"line_number":626,"context_line":"                # TODO(enriquetaso): handle encrypted-\u003eunencrypted"},{"line_number":627,"context_line":"                raise exception.NfsException(message)"}],"source_content_type":"text/x-python","patch_set":29,"id":"1f493fa4_8f7da570","line":624,"range":{"start_line":620,"start_character":0,"end_line":624,"end_character":54},"in_reply_to":"3f4c43b2_329e3f56","updated":"2020-04-20 18:43:45.000000000","message":"1) True. I\u0027ll update it. \n2) Ideally we should support creating encrypted volumes from unencrypted sources. However, this patch won\u0027t add that functionality.  Since that functionality needs more extended testing scope. Best case scenario, I\u0027ll work on that after this patch. \n\nSame idea for the feature \"handle encrypted-\u003eunencrypted\".\nhttps://review.opendev.org/#/c/597148/29/cinder/image/image_utils.py@211","commit_id":"adcc0d39ea7cbceff3729377a38f626a6a31393e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"246db0762005cce5b4bc5dfeb143dcc104a151c6","unresolved":false,"context_lines":[{"line_number":636,"context_line":"                binascii.hexlify(src_key.get_encoded()).decode(\u0027utf-8\u0027)"},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"            tmp_dir \u003d volume_utils.image_conversion_dir()"},{"line_number":639,"context_line":"            with tempfile.NamedTemporaryFile(prefix\u003d\u0027luks_\u0027,"},{"line_number":640,"context_line":"                                             dir\u003dtmp_dir) as src_pass_file:"},{"line_number":641,"context_line":"                with open(src_pass_file.name, \u0027w\u0027) as f:"},{"line_number":642,"context_line":"                    f.write(src_passphrase)"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"                with tempfile.NamedTemporaryFile(prefix\u003d\u0027luks_\u0027,"},{"line_number":645,"context_line":"                                                 dir\u003dtmp_dir) as new_pass_file:"},{"line_number":646,"context_line":"                    with open(new_pass_file.name, \u0027w\u0027) as f:"},{"line_number":647,"context_line":"                        f.write(new_passphrase)"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"                    image_utils.convert_image("},{"line_number":650,"context_line":"                        path_to_snap_img,"},{"line_number":651,"context_line":"                        path_to_new_vol,"},{"line_number":652,"context_line":"                        \u0027luks\u0027,"},{"line_number":653,"context_line":"                        passphrase_file\u003dnew_pass_file.name,"},{"line_number":654,"context_line":"                        src_passphrase_file\u003dsrc_pass_file.name,"},{"line_number":655,"context_line":"                        run_as_root\u003dself._execute_as_root)"},{"line_number":656,"context_line":"        else:"},{"line_number":657,"context_line":"            image_utils.convert_image(path_to_snap_img,"},{"line_number":658,"context_line":"                                      path_to_new_vol,"}],"source_content_type":"text/x-python","patch_set":37,"id":"bf51134e_53f6ded8","line":655,"range":{"start_line":639,"start_character":0,"end_line":655,"end_character":58},"updated":"2020-06-24 18:31:09.000000000","message":"So, we have several operations that are dependent on the FS here that could fail.  Should we try to catch any failures here and produce a graceful error message?","commit_id":"44c7da9a44cc235b514e1b714cc7882683a8491d"},{"author":{"_account_id":20813,"name":"Sofia Enriquez","email":"lsofia.enriquez@gmail.com","username":"enriquetaso"},"change_message_id":"c399e6680e620a4e20bdd6a48c221cbe9df39471","unresolved":false,"context_lines":[{"line_number":636,"context_line":"                binascii.hexlify(src_key.get_encoded()).decode(\u0027utf-8\u0027)"},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"            tmp_dir \u003d volume_utils.image_conversion_dir()"},{"line_number":639,"context_line":"            with tempfile.NamedTemporaryFile(prefix\u003d\u0027luks_\u0027,"},{"line_number":640,"context_line":"                                             dir\u003dtmp_dir) as src_pass_file:"},{"line_number":641,"context_line":"                with open(src_pass_file.name, \u0027w\u0027) as f:"},{"line_number":642,"context_line":"                    f.write(src_passphrase)"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"                with tempfile.NamedTemporaryFile(prefix\u003d\u0027luks_\u0027,"},{"line_number":645,"context_line":"                                                 dir\u003dtmp_dir) as new_pass_file:"},{"line_number":646,"context_line":"                    with open(new_pass_file.name, \u0027w\u0027) as f:"},{"line_number":647,"context_line":"                        f.write(new_passphrase)"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"                    image_utils.convert_image("},{"line_number":650,"context_line":"                        path_to_snap_img,"},{"line_number":651,"context_line":"                        path_to_new_vol,"},{"line_number":652,"context_line":"                        \u0027luks\u0027,"},{"line_number":653,"context_line":"                        passphrase_file\u003dnew_pass_file.name,"},{"line_number":654,"context_line":"                        src_passphrase_file\u003dsrc_pass_file.name,"},{"line_number":655,"context_line":"                        run_as_root\u003dself._execute_as_root)"},{"line_number":656,"context_line":"        else:"},{"line_number":657,"context_line":"            image_utils.convert_image(path_to_snap_img,"},{"line_number":658,"context_line":"                                      path_to_new_vol,"}],"source_content_type":"text/x-python","patch_set":37,"id":"bf51134e_1262800a","line":655,"range":{"start_line":639,"start_character":0,"end_line":655,"end_character":58},"in_reply_to":"bf51134e_53f6ded8","updated":"2020-06-26 14:24:51.000000000","message":"Thanks Jay for your help. I think it\u0027s a good idea to add an error message here in case something with the FS happens.  ","commit_id":"44c7da9a44cc235b514e1b714cc7882683a8491d"}],"cinder/volume/drivers/remotefs.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"51c6f8a77186880db033bfcc35441b6361334344","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        tmp_dir \u003d volume_utils.image_conversion_dir()"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        with tempfile.NamedTemporaryFile(dir\u003dtmp_dir) as tmp_key:"},{"line_number":445,"context_line":"            # TODO: make sure this is actually a safe place to"},{"line_number":446,"context_line":"            # temporarily store a key"},{"line_number":447,"context_line":"            # TODO: encrypt w/ aes256 cipher text (qemu-img feature) ?"},{"line_number":448,"context_line":"            with open(tmp_key.name, \u0027w\u0027) as f:"},{"line_number":449,"context_line":"                f.write(passphrase)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_9fac1689","line":446,"range":{"start_line":445,"start_character":12,"end_line":446,"end_character":37},"updated":"2020-01-20 19:09:51.000000000","message":"Should resolve this.","commit_id":"50a44d8ea0f27df26017d6c054673abd83f60cf5"},{"author":{"_account_id":20813,"name":"Sofia Enriquez","email":"lsofia.enriquez@gmail.com","username":"enriquetaso"},"change_message_id":"16369da2e7515ce6421a68c8f9dfa42a49f1dc4f","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        tmp_dir \u003d volume_utils.image_conversion_dir()"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        with tempfile.NamedTemporaryFile(dir\u003dtmp_dir) as tmp_key:"},{"line_number":445,"context_line":"            # TODO: make sure this is actually a safe place to"},{"line_number":446,"context_line":"            # temporarily store a key"},{"line_number":447,"context_line":"            # TODO: encrypt w/ aes256 cipher text (qemu-img feature) ?"},{"line_number":448,"context_line":"            with open(tmp_key.name, \u0027w\u0027) as f:"},{"line_number":449,"context_line":"                f.write(passphrase)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_a2fa1974","line":446,"range":{"start_line":445,"start_character":12,"end_line":446,"end_character":37},"in_reply_to":"3fa7e38b_9fac1689","updated":"2020-01-21 18:27:26.000000000","message":"I think this comment it\u0027s already solved, because it\u0027s from the original code when the patch was using a local method to generate \"tmp_dir\" : tmp_dir \u003d self._image_conversion_dir().\n\nCurrently using the generic \u0027volume_utils\u0027 to avoid problems.","commit_id":"50a44d8ea0f27df26017d6c054673abd83f60cf5"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"51c6f8a77186880db033bfcc35441b6361334344","unresolved":false,"context_lines":[{"line_number":887,"context_line":"                      run_as_root\u003dself._execute_as_root)"},{"line_number":888,"context_line":"        self._delete(path)"},{"line_number":889,"context_line":"        # TODO(eharney): NFS-ENC this fails when committing encrypted images,"},{"line_number":890,"context_line":"        # needs to pass in encryption key info to qemu-img."},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"    def _rebase_img(self, image, backing_file, volume_format):"},{"line_number":893,"context_line":"        # qemu-img create must run as root, because it reads from the"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_ffb50ad0","line":890,"updated":"2020-01-20 19:09:51.000000000","message":"Is this significant?","commit_id":"50a44d8ea0f27df26017d6c054673abd83f60cf5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1ea3be61d7954a92fab8bce3ec2b4fdd6375c817","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        cipher_spec \u003d image_utils.decode_cipher(encryption[\u0027cipher\u0027],"},{"line_number":433,"context_line":"                                                encryption[\u0027key_size\u0027])"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"        # TODO: share this code w/ the RBD driver"},{"line_number":436,"context_line":"        # Fetch the key associated with the volume and decode the passphrase"},{"line_number":437,"context_line":"        keymgr \u003d key_manager.API(CONF)"},{"line_number":438,"context_line":"        key \u003d keymgr.get(context, encryption[\u0027encryption_key_id\u0027])"}],"source_content_type":"text/x-python","patch_set":27,"id":"df33271e_f8ec8390","line":435,"range":{"start_line":435,"start_character":9,"end_line":435,"end_character":14},"updated":"2020-04-08 16:47:42.000000000","message":"Here as well.","commit_id":"b3c293c30409e277d36bcb9ce35c0a1d2e4648d3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1ea3be61d7954a92fab8bce3ec2b4fdd6375c817","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        tmp_dir \u003d volume_utils.image_conversion_dir()"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        with tempfile.NamedTemporaryFile(dir\u003dtmp_dir) as tmp_key:"},{"line_number":445,"context_line":"            # TODO: encrypt w/ aes256 cipher text (qemu-img feature) ?"},{"line_number":446,"context_line":"            with open(tmp_key.name, \u0027w\u0027) as f:"},{"line_number":447,"context_line":"                f.write(passphrase)"},{"line_number":448,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"df33271e_189fa703","line":445,"range":{"start_line":445,"start_character":14,"end_line":445,"end_character":19},"updated":"2020-04-08 16:47:42.000000000","message":"Here too.","commit_id":"b3c293c30409e277d36bcb9ce35c0a1d2e4648d3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1ea3be61d7954a92fab8bce3ec2b4fdd6375c817","unresolved":false,"context_lines":[{"line_number":920,"context_line":""},{"line_number":921,"context_line":"            command +\u003d [\u0027--object\u0027, objectdef, \u0027-b\u0027, backing_file,"},{"line_number":922,"context_line":"                        \u0027-F\u0027, volume_format, \u0027--image-opts\u0027, filename]"},{"line_number":923,"context_line":"        # no encrypted"},{"line_number":924,"context_line":"        else:"},{"line_number":925,"context_line":"            command +\u003d [\u0027-b\u0027, backing_file, image, \u0027-F\u0027, volume_format]"},{"line_number":926,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"df33271e_b8c03be2","line":923,"range":{"start_line":923,"start_character":9,"end_line":923,"end_character":21},"updated":"2020-04-08 16:47:42.000000000","message":"not encrypted","commit_id":"b3c293c30409e277d36bcb9ce35c0a1d2e4648d3"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"407f96104f18c812ac5e168d5c1a79bdad512842","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        volume_path \u003d self.local_path(volume)"},{"line_number":301,"context_line":"        volume_size \u003d volume.size"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        encrypted \u003d volume.encryption_key_id is not None"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        if encrypted:"},{"line_number":306,"context_line":"            encryption \u003d volume_utils.check_encryption_provider("},{"line_number":307,"context_line":"                self.db,"},{"line_number":308,"context_line":"                volume,"}],"source_content_type":"text/x-python","patch_set":28,"id":"df33271e_7fa3219f","line":305,"range":{"start_line":303,"start_character":8,"end_line":305,"end_character":21},"updated":"2020-04-09 13:23:07.000000000","message":"i think we can replace this with\n\nif volume.encryption_key_id:","commit_id":"3fe7df7f666fe6b9c29ee9250f031a2ee6af35ff"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"407f96104f18c812ac5e168d5c1a79bdad512842","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        cipher_spec \u003d image_utils.decode_cipher(encryption[\u0027cipher\u0027],"},{"line_number":433,"context_line":"                                                encryption[\u0027key_size\u0027])"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"        # TODO(enriquetaso): share this code w/ the RBD driver"},{"line_number":436,"context_line":"        # Fetch the key associated with the volume and decode the passphrase"},{"line_number":437,"context_line":"        keymgr \u003d key_manager.API(CONF)"},{"line_number":438,"context_line":"        key \u003d keymgr.get(context, encryption[\u0027encryption_key_id\u0027])"},{"line_number":439,"context_line":"        passphrase \u003d binascii.hexlify(key.get_encoded()).decode(\u0027utf-8\u0027)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        # create a file"},{"line_number":442,"context_line":"        tmp_dir \u003d volume_utils.image_conversion_dir()"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        with tempfile.NamedTemporaryFile(dir\u003dtmp_dir) as tmp_key:"},{"line_number":445,"context_line":"            # TODO(enriquetaso): encrypt w/ aes256 cipher text"},{"line_number":446,"context_line":"            # (qemu-img feature) ?"},{"line_number":447,"context_line":"            with open(tmp_key.name, \u0027w\u0027) as f:"},{"line_number":448,"context_line":"                f.write(passphrase)"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"            self._execute("},{"line_number":451,"context_line":"                \u0027qemu-img\u0027, \u0027create\u0027, \u0027-f\u0027, \u0027qcow2\u0027,"},{"line_number":452,"context_line":"                \u0027-o\u0027,"},{"line_number":453,"context_line":"                \u0027encrypt.format\u003dluks,\u0027"},{"line_number":454,"context_line":"                \u0027encrypt.key-secret\u003dsec1,\u0027"},{"line_number":455,"context_line":"                \u0027encrypt.cipher-alg\u003d%(cipher_alg)s,\u0027"},{"line_number":456,"context_line":"                \u0027encrypt.cipher-mode\u003d%(cipher_mode)s,\u0027"},{"line_number":457,"context_line":"                \u0027encrypt.ivgen-alg\u003d%(ivgen_alg)s\u0027 % cipher_spec,"},{"line_number":458,"context_line":"                \u0027--object\u0027, \u0027secret,id\u003dsec1,format\u003draw,file\u003d\u0027 + tmp_key.name,"},{"line_number":459,"context_line":"                path, str(size_gb * units.Gi),"},{"line_number":460,"context_line":"                run_as_root\u003dself._execute_as_root)"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def _set_rw_permissions(self, path):"},{"line_number":463,"context_line":"        \"\"\"Sets access permissions for given NFS path."}],"source_content_type":"text/x-python","patch_set":28,"id":"df33271e_222a1e2b","line":460,"range":{"start_line":435,"start_character":8,"end_line":460,"end_character":50},"updated":"2020-04-09 13:23:07.000000000","message":"a lot of code seems repeated in most of the methods (as the same procedure is performed), can we have a common method in volume_utils or somewhere to reduce LOC for the common code","commit_id":"3fe7df7f666fe6b9c29ee9250f031a2ee6af35ff"},{"author":{"_account_id":20813,"name":"Sofia Enriquez","email":"lsofia.enriquez@gmail.com","username":"enriquetaso"},"change_message_id":"e4a94afa679d768b19de5850d2748a54203bc5df","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        cipher_spec \u003d image_utils.decode_cipher(encryption[\u0027cipher\u0027],"},{"line_number":433,"context_line":"                                                encryption[\u0027key_size\u0027])"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"        # TODO(enriquetaso): share this code w/ the RBD driver"},{"line_number":436,"context_line":"        # Fetch the key associated with the volume and decode the passphrase"},{"line_number":437,"context_line":"        keymgr \u003d key_manager.API(CONF)"},{"line_number":438,"context_line":"        key \u003d keymgr.get(context, encryption[\u0027encryption_key_id\u0027])"},{"line_number":439,"context_line":"        passphrase \u003d binascii.hexlify(key.get_encoded()).decode(\u0027utf-8\u0027)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        # create a file"},{"line_number":442,"context_line":"        tmp_dir \u003d volume_utils.image_conversion_dir()"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        with tempfile.NamedTemporaryFile(dir\u003dtmp_dir) as tmp_key:"},{"line_number":445,"context_line":"            # TODO(enriquetaso): encrypt w/ aes256 cipher text"},{"line_number":446,"context_line":"            # (qemu-img feature) ?"},{"line_number":447,"context_line":"            with open(tmp_key.name, \u0027w\u0027) as f:"},{"line_number":448,"context_line":"                f.write(passphrase)"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"            self._execute("},{"line_number":451,"context_line":"                \u0027qemu-img\u0027, \u0027create\u0027, \u0027-f\u0027, \u0027qcow2\u0027,"},{"line_number":452,"context_line":"                \u0027-o\u0027,"},{"line_number":453,"context_line":"                \u0027encrypt.format\u003dluks,\u0027"},{"line_number":454,"context_line":"                \u0027encrypt.key-secret\u003dsec1,\u0027"},{"line_number":455,"context_line":"                \u0027encrypt.cipher-alg\u003d%(cipher_alg)s,\u0027"},{"line_number":456,"context_line":"                \u0027encrypt.cipher-mode\u003d%(cipher_mode)s,\u0027"},{"line_number":457,"context_line":"                \u0027encrypt.ivgen-alg\u003d%(ivgen_alg)s\u0027 % cipher_spec,"},{"line_number":458,"context_line":"                \u0027--object\u0027, \u0027secret,id\u003dsec1,format\u003draw,file\u003d\u0027 + tmp_key.name,"},{"line_number":459,"context_line":"                path, str(size_gb * units.Gi),"},{"line_number":460,"context_line":"                run_as_root\u003dself._execute_as_root)"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def _set_rw_permissions(self, path):"},{"line_number":463,"context_line":"        \"\"\"Sets access permissions for given NFS path."}],"source_content_type":"text/x-python","patch_set":28,"id":"3f4c43b2_0324bec5","line":460,"range":{"start_line":435,"start_character":8,"end_line":460,"end_character":50},"in_reply_to":"df33271e_222a1e2b","updated":"2020-04-13 19:18:39.000000000","message":"Hi Rajat, I\u0027m not sure what to do here. The RBD driver also have repeated code like this rbd.py L896 and L1538. I wonder if I should replace all this in a new patch...","commit_id":"3fe7df7f666fe6b9c29ee9250f031a2ee6af35ff"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"407f96104f18c812ac5e168d5c1a79bdad512842","unresolved":false,"context_lines":[{"line_number":1304,"context_line":"            return self._delete_snapshot_online(context,"},{"line_number":1305,"context_line":"                                                snapshot,"},{"line_number":1306,"context_line":"                                                online_delete_info)"},{"line_number":1307,"context_line":""},{"line_number":1308,"context_line":"        encrypted \u003d snapshot.encryption_key_id is not None"},{"line_number":1309,"context_line":""},{"line_number":1310,"context_line":"        if encrypted:"},{"line_number":1311,"context_line":"            keymgr \u003d key_manager.API(CONF)"},{"line_number":1312,"context_line":"            encryption_key \u003d snapshot.encryption_key_id"},{"line_number":1313,"context_line":"            new_key \u003d keymgr.get(snapshot.obj_context, encryption_key)"}],"source_content_type":"text/x-python","patch_set":28,"id":"df33271e_0200ba00","line":1310,"range":{"start_line":1307,"start_character":0,"end_line":1310,"end_character":21},"updated":"2020-04-09 13:23:07.000000000","message":"if snapshot.encryption_key_id:\n    ...","commit_id":"3fe7df7f666fe6b9c29ee9250f031a2ee6af35ff"},{"author":{"_account_id":20813,"name":"Sofia Enriquez","email":"lsofia.enriquez@gmail.com","username":"enriquetaso"},"change_message_id":"e4a94afa679d768b19de5850d2748a54203bc5df","unresolved":false,"context_lines":[{"line_number":1304,"context_line":"            return self._delete_snapshot_online(context,"},{"line_number":1305,"context_line":"                                                snapshot,"},{"line_number":1306,"context_line":"                                                online_delete_info)"},{"line_number":1307,"context_line":""},{"line_number":1308,"context_line":"        encrypted \u003d snapshot.encryption_key_id is not None"},{"line_number":1309,"context_line":""},{"line_number":1310,"context_line":"        if encrypted:"},{"line_number":1311,"context_line":"            keymgr \u003d key_manager.API(CONF)"},{"line_number":1312,"context_line":"            encryption_key \u003d snapshot.encryption_key_id"},{"line_number":1313,"context_line":"            new_key \u003d keymgr.get(snapshot.obj_context, encryption_key)"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f4c43b2_a3122ab0","line":1310,"range":{"start_line":1307,"start_character":0,"end_line":1310,"end_character":21},"in_reply_to":"df33271e_0200ba00","updated":"2020-04-13 19:18:39.000000000","message":"IMHO If we change this, the code will be less clear. Although it will be shorter, I could need to add some comments to specify that we are checking encryption.","commit_id":"3fe7df7f666fe6b9c29ee9250f031a2ee6af35ff"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"407f96104f18c812ac5e168d5c1a79bdad512842","unresolved":false,"context_lines":[{"line_number":1417,"context_line":"                                   new_encryption_key_id\u003dNone):"},{"line_number":1418,"context_line":"        raise NotImplementedError()"},{"line_number":1419,"context_line":""},{"line_number":1420,"context_line":"    def _check_encryption_provider(self, volume, context):"},{"line_number":1421,"context_line":"        \"\"\"Check that this is a LUKS encryption provider."},{"line_number":1422,"context_line":""},{"line_number":1423,"context_line":"        :returns: encryption dict"},{"line_number":1424,"context_line":"        \"\"\""},{"line_number":1425,"context_line":""},{"line_number":1426,"context_line":"        encryption \u003d self.db.volume_encryption_metadata_get(context, volume.id)"},{"line_number":1427,"context_line":"        provider \u003d encryption[\u0027provider\u0027]"},{"line_number":1428,"context_line":"        if provider in encryptors.LEGACY_PROVIDER_CLASS_TO_FORMAT_MAP:"},{"line_number":1429,"context_line":"            provider \u003d encryptors.LEGACY_PROVIDER_CLASS_TO_FORMAT_MAP[provider]"},{"line_number":1430,"context_line":"        if provider !\u003d encryptors.LUKS:"},{"line_number":1431,"context_line":"            message \u003d _(\"Provider %s not supported.\") % provider"},{"line_number":1432,"context_line":"            raise exception.VolumeDriverException(message\u003dmessage)"},{"line_number":1433,"context_line":""},{"line_number":1434,"context_line":"        if \u0027cipher\u0027 not in encryption or \u0027key_size\u0027 not in encryption:"},{"line_number":1435,"context_line":"            msg \u003d _(\u0027encryption spec must contain \"cipher\" and\u0027"},{"line_number":1436,"context_line":"                    \u0027\"key_size\"\u0027)"},{"line_number":1437,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":1438,"context_line":""},{"line_number":1439,"context_line":"        return encryption"},{"line_number":1440,"context_line":""},{"line_number":1441,"context_line":"    def _do_create_snapshot(self, snapshot, backing_filename,"},{"line_number":1442,"context_line":"                            new_snap_path):"}],"source_content_type":"text/x-python","patch_set":28,"id":"df33271e_82ddea71","line":1439,"range":{"start_line":1420,"start_character":0,"end_line":1439,"end_character":25},"updated":"2020-04-09 13:23:07.000000000","message":"we already have this method in volume_utils, why are we declaring it here again?\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/volume_utils.py#L1189","commit_id":"3fe7df7f666fe6b9c29ee9250f031a2ee6af35ff"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"bb1590a04b3fa476df638500c57a64293998adac","unresolved":false,"context_lines":[{"line_number":1478,"context_line":"                                           }}"},{"line_number":1479,"context_line":"                file_json \u003d jsonutils.dumps(file_json_dict)"},{"line_number":1480,"context_line":""},{"line_number":1481,"context_line":"                encryption \u003d volume_utils.check_encryption_provider("},{"line_number":1482,"context_line":"                    snapshot.volume,"},{"line_number":1483,"context_line":"                    obj_context)"},{"line_number":1484,"context_line":""},{"line_number":1485,"context_line":"                cipher_spec \u003d image_utils.decode_cipher(encryption[\u0027cipher\u0027],"},{"line_number":1486,"context_line":"                                                        encryption[\u0027key_size\u0027])"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f493fa4_c7dd9643","line":1483,"range":{"start_line":1481,"start_character":0,"end_line":1483,"end_character":32},"updated":"2020-04-23 09:45:34.000000000","message":"Apr 23 05:31:47 ibm-p8-kvm-03-guest-02 cinder-volume[20972]: ERROR oslo_messaging.rpc.server   File \"/opt/stack/cinder/cinder/volume/drivers/remotefs.py\", line 1483, in _do_create_snapshot\nApr 23 05:31:47 ibm-p8-kvm-03-guest-02 cinder-volume[20972]: ERROR oslo_messaging.rpc.server     obj_context)\nApr 23 05:31:47 ibm-p8-kvm-03-guest-02 cinder-volume[20972]: ERROR oslo_messaging.rpc.server TypeError: check_encryption_provider() missing 1 required positional argument: \u0027context\u0027\nApr 23 05:31:47 ibm-p8-kvm-03-guest-02 cinder-volume[20972]: ERROR oslo_messaging.rpc.server\n\nNeeds self.db as the first arg. Once fixed I hit the following qemu-img error on a bionic test devstack env :\n\nStderr: \u0027qemu-img: /opt/stack/data/cinder/mnt/896fb15da6036b68a917322e72ebfe57/volume-91cb5779-6f5e-4fcd-b49e-324c52e7dfb2.6433b719-fc61-4127-947e-37779d7dcd75: Image is not in qcow2 format\\nCould not open backing image to determine size.\\n\u0027\n\nWhich distro and versions of QEMU / libvirt are you using?","commit_id":"3bf9a9f53a7f01f8b18b77b10f27539e0175c67d"},{"author":{"_account_id":20813,"name":"Sofia Enriquez","email":"lsofia.enriquez@gmail.com","username":"enriquetaso"},"change_message_id":"f2d515179ac777fdfc9d027d2f19c712f9278204","unresolved":false,"context_lines":[{"line_number":1478,"context_line":"                                           }}"},{"line_number":1479,"context_line":"                file_json \u003d jsonutils.dumps(file_json_dict)"},{"line_number":1480,"context_line":""},{"line_number":1481,"context_line":"                encryption \u003d volume_utils.check_encryption_provider("},{"line_number":1482,"context_line":"                    snapshot.volume,"},{"line_number":1483,"context_line":"                    obj_context)"},{"line_number":1484,"context_line":""},{"line_number":1485,"context_line":"                cipher_spec \u003d image_utils.decode_cipher(encryption[\u0027cipher\u0027],"},{"line_number":1486,"context_line":"                                                        encryption[\u0027key_size\u0027])"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f493fa4_8b41cb0e","line":1483,"range":{"start_line":1481,"start_character":0,"end_line":1483,"end_character":32},"in_reply_to":"1f493fa4_c7dd9643","updated":"2020-04-23 18:30:41.000000000","message":"qemu-img version 2.11.1(Debian 1:2.11+dfsg-1ubuntu7.23)\nCopyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers","commit_id":"3bf9a9f53a7f01f8b18b77b10f27539e0175c67d"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1caccf1fbcd965662a047f9d50c882337bb2debd","unresolved":false,"context_lines":[{"line_number":1474,"context_line":"                                           }}"},{"line_number":1475,"context_line":"                file_json \u003d jsonutils.dumps(file_json_dict)"},{"line_number":1476,"context_line":""},{"line_number":1477,"context_line":"                encryption \u003d volume_utils.check_encryption_provider("},{"line_number":1478,"context_line":"                    snapshot.volume,"},{"line_number":1479,"context_line":"                    obj_context)"},{"line_number":1480,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"bf51134e_0466f7c1","line":1477,"updated":"2020-06-23 17:55:36.000000000","message":"This is missing an argument.\n\n    http://paste.openstack.org/show/795113/","commit_id":"4602da74e87d2bd90828390b479de716242c3d22"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"246db0762005cce5b4bc5dfeb143dcc104a151c6","unresolved":false,"context_lines":[{"line_number":1317,"context_line":"            #     base      |   snapshot_file   | None"},{"line_number":1318,"context_line":"            # (guaranteed to|  (being deleted,  |"},{"line_number":1319,"context_line":"            #    exist)     |  committed down)  |"},{"line_number":1320,"context_line":"            if encrypted:"},{"line_number":1321,"context_line":"                with tempfile.NamedTemporaryFile(prefix\u003d\u0027luks_\u0027,"},{"line_number":1322,"context_line":"                                                 dir\u003dtmp_dir) as src_file:"},{"line_number":1323,"context_line":"                    with open(src_file.name, \u0027w\u0027) as f:"}],"source_content_type":"text/x-python","patch_set":37,"id":"bf51134e_f37bb2f1","line":1320,"updated":"2020-06-24 18:31:09.000000000","message":"Same comment here as in the nfs driver.","commit_id":"44c7da9a44cc235b514e1b714cc7882683a8491d"},{"author":{"_account_id":20813,"name":"Sofia Enriquez","email":"lsofia.enriquez@gmail.com","username":"enriquetaso"},"change_message_id":"c399e6680e620a4e20bdd6a48c221cbe9df39471","unresolved":false,"context_lines":[{"line_number":1317,"context_line":"            #     base      |   snapshot_file   | None"},{"line_number":1318,"context_line":"            # (guaranteed to|  (being deleted,  |"},{"line_number":1319,"context_line":"            #    exist)     |  committed down)  |"},{"line_number":1320,"context_line":"            if encrypted:"},{"line_number":1321,"context_line":"                with tempfile.NamedTemporaryFile(prefix\u003d\u0027luks_\u0027,"},{"line_number":1322,"context_line":"                                                 dir\u003dtmp_dir) as src_file:"},{"line_number":1323,"context_line":"                    with open(src_file.name, \u0027w\u0027) as f:"}],"source_content_type":"text/x-python","patch_set":37,"id":"bf51134e_72365c05","line":1320,"in_reply_to":"bf51134e_f37bb2f1","updated":"2020-06-26 14:24:51.000000000","message":"yep, I agree.","commit_id":"44c7da9a44cc235b514e1b714cc7882683a8491d"}],"cinder/volume/volume_utils.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"407f96104f18c812ac5e168d5c1a79bdad512842","unresolved":false,"context_lines":[{"line_number":1198,"context_line":"        message \u003d _(\"Invalid encryption spec.\")"},{"line_number":1199,"context_line":"        raise exception.VolumeDriverException(message\u003dmessage)"},{"line_number":1200,"context_line":""},{"line_number":1201,"context_line":"    provider \u003d encryption[\u0027provider\u0027]"},{"line_number":1202,"context_line":"    if provider in encryptors.LEGACY_PROVIDER_CLASS_TO_FORMAT_MAP:"},{"line_number":1203,"context_line":"        provider \u003d encryptors.LEGACY_PROVIDER_CLASS_TO_FORMAT_MAP[provider]"},{"line_number":1204,"context_line":"    if provider !\u003d encryptors.LUKS:"}],"source_content_type":"text/x-python","patch_set":28,"id":"df33271e_42b3e20a","line":1201,"range":{"start_line":1201,"start_character":0,"end_line":1201,"end_character":37},"updated":"2020-04-09 13:23:07.000000000","message":"i wonder why we never got a keyerror here before","commit_id":"3fe7df7f666fe6b9c29ee9250f031a2ee6af35ff"}],"releasenotes/notes/bp-nfs-volume-encryption-3d8362843caeb39c.yaml":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1ea3be61d7954a92fab8bce3ec2b4fdd6375c817","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The NFS driver now supports the creation of encrypted volumes. "}],"source_content_type":"text/x-yaml","patch_set":27,"id":"df33271e_b84e7b93","line":4,"range":{"start_line":4,"start_character":66,"end_line":4,"end_character":67},"updated":"2020-04-08 16:47:42.000000000","message":"Whitespace here.","commit_id":"b3c293c30409e277d36bcb9ce35c0a1d2e4648d3"}]}
