)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"f43ed92c524782c141f8be567ee00814b56e92dd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a4fe350c_39a5c0aa","updated":"2025-02-23 18:47:53.000000000","message":"There are only minor comments. The workflow looks good overall. Please address them.","commit_id":"862039c7122d50f8f3d44f038ea33df4c747280b"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"77938668a87564b2f2699df39f9ccacb85f06ddb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3bd2bdf5_fb097df5","updated":"2025-02-23 15:00:54.000000000","message":"recheck","commit_id":"862039c7122d50f8f3d44f038ea33df4c747280b"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"0035688bbea6c76436bc375e69d0551f6d267e74","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b4ab84f9_25dee59a","updated":"2025-02-21 14:03:37.000000000","message":"recheck","commit_id":"862039c7122d50f8f3d44f038ea33df4c747280b"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"34d9f207929ebb602cfc83217ad8a9112f2abadc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e347abf0_3fcb87f7","updated":"2025-02-28 06:24:19.000000000","message":"1] It would be great if documentation is updated (possibly with an example);\nmentioning that certificate based authentication is also available.\nhttps://github.com/openstack/cinder/blob/master/doc/source/configuration/block-storage/drivers/netapp-volume-driver.rst?plain\u003d1#L80\n\n2] minor inline comment for release notes","commit_id":"3bea927de36adc07f3f3873e46ffebe424e467c8"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c9b3e33a88b10d95c7018f69a30c7b1c177b9648","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7aa91fec_a089e86b","updated":"2025-03-06 04:34:19.000000000","message":"I think there\u0027s a logic problem in do_setup().  See my comment in nvme_library.py, but the same applies to block_base and nfs_base.  (I haven\u0027t reviewed the rest of the code, got hung up trying to figure out how the config validation was working.)\n\nThe option help strings revisions could be done in a follow up patch.","commit_id":"3bea927de36adc07f3f3873e46ffebe424e467c8"},{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"3008555700eabb7486c82e7a22df4f71c5c64373","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"68dbad72_ba4f13c7","updated":"2025-02-25 11:42:57.000000000","message":"Looks good to me.","commit_id":"3bea927de36adc07f3f3873e46ffebe424e467c8"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"3727764473d4ec956a2f8323b384cc0ff721f9ba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f8ff496f_857b7a5d","updated":"2025-02-25 06:31:05.000000000","message":"Thank you for reviewing and giving feedback Saravanan. Addressed all the comments.","commit_id":"3bea927de36adc07f3f3873e46ffebe424e467c8"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"eb5de5a1e701379175a34de1eb90c215920d7d19","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b089db66_f0e37efa","updated":"2025-02-25 21:16:03.000000000","message":"This looks okay to me.  The NetApp CI is currently having temporary issues, Msaravan has assured that results are sucessfull and CI will be restored soon.  I think it\u0027s okay to let this one in.","commit_id":"3bea927de36adc07f3f3873e46ffebe424e467c8"},{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"11ddeea565369e5fd19da92d3832b508021ea057","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"0c891700_495b0d35","updated":"2025-02-26 14:17:48.000000000","message":"This patch looks good. Jon, please merge them to upstream when you have the window.","commit_id":"3bea927de36adc07f3f3873e46ffebe424e467c8"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"442ad410fca1d7411e27c1455a2d3829296cd5a9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"80a6435f_1badb699","updated":"2025-02-25 09:44:25.000000000","message":"recheck","commit_id":"3bea927de36adc07f3f3873e46ffebe424e467c8"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"e6b54ca6d19e96ce678f4dbd72c96d33be40d8ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"1488d0f4_0847e0f9","updated":"2025-02-25 11:57:04.000000000","message":"run-NetApp CI","commit_id":"3bea927de36adc07f3f3873e46ffebe424e467c8"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"8df548385f101a009486abe9f7c5c98c26a26914","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"88b37f42_e3c38e2a","in_reply_to":"b089db66_f0e37efa","updated":"2025-02-26 05:22:28.000000000","message":"Thank you so much Jon !!","commit_id":"3bea927de36adc07f3f3873e46ffebe424e467c8"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"e9d2d520ad246838d20c99659b1b6a8c4243df49","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"83b167c2_86cec95d","in_reply_to":"e347abf0_3fcb87f7","updated":"2025-03-06 13:27:36.000000000","message":"Sorry!! I was OOO for a week so couldn\u0027t check on this. \nI have addressed release notes comment. \nFor the doc part, I will raise a follow patch and address as soon as possible.","commit_id":"3bea927de36adc07f3f3873e46ffebe424e467c8"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e45b2506e81a881357e4653c470fec5c5661b58e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"514c1e35_a4f5c5b8","updated":"2025-03-06 17:29:31.000000000","message":"Code and tests LGTM.  There\u0027s an issue with the config help formatting, but that can be addressed in a followup.","commit_id":"9c26885e9b2720119567efa2b61173b5f79f1882"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"e9d2d520ad246838d20c99659b1b6a8c4243df49","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"0657d4ed_96a713bd","updated":"2025-03-06 13:27:36.000000000","message":"Thank you so very much Brian and Raghavendra for reviewing and providing valuable comments. \n\nBrian,\n\nYes, You are correct and it makes sense, we don\u0027t actually need to\ncheck for \"netapp_ca_certificate_file\". Removed the check in nvme_library,\nblock_base and nfs_base files.\n\nComing to \"netapp_certificate_host_validation\" option,\nThis doesn\u0027t fall under required flags and is used only for certificate based authentication.\nBy default, we will would want to avoid checking the host name and disable the certificates verification for NetApp driver. If a user/customer wants to verify their certificates, they can set this value to True.\n\nComing to using slices for required flags,\nAfter removing the \"netapp_ca_certificate_file\" check, we don\u0027t any more need slicing part so updated code accordinly.\n\nI have also addressed option help strings comments and updated the release notes. \n\n\nRaghavendra,\nSorry!! I was OOO for a week so couldn\u0027t check on this. \nI have addressed release notes comment. \nFor the doc part, I will raise a follow patch and address as soon as possible.","commit_id":"9c26885e9b2720119567efa2b61173b5f79f1882"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/client/test_api.py":[{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"f43ed92c524782c141f8be567ee00814b56e92dd","unresolved":true,"context_lines":[{"line_number":865,"context_line":"        mock_auth.assert_called_once_with()"},{"line_number":866,"context_line":""},{"line_number":867,"context_line":"    def test__build_session_with_certificate_auth(self):"},{"line_number":868,"context_line":"        self.rest_client._private_key_file \u003d \u0027fake_key.pem\u0027"},{"line_number":869,"context_line":"        self.rest_client._certificate_file \u003d \u0027fake_cert.pem\u0027"},{"line_number":870,"context_line":"        self.rest_client._certificate_host_validation \u003d False"},{"line_number":871,"context_line":"        fake_session \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":1,"id":"d70f0063_01e2420e","line":868,"updated":"2025-02-23 18:47:53.000000000","message":"Add test description for this.","commit_id":"862039c7122d50f8f3d44f038ea33df4c747280b"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"3727764473d4ec956a2f8323b384cc0ff721f9ba","unresolved":false,"context_lines":[{"line_number":865,"context_line":"        mock_auth.assert_called_once_with()"},{"line_number":866,"context_line":""},{"line_number":867,"context_line":"    def test__build_session_with_certificate_auth(self):"},{"line_number":868,"context_line":"        self.rest_client._private_key_file \u003d \u0027fake_key.pem\u0027"},{"line_number":869,"context_line":"        self.rest_client._certificate_file \u003d \u0027fake_cert.pem\u0027"},{"line_number":870,"context_line":"        self.rest_client._certificate_host_validation \u003d False"},{"line_number":871,"context_line":"        fake_session \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":1,"id":"e3e84c03_6ad83723","line":868,"in_reply_to":"d70f0063_01e2420e","updated":"2025-02-25 06:31:05.000000000","message":"Addressed.","commit_id":"862039c7122d50f8f3d44f038ea33df4c747280b"},{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"f43ed92c524782c141f8be567ee00814b56e92dd","unresolved":true,"context_lines":[{"line_number":910,"context_line":"        self.assertEqual(expected.__dict__, res.__dict__)"},{"line_number":911,"context_line":""},{"line_number":912,"context_line":"    def test__create_certificate_auth_handler_default(self):"},{"line_number":913,"context_line":"        private_key \u003d \u0027fake_key.pem\u0027"},{"line_number":914,"context_line":"        certificate_file \u003d \u0027fake_cert.pem\u0027"},{"line_number":915,"context_line":"        certificate_host_validation \u003d False"},{"line_number":916,"context_line":"        cert \u003d private_key, certificate_file"}],"source_content_type":"text/x-python","patch_set":1,"id":"d66bb098_aa5106e9","line":913,"updated":"2025-02-23 18:47:53.000000000","message":"Add test description","commit_id":"862039c7122d50f8f3d44f038ea33df4c747280b"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"3727764473d4ec956a2f8323b384cc0ff721f9ba","unresolved":false,"context_lines":[{"line_number":910,"context_line":"        self.assertEqual(expected.__dict__, res.__dict__)"},{"line_number":911,"context_line":""},{"line_number":912,"context_line":"    def test__create_certificate_auth_handler_default(self):"},{"line_number":913,"context_line":"        private_key \u003d \u0027fake_key.pem\u0027"},{"line_number":914,"context_line":"        certificate_file \u003d \u0027fake_cert.pem\u0027"},{"line_number":915,"context_line":"        certificate_host_validation \u003d False"},{"line_number":916,"context_line":"        cert \u003d private_key, certificate_file"}],"source_content_type":"text/x-python","patch_set":1,"id":"126588e1_24f1313e","line":913,"in_reply_to":"d66bb098_aa5106e9","updated":"2025-02-25 06:31:05.000000000","message":"Addressed.","commit_id":"862039c7122d50f8f3d44f038ea33df4c747280b"},{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"f43ed92c524782c141f8be567ee00814b56e92dd","unresolved":true,"context_lines":[{"line_number":923,"context_line":"        res \u003d self.rest_client._create_certificate_auth_handler()"},{"line_number":924,"context_line":"        self.assertEqual(res, (cert, certificate_host_validation))"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"    def test__create_certificate_auth_handler_with_host_validation(self):"},{"line_number":927,"context_line":"        private_key \u003d \u0027fake_key.pem\u0027"},{"line_number":928,"context_line":"        certificate_file \u003d \u0027fake_cert.pem\u0027"},{"line_number":929,"context_line":"        ca_certificate_file \u003d \u0027fake_ca_cert.crt\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"e5407353_fc7b0a58","line":926,"updated":"2025-02-23 18:47:53.000000000","message":"Add new test scenarios to handle negative tests..like missing ca_certificate file, certificate_file, etc..","commit_id":"862039c7122d50f8f3d44f038ea33df4c747280b"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"3727764473d4ec956a2f8323b384cc0ff721f9ba","unresolved":false,"context_lines":[{"line_number":923,"context_line":"        res \u003d self.rest_client._create_certificate_auth_handler()"},{"line_number":924,"context_line":"        self.assertEqual(res, (cert, certificate_host_validation))"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"    def test__create_certificate_auth_handler_with_host_validation(self):"},{"line_number":927,"context_line":"        private_key \u003d \u0027fake_key.pem\u0027"},{"line_number":928,"context_line":"        certificate_file \u003d \u0027fake_cert.pem\u0027"},{"line_number":929,"context_line":"        ca_certificate_file \u003d \u0027fake_ca_cert.crt\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"cee56c5b_e945c9be","line":926,"in_reply_to":"e5407353_fc7b0a58","updated":"2025-02-25 06:31:05.000000000","message":"This method is executed only when cert files are present. Missing file case is already handled in test_nfs_base.py accordingly.","commit_id":"862039c7122d50f8f3d44f038ea33df4c747280b"},{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"f43ed92c524782c141f8be567ee00814b56e92dd","unresolved":true,"context_lines":[{"line_number":924,"context_line":"        self.assertEqual(res, (cert, certificate_host_validation))"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"    def test__create_certificate_auth_handler_with_host_validation(self):"},{"line_number":927,"context_line":"        private_key \u003d \u0027fake_key.pem\u0027"},{"line_number":928,"context_line":"        certificate_file \u003d \u0027fake_cert.pem\u0027"},{"line_number":929,"context_line":"        ca_certificate_file \u003d \u0027fake_ca_cert.crt\u0027"},{"line_number":930,"context_line":"        certificate_host_validation \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f2ec507_2069bda5","line":927,"updated":"2025-02-23 18:47:53.000000000","message":"Add test description","commit_id":"862039c7122d50f8f3d44f038ea33df4c747280b"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"3727764473d4ec956a2f8323b384cc0ff721f9ba","unresolved":false,"context_lines":[{"line_number":924,"context_line":"        self.assertEqual(res, (cert, certificate_host_validation))"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"    def test__create_certificate_auth_handler_with_host_validation(self):"},{"line_number":927,"context_line":"        private_key \u003d \u0027fake_key.pem\u0027"},{"line_number":928,"context_line":"        certificate_file \u003d \u0027fake_cert.pem\u0027"},{"line_number":929,"context_line":"        ca_certificate_file \u003d \u0027fake_ca_cert.crt\u0027"},{"line_number":930,"context_line":"        certificate_host_validation \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"39f679a6_c15ef130","line":927,"in_reply_to":"5f2ec507_2069bda5","updated":"2025-02-25 06:31:05.000000000","message":"Addressed.","commit_id":"862039c7122d50f8f3d44f038ea33df4c747280b"}],"cinder/volume/drivers/netapp/dataontap/nfs_base.py":[{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"f43ed92c524782c141f8be567ee00814b56e92dd","unresolved":true,"context_lines":[{"line_number":70,"context_line":"                            \u0027netapp_server_hostname\u0027]"},{"line_number":71,"context_line":"    REQUIRED_FLAGS_CERT \u003d [\u0027netapp_private_key_file\u0027,"},{"line_number":72,"context_line":"                           \u0027netapp_certificate_file\u0027,"},{"line_number":73,"context_line":"                           \u0027netapp_ca_certificate_file\u0027]"},{"line_number":74,"context_line":"    DEFAULT_FILTER_FUNCTION \u003d \u0027capabilities.utilization \u003c 70\u0027"},{"line_number":75,"context_line":"    DEFAULT_GOODNESS_FUNCTION \u003d \u0027100 - capabilities.utilization\u0027"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"d7d1741e_a47f0ded","line":73,"updated":"2025-02-23 18:47:53.000000000","message":"I assume netapp_ca_certificate_file should be a optional field. User can pass either key/cert (or) key/cert/ca_cert.","commit_id":"862039c7122d50f8f3d44f038ea33df4c747280b"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"3727764473d4ec956a2f8323b384cc0ff721f9ba","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                            \u0027netapp_server_hostname\u0027]"},{"line_number":71,"context_line":"    REQUIRED_FLAGS_CERT \u003d [\u0027netapp_private_key_file\u0027,"},{"line_number":72,"context_line":"                           \u0027netapp_certificate_file\u0027,"},{"line_number":73,"context_line":"                           \u0027netapp_ca_certificate_file\u0027]"},{"line_number":74,"context_line":"    DEFAULT_FILTER_FUNCTION \u003d \u0027capabilities.utilization \u003c 70\u0027"},{"line_number":75,"context_line":"    DEFAULT_GOODNESS_FUNCTION \u003d \u0027100 - capabilities.utilization\u0027"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"f57b4bcc_44d43857","line":73,"in_reply_to":"d7d1741e_a47f0ded","updated":"2025-02-25 06:31:05.000000000","message":"Yes Saravanan. netapp_ca_cert_file is optional and it will be checked only when it is passed. That\u0027s being handled in do_setup(self, context) method accordingly.","commit_id":"862039c7122d50f8f3d44f038ea33df4c747280b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e45b2506e81a881357e4653c470fec5c5661b58e","unresolved":true,"context_lines":[{"line_number":69,"context_line":"    REQUIRED_FLAGS_BASIC \u003d [\u0027netapp_login\u0027, \u0027netapp_password\u0027,"},{"line_number":70,"context_line":"                            \u0027netapp_server_hostname\u0027]"},{"line_number":71,"context_line":"    REQUIRED_FLAGS_CERT \u003d [\u0027netapp_private_key_file\u0027,"},{"line_number":72,"context_line":"                           \u0027netapp_certificate_file\u0027]"},{"line_number":73,"context_line":"    DEFAULT_FILTER_FUNCTION \u003d \u0027capabilities.utilization \u003c 70\u0027"},{"line_number":74,"context_line":"    DEFAULT_GOODNESS_FUNCTION \u003d \u0027100 - capabilities.utilization\u0027"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"c5bc960d_21e46069","line":72,"updated":"2025-03-06 17:29:31.000000000","message":"I\u0027m not going to complain about this, because you are using the same pattern that is already in the driver, but these lists are identical in each driver, so maybe you could move them to the utils so that they are only defined in one place to make them easier to maintain.","commit_id":"9c26885e9b2720119567efa2b61173b5f79f1882"}],"cinder/volume/drivers/netapp/dataontap/nvme_library.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c9b3e33a88b10d95c7018f69a30c7b1c177b9648","unresolved":true,"context_lines":[{"line_number":116,"context_line":"                self.configuration.netapp_certificate_file:"},{"line_number":117,"context_line":"            na_utils.check_flags(self.REQUIRED_FLAGS_CERT[:2],"},{"line_number":118,"context_line":"                                 self.configuration)"},{"line_number":119,"context_line":"            if self.configuration.netapp_ca_certificate_file:"},{"line_number":120,"context_line":"                na_utils.check_flags(self.REQUIRED_FLAGS_CERT[-1:],"},{"line_number":121,"context_line":"                                     self.configuration)"},{"line_number":122,"context_line":"        else:"},{"line_number":123,"context_line":"            na_utils.check_flags(self.REQUIRED_FLAGS_BASIC,"},{"line_number":124,"context_line":"                                 self.configuration)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c513fa41_dce5a949","line":121,"range":{"start_line":119,"start_character":11,"end_line":121,"end_character":56},"updated":"2025-03-06 04:34:19.000000000","message":"what are you checking for here? REQUIRED_FLAGS_CERT[-1:] is [\u0027netapp_ca_certificate_file\u0027].  If netapp_ca_certificate_file is None, we won\u0027t make the call to check_flags, so we won\u0027t raise the exception to indicate that it\u0027s not set.  And if netapp_ca_certificate_file is not None, there is no point making the call to check_flags because we already know it\u0027s not None.\n\nAlso, you are ignoring the netapp_certificate_host_validation option that gets passed when you create the client.  If that\u0027s false, then none of these other options matter.  But also, if it\u0027s true, and the key_file isn\u0027t set, then you\u0027re going to have problems later (the client will raise some kind of exception because it won\u0027t be able to authenticate).  I wonder whether instead of having the netapp_certificate_host_validation be an option, you should just set it yourself based on whether the operator has set a key and cert file.  Although I guess then you wouldn\u0027t be able to distinguish between basic and cert authentication?\n\nBut that brings up another issue.  Suppose that netapp_certificate_host_validation is false, but the operator has a private key file set and a cert file set.  Note that you\u0027ll take the branch at line 115 and everything will be fine, but you will never check that the basic flags are actually set because you won\u0027t execute the else branch at line 122.\n\nSo you need to re-think this check.\n\nFinally, using slices of the required flags list is just asking for trouble later because if the list is re-ordered for some reason, the checks will break.  But if you do want to use the slices, make sure you add a comment where the list is defined saying that the ordering of the elements is significant.","commit_id":"3bea927de36adc07f3f3873e46ffebe424e467c8"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"e9d2d520ad246838d20c99659b1b6a8c4243df49","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                self.configuration.netapp_certificate_file:"},{"line_number":117,"context_line":"            na_utils.check_flags(self.REQUIRED_FLAGS_CERT[:2],"},{"line_number":118,"context_line":"                                 self.configuration)"},{"line_number":119,"context_line":"            if self.configuration.netapp_ca_certificate_file:"},{"line_number":120,"context_line":"                na_utils.check_flags(self.REQUIRED_FLAGS_CERT[-1:],"},{"line_number":121,"context_line":"                                     self.configuration)"},{"line_number":122,"context_line":"        else:"},{"line_number":123,"context_line":"            na_utils.check_flags(self.REQUIRED_FLAGS_BASIC,"},{"line_number":124,"context_line":"                                 self.configuration)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7e5a00c3_3ba11372","line":121,"range":{"start_line":119,"start_character":11,"end_line":121,"end_character":56},"in_reply_to":"c513fa41_dce5a949","updated":"2025-03-06 13:27:36.000000000","message":"Addressed the comments as required.","commit_id":"3bea927de36adc07f3f3873e46ffebe424e467c8"}],"cinder/volume/drivers/netapp/options.py":[{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"f43ed92c524782c141f8be567ee00814b56e92dd","unresolved":true,"context_lines":[{"line_number":129,"context_line":"                     \u0027Example: ca_certificate.crt, This file contains\u0027"},{"line_number":130,"context_line":"                     \u0027 the public key certificate of the trusted third-party\u0027"},{"line_number":131,"context_line":"                     \u0027 certificate authority (CA) that issued the\u0027"},{"line_number":132,"context_line":"                     \u0027 I certificate.t is used by clients or systems to\u0027"},{"line_number":133,"context_line":"                     \u0027 validate the authenticity of the certificate\u0027"},{"line_number":134,"context_line":"                     \u0027 presented by the entity. The CA certificate file\u0027"},{"line_number":135,"context_line":"                     \u0027 is typically pre-configured in the trust store\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"76716344_443fb221","line":132,"updated":"2025-02-23 18:47:53.000000000","message":"Typo.","commit_id":"862039c7122d50f8f3d44f038ea33df4c747280b"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"3727764473d4ec956a2f8323b384cc0ff721f9ba","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                     \u0027Example: ca_certificate.crt, This file contains\u0027"},{"line_number":130,"context_line":"                     \u0027 the public key certificate of the trusted third-party\u0027"},{"line_number":131,"context_line":"                     \u0027 certificate authority (CA) that issued the\u0027"},{"line_number":132,"context_line":"                     \u0027 I certificate.t is used by clients or systems to\u0027"},{"line_number":133,"context_line":"                     \u0027 validate the authenticity of the certificate\u0027"},{"line_number":134,"context_line":"                     \u0027 presented by the entity. The CA certificate file\u0027"},{"line_number":135,"context_line":"                     \u0027 is typically pre-configured in the trust store\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"886c1862_14d862c6","line":132,"in_reply_to":"76716344_443fb221","updated":"2025-02-25 06:31:05.000000000","message":"Corrected.","commit_id":"862039c7122d50f8f3d44f038ea33df4c747280b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c9b3e33a88b10d95c7018f69a30c7b1c177b9648","unresolved":true,"context_lines":[{"line_number":105,"context_line":"                     \u0027 establish secure connections and authenticate the\u0027"},{"line_number":106,"context_line":"                     \u0027 entity. Example: private_key.key, \u0027"},{"line_number":107,"context_line":"                     \u0027 please provide absolute path.\u0027),"},{"line_number":108,"context_line":"               secret\u003dTrue),"},{"line_number":109,"context_line":"    cfg.StrOpt(\u0027netapp_certificate_file\u0027,"},{"line_number":110,"context_line":"               help\u003d(\u0027Example: certificate.pem or certificate.crt,\u0027"},{"line_number":111,"context_line":"                     \u0027 This file contains the self-signed digital certificate\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"0e713464_2b57de27","line":108,"updated":"2025-03-06 04:34:19.000000000","message":"A few comments about all of these.\n\n1. instead of giving the example in the help text, you can put the example as the value of sample_default, and when the sample config file is generated, it will be displayed.  For example, see\nhttps://opendev.org/openstack/cinder/src/commit/64bf9fc0bb2bb39773fdd0feef5be9398243f90a/cinder/common/config.py#L78-L83\n\nYou can then either explicitly set the default\u003dNone or leave it undefined, whichever works better for how you handle the opt in the code.\n\n2. Don\u0027t hide the \"please provide absolute path\" at the end.  Instead, say it at the beginning, something like \"Absolute path to the file containing the private key ...\" \n\n3. In the generated file, the option is displayed *after* the help text.  With text this long (and there\u0027s nothing wrong with a lot of help text), it\u0027s good to say something about what the option is for, for example, this could start \"Absolute pathname of the file containing the ...\"  You can see what I mean if you look at the sample config file and search for these options:\n\nhttps://storage.gra.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_065/942342/2/check/openstack-tox-docs/065e746/docs/configuration/block-storage/samples/cinder.conf.html\n\n4. Since these are long help texts, you may want to use a triple-quote string to make this easier to update.  We don\u0027t do it a lot in cinder, but you can also include blank lines to space things out.  Glance does this for all their options, for example,\n\nhttps://opendev.org/openstack/glance/src/commit/f54f6b3b12a6eb6c50a58de5f40d9b96f1da5184/glance/common/config.py#L167-L197\n\nYou can see how that gets rendered into the sample config here:\n\nhttps://opendev.org/openstack/glance/src/commit/f54f6b3b12a6eb6c50a58de5f40d9b96f1da5184/glance/common/config.py#L167-L197\n\nNote that if you take the triple-quote approach, oslo.config will just use\nthe text as is (it won\u0027t re-format it).  We have the wrap width set at 79, so don\u0027t have any lines longer than 75 chars to allow room for the \u0027# \u0027 that will be added to the beginning of each line.","commit_id":"3bea927de36adc07f3f3873e46ffebe424e467c8"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"e9d2d520ad246838d20c99659b1b6a8c4243df49","unresolved":true,"context_lines":[{"line_number":105,"context_line":"                     \u0027 establish secure connections and authenticate the\u0027"},{"line_number":106,"context_line":"                     \u0027 entity. Example: private_key.key, \u0027"},{"line_number":107,"context_line":"                     \u0027 please provide absolute path.\u0027),"},{"line_number":108,"context_line":"               secret\u003dTrue),"},{"line_number":109,"context_line":"    cfg.StrOpt(\u0027netapp_certificate_file\u0027,"},{"line_number":110,"context_line":"               help\u003d(\u0027Example: certificate.pem or certificate.crt,\u0027"},{"line_number":111,"context_line":"                     \u0027 This file contains the self-signed digital certificate\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"c4ef85bb_c51dcaac","line":108,"in_reply_to":"0e713464_2b57de27","updated":"2025-03-06 13:27:36.000000000","message":"Updated the options file accordingly.","commit_id":"3bea927de36adc07f3f3873e46ffebe424e467c8"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"d77a902fb88919e656d61eb99d78ab4812d07d7f","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                     \u0027 establish secure connections and authenticate the\u0027"},{"line_number":106,"context_line":"                     \u0027 entity. Example: private_key.key, \u0027"},{"line_number":107,"context_line":"                     \u0027 please provide absolute path.\u0027),"},{"line_number":108,"context_line":"               secret\u003dTrue),"},{"line_number":109,"context_line":"    cfg.StrOpt(\u0027netapp_certificate_file\u0027,"},{"line_number":110,"context_line":"               help\u003d(\u0027Example: certificate.pem or certificate.crt,\u0027"},{"line_number":111,"context_line":"                     \u0027 This file contains the self-signed digital certificate\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"9185469c_82d1318c","line":108,"in_reply_to":"c4ef85bb_c51dcaac","updated":"2025-03-06 13:28:02.000000000","message":"Resolved.","commit_id":"3bea927de36adc07f3f3873e46ffebe424e467c8"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e45b2506e81a881357e4653c470fec5c5661b58e","unresolved":true,"context_lines":[{"line_number":92,"context_line":"    cfg.StrOpt(\u0027netapp_private_key_file\u0027,"},{"line_number":93,"context_line":"               sample_default\u003d\u0027/path/to/private_key.key\u0027,"},{"line_number":94,"context_line":"               help\u003d(\"\"\""},{"line_number":95,"context_line":"                     This option is applicable for both self signed and ca"},{"line_number":96,"context_line":"                     verified certificates."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"                     For self signed certificate: Absolute path to the file"}],"source_content_type":"text/x-python","patch_set":4,"id":"6b40f5fd_ad0cb80e","line":95,"range":{"start_line":95,"start_character":0,"end_line":95,"end_character":21},"updated":"2025-03-06 17:29:31.000000000","message":"this white space is being kept in the sample config; as a followup, you can re-format.  Here\u0027s the generated file so you can see what i mean:\n\nhttps://e3b6c4899ff733ef8399-ed59169a6706dce582c025d1f732bcb5.ssl.cf2.rackcdn.com/942342/4/check/openstack-tox-docs/d3dc614/docs/_static/cinder.conf.sample","commit_id":"9c26885e9b2720119567efa2b61173b5f79f1882"}],"releasenotes/notes/certificate-based-authentication-for-netapp-drivers-b06a62df620aebc3.yaml":[{"author":{"_account_id":36178,"name":"Saravanan Manickam","display_name":"msaravan","email":"manicsaran@gmail.com","username":"msaravan"},"change_message_id":"f43ed92c524782c141f8be567ee00814b56e92dd","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Currently, NetApp drivers relies on basic authentication via user access,"},{"line_number":5,"context_line":"    whih involves the use of username and password to talk to storage system "},{"line_number":6,"context_line":"    for creation of cinder objects.List new features here, or remove this "},{"line_number":7,"context_line":"    section. To enhance the security of our system, we implemented  "},{"line_number":8,"context_line":"    Certificate-Based-Authentication(CBA) for storage system communication."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"4d7eaa77_8a29543f","line":6,"updated":"2025-02-23 18:47:53.000000000","message":"Is this a format ?  I think, it needs changes here.  Can you cross check ?","commit_id":"862039c7122d50f8f3d44f038ea33df4c747280b"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"3727764473d4ec956a2f8323b384cc0ff721f9ba","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Currently, NetApp drivers relies on basic authentication via user access,"},{"line_number":5,"context_line":"    whih involves the use of username and password to talk to storage system "},{"line_number":6,"context_line":"    for creation of cinder objects.List new features here, or remove this "},{"line_number":7,"context_line":"    section. To enhance the security of our system, we implemented  "},{"line_number":8,"context_line":"    Certificate-Based-Authentication(CBA) for storage system communication."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"3c412d2f_5de8ac59","line":6,"in_reply_to":"4d7eaa77_8a29543f","updated":"2025-02-25 06:31:05.000000000","message":"Yes Saravanan. Format is correct and there were some extra and removed them.","commit_id":"862039c7122d50f8f3d44f038ea33df4c747280b"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"34d9f207929ebb602cfc83217ad8a9112f2abadc","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Currently, NetApp drivers relies on basic authentication via user access,"},{"line_number":5,"context_line":"    whih involves the use of username and password to talk to storage system"},{"line_number":6,"context_line":"    for creation of cinder objects.List new features here, or remove this"},{"line_number":7,"context_line":"    section. To enhance the security of our system, we implemented"},{"line_number":8,"context_line":"    Certificate-Based-Authentication(CBA) for storage system communication."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"46a6b275_cf37ddef","line":7,"range":{"start_line":6,"start_character":35,"end_line":7,"end_character":12},"updated":"2025-02-28 06:24:19.000000000","message":"this line can be removed","commit_id":"3bea927de36adc07f3f3873e46ffebe424e467c8"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"e9d2d520ad246838d20c99659b1b6a8c4243df49","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Currently, NetApp drivers relies on basic authentication via user access,"},{"line_number":5,"context_line":"    whih involves the use of username and password to talk to storage system"},{"line_number":6,"context_line":"    for creation of cinder objects.List new features here, or remove this"},{"line_number":7,"context_line":"    section. To enhance the security of our system, we implemented"},{"line_number":8,"context_line":"    Certificate-Based-Authentication(CBA) for storage system communication."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"21cc69e2_a7d2aedf","line":7,"range":{"start_line":6,"start_character":35,"end_line":7,"end_character":12},"in_reply_to":"0910e1b9_2779fce5","updated":"2025-03-06 13:27:36.000000000","message":"Removed and updated the release notes","commit_id":"3bea927de36adc07f3f3873e46ffebe424e467c8"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c9b3e33a88b10d95c7018f69a30c7b1c177b9648","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Currently, NetApp drivers relies on basic authentication via user access,"},{"line_number":5,"context_line":"    whih involves the use of username and password to talk to storage system"},{"line_number":6,"context_line":"    for creation of cinder objects.List new features here, or remove this"},{"line_number":7,"context_line":"    section. To enhance the security of our system, we implemented"},{"line_number":8,"context_line":"    Certificate-Based-Authentication(CBA) for storage system communication."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"0910e1b9_2779fce5","line":7,"range":{"start_line":6,"start_character":35,"end_line":7,"end_character":12},"in_reply_to":"46a6b275_cf37ddef","updated":"2025-03-06 04:34:19.000000000","message":"Yes, this should definitely be removed.","commit_id":"3bea927de36adc07f3f3873e46ffebe424e467c8"}]}
