)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"8c27fbdf7dded2ff34bf0298875291fa422cdefb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"899e8741_88169414","updated":"2026-07-20 05:53:38.000000000","message":"Please take a look at the comments.","commit_id":"a54fe04f699e0ec96b94d2cf01b51efe6f0782f1"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"89cabe3a139c0039efeb0fc67836535804242008","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"465efec9_5261800b","updated":"2026-07-15 06:03:37.000000000","message":"run-NetApp CI","commit_id":"a54fe04f699e0ec96b94d2cf01b51efe6f0782f1"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"b842a23b2c5a2f204e8dc6b85134028b56c1340c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"70e104af_443f230a","updated":"2026-07-16 12:04:23.000000000","message":"run-NetApp CI","commit_id":"a54fe04f699e0ec96b94d2cf01b51efe6f0782f1"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"a4b904151c1d931b6c6b7df4a11cfb5e0d5f33e6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"e01a7c7d_b7735e43","updated":"2026-07-14 18:54:37.000000000","message":"run-NetApp CI","commit_id":"a54fe04f699e0ec96b94d2cf01b51efe6f0782f1"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"b8a4625eaf0e1de06ad88e7ea5adb1740f0ab09f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"985a3c78_6efccbd0","updated":"2026-07-21 04:25:28.000000000","message":"run-NetApp CI","commit_id":"80cc41aaa96839f6949b519ac50c37525c374c5f"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"8d96dc6d6e4eb8a3b8d4c1e0ac9c5eaed531c790","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"6d40c397_59943e4a","updated":"2026-07-27 09:35:27.000000000","message":"Please check the comments.","commit_id":"8fcba00ca159ec3b755e159135f251655eaa329f"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"9163d9b88cadc138781ada56bcc8d8ccf63389c9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"7bbe01d1_f4900b45","updated":"2026-07-30 06:38:14.000000000","message":"recheck check","commit_id":"bbae5a0758351f223669b0b8ef106e47e09bc414"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"a7797305e834053b966524a986ac22bda09f98e7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"0bfb5423_4f4d8758","updated":"2026-07-29 06:42:38.000000000","message":"run-NetApp CI","commit_id":"bbae5a0758351f223669b0b8ef106e47e09bc414"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"a76f822d4c1e7f120988ee64607c95ccec9e708b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"0d8a759a_aea74700","updated":"2026-08-04 06:29:36.000000000","message":"Looks good to me.","commit_id":"6946f24a555e7ed7f72dd9281cbc3db1d1bce0ad"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"5eb2c30d699f332460ea3ba81335d61d9f67e119","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"7762876e_dbcc263f","updated":"2026-08-06 15:16:51.000000000","message":"Thanks for working on this, provided one minor issue.","commit_id":"6946f24a555e7ed7f72dd9281cbc3db1d1bce0ad"},{"author":{"_account_id":39225,"name":"Prudhvi","display_name":"Prudhvi","email":"prudhvi.openstack@gmail.com","username":"Prudhvi"},"change_message_id":"df23b7e866c77e346e98d3806d827f428a860155","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"1aedd0cf_0c49f5fc","updated":"2026-08-05 14:29:46.000000000","message":"run-NetApp CI","commit_id":"6946f24a555e7ed7f72dd9281cbc3db1d1bce0ad"},{"author":{"_account_id":39225,"name":"Prudhvi","display_name":"Prudhvi","email":"prudhvi.openstack@gmail.com","username":"Prudhvi"},"change_message_id":"1a3026fc81cc3f06709165affab4f2f7124b28c1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"8d369c73_8651f7cb","updated":"2026-08-05 13:00:26.000000000","message":"run-NetApp CI","commit_id":"6946f24a555e7ed7f72dd9281cbc3db1d1bce0ad"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"b4b12c604278854db6c3d5155fb3a361aae683f1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"76cfedef_5f468645","updated":"2026-08-14 01:41:28.000000000","message":"run-NetApp CI","commit_id":"17a6fc6c154d6094f7fd3f16ecd8f2041fee5f56"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"204cbc12fce4485cdfe630c6dba93dada51afd5e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"386e423e_32725077","updated":"2026-08-14 03:49:19.000000000","message":"run-NetApp CI","commit_id":"86c0ac0f31323ecaab2b583ba520bd1abd884692"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"01423ddac747daa78ff68a69a7de3555bbf649e6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"15db1aa5_c8fbab01","updated":"2026-08-18 10:01:53.000000000","message":"Please check comments.","commit_id":"831a8219235f425c356091bb68b03927ed7ab5c1"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"485b2b1a890473b7c093e27c72e27a61bc3a471f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"28aa8efe_eb6d5bb7","updated":"2026-08-20 16:02:19.000000000","message":"Looks like some issues with zuul run. Please triage - looks to be code issue.","commit_id":"027c6d734724f61dfd1e6038de5ac8f75d5485cb"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"a4c18db51f984115a1579668629ee857b1ce80a0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"74a3c54b_bc59006f","updated":"2026-08-20 20:20:20.000000000","message":"run-NetApp CI","commit_id":"47170eaba1490c5399f538856194619329da2f51"}],"manila/db/api.py":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"8c27fbdf7dded2ff34bf0298875291fa422cdefb","unresolved":true,"context_lines":[{"line_number":2013,"context_line":"####################"},{"line_number":2014,"context_line":""},{"line_number":2015,"context_line":""},{"line_number":2016,"context_line":"def share_resource_counts(context, host\u003dNone):"},{"line_number":2017,"context_line":"    \"\"\"Return object counts for periodic EMS autosupport reporting."},{"line_number":2018,"context_line":""},{"line_number":2019,"context_line":"    Pass host as \u0027hostname@backend_name\u0027 to scope shares and share servers"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa69e945_0e6ee389","line":2016,"updated":"2026-07-20 05:53:38.000000000","message":"Need to remove this method from the db and add to the driver.","commit_id":"a54fe04f699e0ec96b94d2cf01b51efe6f0782f1"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"f87bb51ebb99728e4e9fad3f786275f6691f3152","unresolved":false,"context_lines":[{"line_number":2013,"context_line":"####################"},{"line_number":2014,"context_line":""},{"line_number":2015,"context_line":""},{"line_number":2016,"context_line":"def share_resource_counts(context, host\u003dNone):"},{"line_number":2017,"context_line":"    \"\"\"Return object counts for periodic EMS autosupport reporting."},{"line_number":2018,"context_line":""},{"line_number":2019,"context_line":"    Pass host as \u0027hostname@backend_name\u0027 to scope shares and share servers"}],"source_content_type":"text/x-python","patch_set":5,"id":"67fd153c_d3a22912","line":2016,"in_reply_to":"fa69e945_0e6ee389","updated":"2026-07-21 04:24:36.000000000","message":"Done","commit_id":"a54fe04f699e0ec96b94d2cf01b51efe6f0782f1"}],"manila/db/sqlalchemy/api.py":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"8c27fbdf7dded2ff34bf0298875291fa422cdefb","unresolved":true,"context_lines":[{"line_number":8375,"context_line":""},{"line_number":8376,"context_line":""},{"line_number":8377,"context_line":"@context_manager.reader"},{"line_number":8378,"context_line":"def share_resource_counts(context, host\u003dNone):"},{"line_number":8379,"context_line":"    \"\"\"Return object counts used in the periodic EMS autosupport payload."},{"line_number":8380,"context_line":""},{"line_number":8381,"context_line":"    Shares and share servers are filtered to the given host when provided;"}],"source_content_type":"text/x-python","patch_set":5,"id":"ea96db53_5bdcb779","line":8378,"updated":"2026-07-20 05:53:38.000000000","message":"This method needs to be an internal method in the driver.","commit_id":"a54fe04f699e0ec96b94d2cf01b51efe6f0782f1"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"f87bb51ebb99728e4e9fad3f786275f6691f3152","unresolved":false,"context_lines":[{"line_number":8375,"context_line":""},{"line_number":8376,"context_line":""},{"line_number":8377,"context_line":"@context_manager.reader"},{"line_number":8378,"context_line":"def share_resource_counts(context, host\u003dNone):"},{"line_number":8379,"context_line":"    \"\"\"Return object counts used in the periodic EMS autosupport payload."},{"line_number":8380,"context_line":""},{"line_number":8381,"context_line":"    Shares and share servers are filtered to the given host when provided;"}],"source_content_type":"text/x-python","patch_set":5,"id":"9dbe78d5_581652fd","line":8378,"in_reply_to":"ea96db53_5bdcb779","updated":"2026-07-21 04:24:36.000000000","message":"Done","commit_id":"a54fe04f699e0ec96b94d2cf01b51efe6f0782f1"}],"manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"485b2b1a890473b7c093e27c72e27a61bc3a471f","unresolved":true,"context_lines":[{"line_number":780,"context_line":"        except Exception as exc:"},{"line_number":781,"context_line":"            LOG.warning(\u0027Failed to build or send EMS event-1: %s\u0027, exc)"},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"    def _build_base_ems_log_message(self):"},{"line_number":784,"context_line":"        \"\"\"Construct EMS Autosupport log message common to all events.\"\"\""},{"line_number":785,"context_line":"        ems_log \u003d {"},{"line_number":786,"context_line":"            \u0027computer-name\u0027: socket.gethostname() or \u0027Manila_node\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"f478d1d3_ed1dfbad","line":783,"updated":"2026-08-20 16:02:19.000000000","message":"This looks like dead code. Can be removed.","commit_id":"027c6d734724f61dfd1e6038de5ac8f75d5485cb"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"65de51bf2339b1298b18dbb524cf6e2d0db349e4","unresolved":false,"context_lines":[{"line_number":780,"context_line":"        except Exception as exc:"},{"line_number":781,"context_line":"            LOG.warning(\u0027Failed to build or send EMS event-1: %s\u0027, exc)"},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"    def _build_base_ems_log_message(self):"},{"line_number":784,"context_line":"        \"\"\"Construct EMS Autosupport log message common to all events.\"\"\""},{"line_number":785,"context_line":"        ems_log \u003d {"},{"line_number":786,"context_line":"            \u0027computer-name\u0027: socket.gethostname() or \u0027Manila_node\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"140ea239_01cd24e7","line":783,"in_reply_to":"f478d1d3_ed1dfbad","updated":"2026-08-20 20:19:52.000000000","message":"Marked as resolved.","commit_id":"027c6d734724f61dfd1e6038de5ac8f75d5485cb"}],"manila/share/drivers/netapp/dataontap/ems.py":[{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"9ec1454a8b08d82249700009379bdb114afae69f","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        \u0027driver_handles_share_servers\u0027: config.driver_handles_share_servers,"},{"line_number":94,"context_line":"        \u0027storage_protocol\u0027: \u0027_\u0027.join("},{"line_number":95,"context_line":"            p.upper() for p in CONF.enabled_share_protocols),"},{"line_number":96,"context_line":"        \u0027netapp_storage_family\u0027: \u0027ontap_cluster\u0027,"},{"line_number":97,"context_line":"        \u0027flexgroup_pools_configured\u0027: bool(library._flexgroup_pools),"},{"line_number":98,"context_line":"        \u0027flexgroup_pool_only\u0027: bool("},{"line_number":99,"context_line":"            config.safe_get(\u0027netapp_flexgroup_pool_only\u0027) or False),"}],"source_content_type":"text/x-python","patch_set":7,"id":"78993bdd_dfdefb92","line":96,"updated":"2026-07-22 05:41:33.000000000","message":"This is hardcoded, its not required.","commit_id":"d9abd10aad2af68091496007c71a32a5c04589e6"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"9ec1454a8b08d82249700009379bdb114afae69f","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        \u0027flexgroup_pool_only\u0027: bool("},{"line_number":99,"context_line":"            config.safe_get(\u0027netapp_flexgroup_pool_only\u0027) or False),"},{"line_number":100,"context_line":"        \u0027snapshot_support\u0027: True,"},{"line_number":101,"context_line":"        \u0027create_share_from_snapshot_support\u0027: True,"},{"line_number":102,"context_line":"        \u0027revert_to_snapshot_support\u0027: getattr("},{"line_number":103,"context_line":"            library, \u0027_revert_to_snapshot_support\u0027, False),"},{"line_number":104,"context_line":"        \u0027mount_snapshot_support\u0027: False,"}],"source_content_type":"text/x-python","patch_set":7,"id":"f3e3c75f_77926546","line":101,"updated":"2026-07-22 05:41:33.000000000","message":"Remove hardcoded values.","commit_id":"d9abd10aad2af68091496007c71a32a5c04589e6"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"9ec1454a8b08d82249700009379bdb114afae69f","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        \u0027replication_type\u0027: replication_type,"},{"line_number":127,"context_line":"    }"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    payload \u003d {"},{"line_number":130,"context_line":"        \u0027openstack\u0027: library._app_version,"},{"line_number":131,"context_line":"        \u0027driver_name\u0027: library.driver_name,"},{"line_number":132,"context_line":"        \u0027driver_version\u0027: \u00271.0\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"07520492_f192917a","line":129,"updated":"2026-07-22 05:41:33.000000000","message":"Create the frozen set so that sensitive details are not sent.ex - EMS_SECRET_OPTS \u003d frozenset({\n    \u0027netapp_password\u0027,\n    \u0027netapp_login\u0027,\n    \u0027netapp_private_key_file\u0027,\n    \u0027netapp_certificate_file\u0027,\n    \u0027netapp_ca_certificate_file\u0027,\n    \u0027netapp_ssl_cert_path\u0027,\n})","commit_id":"d9abd10aad2af68091496007c71a32a5c04589e6"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"9ec1454a8b08d82249700009379bdb114afae69f","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    payload \u003d {"},{"line_number":130,"context_line":"        \u0027openstack\u0027: library._app_version,"},{"line_number":131,"context_line":"        \u0027driver_name\u0027: library.driver_name,"},{"line_number":132,"context_line":"        \u0027driver_version\u0027: \u00271.0\u0027,"},{"line_number":133,"context_line":"        \u0027driver_mode\u0027: _get_driver_mode(library),"},{"line_number":134,"context_line":"        \u0027backend_name\u0027: library._backend_name,"}],"source_content_type":"text/x-python","patch_set":7,"id":"b48fe2a4_125772af","line":131,"updated":"2026-07-22 05:41:33.000000000","message":"Enhance to get OS name/deployment type.","commit_id":"d9abd10aad2af68091496007c71a32a5c04589e6"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"9ec1454a8b08d82249700009379bdb114afae69f","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        \u0027openstack\u0027: library._app_version,"},{"line_number":131,"context_line":"        \u0027driver_name\u0027: library.driver_name,"},{"line_number":132,"context_line":"        \u0027driver_version\u0027: \u00271.0\u0027,"},{"line_number":133,"context_line":"        \u0027driver_mode\u0027: _get_driver_mode(library),"},{"line_number":134,"context_line":"        \u0027backend_name\u0027: library._backend_name,"},{"line_number":135,"context_line":"        \u0027features\u0027: features,"},{"line_number":136,"context_line":"        \u0027object_counts\u0027: counts,"}],"source_content_type":"text/x-python","patch_set":7,"id":"569ffaa0_578ed669","line":133,"updated":"2026-07-22 05:41:33.000000000","message":"This is duplicate. This is not required.","commit_id":"d9abd10aad2af68091496007c71a32a5c04589e6"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"9ec1454a8b08d82249700009379bdb114afae69f","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    except Exception as exc:"},{"line_number":161,"context_line":"        LOG.debug(\u0027EMS: could not collect pool stats for event-1: %s\u0027, exc)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    LOG.info(\u0027NetApp EMS event-1 (Manila periodic pool catalog report): %s\u0027,"},{"line_number":164,"context_line":"             json.dumps(pool_info))"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    ems_log \u003d _build_base(library)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3e973ae5_2a7588a1","line":163,"updated":"2026-07-22 05:41:33.000000000","message":"Update the log level to debug.","commit_id":"d9abd10aad2af68091496007c71a32a5c04589e6"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5df98065fbac1cf443c3f39219d942c5697f3e74","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        \u0027log-level\u0027: \u00275\u0027,"},{"line_number":286,"context_line":"        \u0027auto-support\u0027: \u0027false\u0027,"},{"line_number":287,"context_line":"    }"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"85f5c9c0_81ba08d7","line":288,"updated":"2026-07-21 15:19:53.000000000","message":"pep8: W391 blank line at end of file","commit_id":"372b92e404740d19cfc4fa6d0cb11a51d12dd441"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"8d96dc6d6e4eb8a3b8d4c1e0ac9c5eaed531c790","unresolved":true,"context_lines":[{"line_number":83,"context_line":"    return \u0027Manila_node\u0027"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"def _detect_deployment_type():"},{"line_number":87,"context_line":"    \"\"\"Detect the OpenStack deployment platform."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    Checks are ordered from most-specific to least-specific:"}],"source_content_type":"text/x-python","patch_set":10,"id":"cf93b74d_a4e5bca2","line":86,"updated":"2026-07-27 09:35:27.000000000","message":"I think we can remove this method as it uses os paths to fetch deployment types which may change with version to version.","commit_id":"8fcba00ca159ec3b755e159135f251655eaa329f"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"3cf79f66c5539d08a138714cad38d57d0524bd1a","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    return \u0027Manila_node\u0027"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"def _detect_deployment_type():"},{"line_number":87,"context_line":"    \"\"\"Detect the OpenStack deployment platform."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    Checks are ordered from most-specific to least-specific:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9907ccc9_475a9a2f","line":86,"in_reply_to":"cf93b74d_a4e5bca2","updated":"2026-07-30 06:37:13.000000000","message":"This is fixed.","commit_id":"8fcba00ca159ec3b755e159135f251655eaa329f"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"8d96dc6d6e4eb8a3b8d4c1e0ac9c5eaed531c790","unresolved":true,"context_lines":[{"line_number":173,"context_line":"        \u0027flexgroup_pools_configured\u0027: bool(library._flexgroup_pools),"},{"line_number":174,"context_line":"        \u0027flexgroup_pool_only\u0027: bool("},{"line_number":175,"context_line":"            config.safe_get(\u0027netapp_flexgroup_pool_only\u0027) or False),"},{"line_number":176,"context_line":"        \u0027consistent_snapshot_support\u0027: ("},{"line_number":177,"context_line":"            None if library._flexgroup_pools else \u0027host\u0027),"},{"line_number":178,"context_line":"        \u0027ipv4_support\u0027: 4 in ip_versions,"},{"line_number":179,"context_line":"        \u0027ipv6_support\u0027: 6 in ip_versions,"},{"line_number":180,"context_line":"        \u0027thin_provisioning\u0027: [True, False],"}],"source_content_type":"text/x-python","patch_set":10,"id":"fbc0357d_0369438a","line":177,"range":{"start_line":176,"start_character":8,"end_line":177,"end_character":58},"updated":"2026-07-27 09:35:27.000000000","message":"What are the permitted values for consistent_snapshot_support? Is it a boolean? or String?","commit_id":"8fcba00ca159ec3b755e159135f251655eaa329f"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"3cf79f66c5539d08a138714cad38d57d0524bd1a","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        \u0027flexgroup_pools_configured\u0027: bool(library._flexgroup_pools),"},{"line_number":174,"context_line":"        \u0027flexgroup_pool_only\u0027: bool("},{"line_number":175,"context_line":"            config.safe_get(\u0027netapp_flexgroup_pool_only\u0027) or False),"},{"line_number":176,"context_line":"        \u0027consistent_snapshot_support\u0027: ("},{"line_number":177,"context_line":"            None if library._flexgroup_pools else \u0027host\u0027),"},{"line_number":178,"context_line":"        \u0027ipv4_support\u0027: 4 in ip_versions,"},{"line_number":179,"context_line":"        \u0027ipv6_support\u0027: 6 in ip_versions,"},{"line_number":180,"context_line":"        \u0027thin_provisioning\u0027: [True, False],"}],"source_content_type":"text/x-python","patch_set":10,"id":"4a8913c2_d0bd99df","line":177,"range":{"start_line":176,"start_character":8,"end_line":177,"end_character":58},"in_reply_to":"fbc0357d_0369438a","updated":"2026-07-30 06:37:13.000000000","message":"Comment is added related to permitted values.","commit_id":"8fcba00ca159ec3b755e159135f251655eaa329f"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"8d96dc6d6e4eb8a3b8d4c1e0ac9c5eaed531c790","unresolved":true,"context_lines":[{"line_number":177,"context_line":"            None if library._flexgroup_pools else \u0027host\u0027),"},{"line_number":178,"context_line":"        \u0027ipv4_support\u0027: 4 in ip_versions,"},{"line_number":179,"context_line":"        \u0027ipv6_support\u0027: 6 in ip_versions,"},{"line_number":180,"context_line":"        \u0027thin_provisioning\u0027: [True, False],"},{"line_number":181,"context_line":"        \u0027dedupe\u0027: [True, False],"},{"line_number":182,"context_line":"        \u0027compression\u0027: [True, False],"},{"line_number":183,"context_line":"        \u0027qos_support\u0027: have_cluster_creds,"},{"line_number":184,"context_line":"        \u0027qos_type_support\u0027: have_cluster_creds,"},{"line_number":185,"context_line":"        \u0027netapp_flexvol_encryption\u0027: getattr("}],"source_content_type":"text/x-python","patch_set":10,"id":"f859a22e_b4f1423b","line":182,"range":{"start_line":180,"start_character":0,"end_line":182,"end_character":37},"updated":"2026-07-27 09:35:27.000000000","message":"Are these not being fetched from config?","commit_id":"8fcba00ca159ec3b755e159135f251655eaa329f"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"3cf79f66c5539d08a138714cad38d57d0524bd1a","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            None if library._flexgroup_pools else \u0027host\u0027),"},{"line_number":178,"context_line":"        \u0027ipv4_support\u0027: 4 in ip_versions,"},{"line_number":179,"context_line":"        \u0027ipv6_support\u0027: 6 in ip_versions,"},{"line_number":180,"context_line":"        \u0027thin_provisioning\u0027: [True, False],"},{"line_number":181,"context_line":"        \u0027dedupe\u0027: [True, False],"},{"line_number":182,"context_line":"        \u0027compression\u0027: [True, False],"},{"line_number":183,"context_line":"        \u0027qos_support\u0027: have_cluster_creds,"},{"line_number":184,"context_line":"        \u0027qos_type_support\u0027: have_cluster_creds,"},{"line_number":185,"context_line":"        \u0027netapp_flexvol_encryption\u0027: getattr("}],"source_content_type":"text/x-python","patch_set":10,"id":"fb409770_bd1493e4","line":182,"range":{"start_line":180,"start_character":0,"end_line":182,"end_character":37},"in_reply_to":"f859a22e_b4f1423b","updated":"2026-07-30 06:37:13.000000000","message":"Comment is added","commit_id":"8fcba00ca159ec3b755e159135f251655eaa329f"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"85debe74df0b527410e00e7b93af61fc3d90f945","unresolved":true,"context_lines":[{"line_number":214,"context_line":"    ``COUNT(*)`` against the relevant model; soft-deleted rows are excluded."},{"line_number":215,"context_line":"    \"\"\""},{"line_number":216,"context_line":"    @sqlalchemy_api.context_manager.reader"},{"line_number":217,"context_line":"    def _counts(ctxt):"},{"line_number":218,"context_line":"        def _count(model, extra_filter\u003dNone):"},{"line_number":219,"context_line":"            q \u003d (ctxt.session.query(func.count(model.id))"},{"line_number":220,"context_line":"                 .filter_by(deleted\u003dFalse))"},{"line_number":221,"context_line":"            if extra_filter is not None:"},{"line_number":222,"context_line":"                q \u003d q.filter(extra_filter)"},{"line_number":223,"context_line":"            return q.scalar() or 0"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        host_like \u003d \u0027%s%%\u0027 % host"},{"line_number":226,"context_line":"        return {"},{"line_number":227,"context_line":"            \u0027shares\u0027: _count("}],"source_content_type":"text/x-python","patch_set":13,"id":"f49315d2_30abc7a0","line":224,"range":{"start_line":217,"start_character":4,"end_line":224,"end_character":0},"updated":"2026-08-06 15:33:12.000000000","message":"As Goutham said this is not recommended to make the db query from driver. This will give you all the objects of OpenStack while we wanted to collect the object related to NetApp cluster. So, suppose customer has multiple backend from different vendor, in this case we are adding the object count created on other vendor backed.","commit_id":"6946f24a555e7ed7f72dd9281cbc3db1d1bce0ad"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"b4b12c604278854db6c3d5155fb3a361aae683f1","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    ``COUNT(*)`` against the relevant model; soft-deleted rows are excluded."},{"line_number":215,"context_line":"    \"\"\""},{"line_number":216,"context_line":"    @sqlalchemy_api.context_manager.reader"},{"line_number":217,"context_line":"    def _counts(ctxt):"},{"line_number":218,"context_line":"        def _count(model, extra_filter\u003dNone):"},{"line_number":219,"context_line":"            q \u003d (ctxt.session.query(func.count(model.id))"},{"line_number":220,"context_line":"                 .filter_by(deleted\u003dFalse))"},{"line_number":221,"context_line":"            if extra_filter is not None:"},{"line_number":222,"context_line":"                q \u003d q.filter(extra_filter)"},{"line_number":223,"context_line":"            return q.scalar() or 0"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        host_like \u003d \u0027%s%%\u0027 % host"},{"line_number":226,"context_line":"        return {"},{"line_number":227,"context_line":"            \u0027shares\u0027: _count("}],"source_content_type":"text/x-python","patch_set":13,"id":"83d5c8cf_9275f053","line":224,"range":{"start_line":217,"start_character":4,"end_line":224,"end_character":0},"in_reply_to":"f49315d2_30abc7a0","updated":"2026-08-14 01:41:28.000000000","message":"Marked as resolved.","commit_id":"6946f24a555e7ed7f72dd9281cbc3db1d1bce0ad"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"01423ddac747daa78ff68a69a7de3555bbf649e6","unresolved":true,"context_lines":[{"line_number":41,"context_line":")"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# Configuration option names that must never appear in any EMS/ASUP payload."},{"line_number":44,"context_line":"EMS_SECRET_OPTS \u003d frozenset({"},{"line_number":45,"context_line":"    \u0027netapp_password\u0027,"},{"line_number":46,"context_line":"    \u0027netapp_login\u0027,"},{"line_number":47,"context_line":"    \u0027netapp_private_key_file\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ce577d2b_e74c9da2","line":44,"updated":"2026-08-18 10:01:53.000000000","message":"EMS_SECRET_OPTS seems to be unused. Release notes also references this dict. We need to either make use of it, or remove it.","commit_id":"831a8219235f425c356091bb68b03927ed7ab5c1"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"9ce744a4bb8a071dca72546a8156097528c698b2","unresolved":false,"context_lines":[{"line_number":41,"context_line":")"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# Configuration option names that must never appear in any EMS/ASUP payload."},{"line_number":44,"context_line":"EMS_SECRET_OPTS \u003d frozenset({"},{"line_number":45,"context_line":"    \u0027netapp_password\u0027,"},{"line_number":46,"context_line":"    \u0027netapp_login\u0027,"},{"line_number":47,"context_line":"    \u0027netapp_private_key_file\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"54c97311_b9f8de14","line":44,"in_reply_to":"ce577d2b_e74c9da2","updated":"2026-08-18 15:40:22.000000000","message":"Fixed","commit_id":"831a8219235f425c356091bb68b03927ed7ab5c1"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"01423ddac747daa78ff68a69a7de3555bbf649e6","unresolved":true,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    # Net Aggregate Encryption (NAE) is available from ONTAP 9.6 onwards."},{"line_number":96,"context_line":"    try:"},{"line_number":97,"context_line":"        nae_support \u003d bool("},{"line_number":98,"context_line":"            not config.safe_get(\u0027netapp_use_legacy_client\u0027)"},{"line_number":99,"context_line":"            or library._client.features.NAE_SUPPORT"},{"line_number":100,"context_line":"        )"},{"line_number":101,"context_line":"    except Exception:"},{"line_number":102,"context_line":"        nae_support \u003d False"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"55d1dd74_6bf6c88f","line":100,"range":{"start_line":97,"start_character":8,"end_line":100,"end_character":9},"updated":"2026-08-18 10:01:53.000000000","message":"```suggestion\n        nae_support \u003d bool(\n    not config.safe_get(\u0027netapp_use_legacy_client\u0027)\n    and library._client.features.NAE_SUPPORT\n)\n```\nWhen netapp_use_legacy_client is unset/false (REST client), not None/not False is True, so nae_support is always reported as True without checking ONTAP features.","commit_id":"831a8219235f425c356091bb68b03927ed7ab5c1"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"9ce744a4bb8a071dca72546a8156097528c698b2","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    # Net Aggregate Encryption (NAE) is available from ONTAP 9.6 onwards."},{"line_number":96,"context_line":"    try:"},{"line_number":97,"context_line":"        nae_support \u003d bool("},{"line_number":98,"context_line":"            not config.safe_get(\u0027netapp_use_legacy_client\u0027)"},{"line_number":99,"context_line":"            or library._client.features.NAE_SUPPORT"},{"line_number":100,"context_line":"        )"},{"line_number":101,"context_line":"    except Exception:"},{"line_number":102,"context_line":"        nae_support \u003d False"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"62765777_03522c92","line":100,"range":{"start_line":97,"start_character":8,"end_line":100,"end_character":9},"in_reply_to":"55d1dd74_6bf6c88f","updated":"2026-08-18 15:40:22.000000000","message":"Fixed","commit_id":"831a8219235f425c356091bb68b03927ed7ab5c1"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"01423ddac747daa78ff68a69a7de3555bbf649e6","unresolved":true,"context_lines":[{"line_number":188,"context_line":"    payload \u003d {"},{"line_number":189,"context_line":"        \u0027openstack\u0027: library._app_version,"},{"line_number":190,"context_line":"        \u0027driver_name\u0027: library.driver_name,"},{"line_number":191,"context_line":"        \u0027driver_version\u0027: \u00271.0\u0027,"},{"line_number":192,"context_line":"        \u0027backend_name\u0027: library._backend_name,"},{"line_number":193,"context_line":"        \u0027features\u0027: features,"},{"line_number":194,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":17,"id":"9c2afbb9_3975e91c","line":191,"updated":"2026-08-18 10:01:53.000000000","message":"We have hardcoded the version to 1.0.","commit_id":"831a8219235f425c356091bb68b03927ed7ab5c1"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"9ce744a4bb8a071dca72546a8156097528c698b2","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    payload \u003d {"},{"line_number":189,"context_line":"        \u0027openstack\u0027: library._app_version,"},{"line_number":190,"context_line":"        \u0027driver_name\u0027: library.driver_name,"},{"line_number":191,"context_line":"        \u0027driver_version\u0027: \u00271.0\u0027,"},{"line_number":192,"context_line":"        \u0027backend_name\u0027: library._backend_name,"},{"line_number":193,"context_line":"        \u0027features\u0027: features,"},{"line_number":194,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":17,"id":"a1db9773_a1a22d41","line":191,"in_reply_to":"9c2afbb9_3975e91c","updated":"2026-08-18 15:40:22.000000000","message":"fixed","commit_id":"831a8219235f425c356091bb68b03927ed7ab5c1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"88fcf9da585809b7f051fc0f821e11ddbb4649dc","unresolved":true,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"# Configuration option names that must never appear in any EMS/ASUP payload."},{"line_number":48,"context_line":"# Used by _safe_config_snapshot() to filter sensitive values at runtime."},{"line_number":49,"context_line":"EMS_SECRET_OPTS \u003d frozenset({"},{"line_number":50,"context_line":"    \u0027netapp_password\u0027,"},{"line_number":51,"context_line":"    \u0027netapp_login\u0027,"},{"line_number":52,"context_line":"    \u0027netapp_private_key_file\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"5bdefbb8_1ec878ad","line":49,"updated":"2026-08-24 04:31:02.000000000","message":"Please add a unit test that iterates the live option registry (`_NETAPP_OPT_GROUPS`) and asserts nothing whose name matches a sensitivity heuristic (`password|secret|token|key|cert|login|credential|private`) can ever appear in the payload, and that every `secret\u003dTrue` option is excluded. A registry-driven test catches future additions automatically; a static list does not. Also note `netapp_server_hostname` (the controller address) and `netapp_identity_auth_token_path` currently pass the filter - worth confirming that\u0027s intended.","commit_id":"47170eaba1490c5399f538856194619329da2f51"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"03944906e4c39da5845f9940977900d66ee15111","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"# Configuration option names that must never appear in any EMS/ASUP payload."},{"line_number":48,"context_line":"# Used by _safe_config_snapshot() to filter sensitive values at runtime."},{"line_number":49,"context_line":"EMS_SECRET_OPTS \u003d frozenset({"},{"line_number":50,"context_line":"    \u0027netapp_password\u0027,"},{"line_number":51,"context_line":"    \u0027netapp_login\u0027,"},{"line_number":52,"context_line":"    \u0027netapp_private_key_file\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"98823efc_74e28717","line":49,"in_reply_to":"5bdefbb8_1ec878ad","updated":"2026-08-24 16:53:11.000000000","message":"Added RegistryDrivenSensitivityTestCase in test_ems.py with 3 registry-driven tests","commit_id":"47170eaba1490c5399f538856194619329da2f51"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"88fcf9da585809b7f051fc0f821e11ddbb4649dc","unresolved":true,"context_lines":[{"line_number":116,"context_line":"                val \u003d config.safe_get(opt.name)"},{"line_number":117,"context_line":"                if not _is_empty(val):"},{"line_number":118,"context_line":"                    configs[opt.name] \u003d val"},{"line_number":119,"context_line":"            except Exception:"},{"line_number":120,"context_line":"                pass"},{"line_number":121,"context_line":"    return _sanitize_configs(configs)"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"f1a1c8b5_e0cefa31","line":119,"updated":"2026-08-24 04:31:02.000000000","message":"`LOG.debug` with the option name that failed to parse","commit_id":"47170eaba1490c5399f538856194619329da2f51"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"03944906e4c39da5845f9940977900d66ee15111","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                val \u003d config.safe_get(opt.name)"},{"line_number":117,"context_line":"                if not _is_empty(val):"},{"line_number":118,"context_line":"                    configs[opt.name] \u003d val"},{"line_number":119,"context_line":"            except Exception:"},{"line_number":120,"context_line":"                pass"},{"line_number":121,"context_line":"    return _sanitize_configs(configs)"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"5e4a9aea_b58306e9","line":119,"in_reply_to":"f1a1c8b5_e0cefa31","updated":"2026-08-24 16:53:11.000000000","message":"Its fixed. Now when config.safe_get() fails for any option, the debug log will show exactly which option name failed and the exception message","commit_id":"47170eaba1490c5399f538856194619329da2f51"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"88fcf9da585809b7f051fc0f821e11ddbb4649dc","unresolved":true,"context_lines":[{"line_number":246,"context_line":"    payload \u003d {"},{"line_number":247,"context_line":"        \u0027openstack\u0027: library._app_version,"},{"line_number":248,"context_line":"        \u0027driver_name\u0027: library.driver_name,"},{"line_number":249,"context_line":"        \u0027driver_version\u0027: ("},{"line_number":250,"context_line":"            v if isinstance(v :\u003d getattr(library, \u0027VERSION\u0027, None), str)"},{"line_number":251,"context_line":"            else _EMS_PAYLOAD_VERSION"},{"line_number":252,"context_line":"        ),"}],"source_content_type":"text/x-python","patch_set":25,"id":"6502fa84_ab883cf9","line":249,"updated":"2026-08-24 04:31:02.000000000","message":"is this the `payload_version`? The driver version doesn\u0027t seem to resolve here.","commit_id":"47170eaba1490c5399f538856194619329da2f51"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"08a05da784dd2a5f3f111c497704a92ca1e8e2af","unresolved":false,"context_lines":[{"line_number":246,"context_line":"    payload \u003d {"},{"line_number":247,"context_line":"        \u0027openstack\u0027: library._app_version,"},{"line_number":248,"context_line":"        \u0027driver_name\u0027: library.driver_name,"},{"line_number":249,"context_line":"        \u0027driver_version\u0027: ("},{"line_number":250,"context_line":"            v if isinstance(v :\u003d getattr(library, \u0027VERSION\u0027, None), str)"},{"line_number":251,"context_line":"            else _EMS_PAYLOAD_VERSION"},{"line_number":252,"context_line":"        ),"}],"source_content_type":"text/x-python","patch_set":25,"id":"eafc0c35_b6d23903","line":249,"in_reply_to":"6502fa84_ab883cf9","updated":"2026-08-25 09:23:50.000000000","message":"Marked as resolved.","commit_id":"47170eaba1490c5399f538856194619329da2f51"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"88fcf9da585809b7f051fc0f821e11ddbb4649dc","unresolved":true,"context_lines":[{"line_number":256,"context_line":"    }"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    # Also log to share.log so operators can review what was reported."},{"line_number":259,"context_line":"    LOG.debug(\u0027NetApp EMS event-0 (Manila periodic deployment report): %s\u0027,"},{"line_number":260,"context_line":"              json.dumps(payload))"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    ems_log \u003d _build_base(library)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ca12ea8f_f53d23d4","line":259,"updated":"2026-08-24 04:31:02.000000000","message":"The full event-0 payload (including the config snapshot) is dumped to DEBUG logs which get routinely shipped to third-party log aggregation, so this broadens the exposure surface well beyond the ONTAP EMS channel. Consider logging a summary instead (event id, payload version, counts) rather than the raw JSON","commit_id":"47170eaba1490c5399f538856194619329da2f51"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"624c79751c82dda399464c920cb280376cd30d6a","unresolved":true,"context_lines":[{"line_number":256,"context_line":"    }"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    # Also log to share.log so operators can review what was reported."},{"line_number":259,"context_line":"    LOG.debug(\u0027NetApp EMS event-0 (Manila periodic deployment report): %s\u0027,"},{"line_number":260,"context_line":"              json.dumps(payload))"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    ems_log \u003d _build_base(library)"}],"source_content_type":"text/x-python","patch_set":25,"id":"833702d6_40728bbe","line":259,"in_reply_to":"2dd7e515_706c921b","updated":"2026-08-24 22:21:23.000000000","message":"Marked as unresolved.","commit_id":"47170eaba1490c5399f538856194619329da2f51"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"057f37884adf2d14f09f21289b10523d7ed8abf9","unresolved":false,"context_lines":[{"line_number":256,"context_line":"    }"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    # Also log to share.log so operators can review what was reported."},{"line_number":259,"context_line":"    LOG.debug(\u0027NetApp EMS event-0 (Manila periodic deployment report): %s\u0027,"},{"line_number":260,"context_line":"              json.dumps(payload))"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    ems_log \u003d _build_base(library)"}],"source_content_type":"text/x-python","patch_set":25,"id":"2dd7e515_706c921b","line":259,"in_reply_to":"ca12ea8f_f53d23d4","updated":"2026-08-24 22:20:18.000000000","message":"We would need feature list in the logs to be able to triage the issues in a better way.","commit_id":"47170eaba1490c5399f538856194619329da2f51"}],"manila/share/drivers/netapp/options.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"88fcf9da585809b7f051fc0f821e11ddbb4649dc","unresolved":true,"context_lines":[{"line_number":326,"context_line":"                     \u0027API call.\u0027)), ]"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"netapp_support_opts \u003d ["},{"line_number":329,"context_line":"    cfg.BoolOpt(\u0027netapp_enable_ems_autosupport\u0027,"},{"line_number":330,"context_line":"                default\u003dTrue,"},{"line_number":331,"context_line":"                help\u003d(\u0027When True (default), the driver periodically sends \u0027"},{"line_number":332,"context_line":"                      \u0027EMS (AutoSupport) telemetry to the ONTAP controller: \u0027"}],"source_content_type":"text/x-python","patch_set":25,"id":"91e64fc9_d0be18e8","line":329,"updated":"2026-08-24 04:31:02.000000000","message":"`netapp_enable_ems_autosupport` defaults to True, so simply upgrading starts shipping the *new* config snapshot and expanded feature flags off the node without any operator action. The old code never sent a config snapshot, so this is net-new data egress on a default-on path. For a channel that can forward deployment metadata to a vendor (via ASUP), please consider making the enriched reporting opt-**in**. A good compromise that preserves backwards-compatible behavior: keep the lightweight identity/pool telemetry that already existed on by default, but gate the new `configs` snapshot behind a separate, default-False flag (e.g. `netapp_ems_report_config`). Operators in regulated, air-gapped, or privacy-sensitive environments then opt in consciously rather than opt out after the fact.","commit_id":"47170eaba1490c5399f538856194619329da2f51"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"ea8ac3df52db538c50259da0809867978a7812f8","unresolved":true,"context_lines":[{"line_number":326,"context_line":"                     \u0027API call.\u0027)), ]"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"netapp_support_opts \u003d ["},{"line_number":329,"context_line":"    cfg.BoolOpt(\u0027netapp_enable_ems_autosupport\u0027,"},{"line_number":330,"context_line":"                default\u003dTrue,"},{"line_number":331,"context_line":"                help\u003d(\u0027When True (default), the driver periodically sends \u0027"},{"line_number":332,"context_line":"                      \u0027EMS (AutoSupport) telemetry to the ONTAP controller: \u0027"}],"source_content_type":"text/x-python","patch_set":25,"id":"a608fbc5_7cfe5fd4","line":329,"in_reply_to":"91e64fc9_d0be18e8","updated":"2026-08-24 05:12:50.000000000","message":"Goutham, we already had the event0 and event1 getting logged without the enable flag in the older releases. Which means, older releases, we were always logging EMS without customer\u0027s consent so there is no behaviour change from that as default remains true. If they do not want this data to be reached, they can always disable it. This is the same behaviour we have taken on our platform (ONTAP) where ASUPs are always ON by default. Which would mean, most of our customers are okay to send the data to NetApp for consumption and betterment of the product.\n\nThe reason this information is important for NetApp is to understand how our features land. We do not intend to keep any information that is unintended in the EMS log. Most of the data can be derived from ONTAP by creating queries. What we log in the EMS additionally now is the backend config which is unavailable via ASUP. If customers do not want to send ASUP data, they can still go and disable ASUP on ONTAP and nothing from platform or OpenStack Manila EMS would reach NetApp.","commit_id":"47170eaba1490c5399f538856194619329da2f51"}],"manila/tests/share/drivers/netapp/dataontap/test_ems.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3896b0cdfc1579faceff1b7d63dc5d570dbb467a","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                         netapp_ems._safe_hostname())"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def test_safe_hostname_both_ip_returns_placeholder(self):"},{"line_number":346,"context_line":"        \"\"\"When both gethostname and getfqdn return IPs, returns Manila_node.\"\"\""},{"line_number":347,"context_line":"        self.mock_object(socket, \u0027gethostname\u0027,"},{"line_number":348,"context_line":"                         mock.Mock(return_value\u003d\u002710.0.0.1\u0027))"},{"line_number":349,"context_line":"        self.mock_object(socket, \u0027getfqdn\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"55df708d_c51143e8","line":346,"updated":"2026-07-21 18:14:27.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"6ad98a8bdd50d86325e9bcbad7fe2f565a829003"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3896b0cdfc1579faceff1b7d63dc5d570dbb467a","unresolved":false,"context_lines":[{"line_number":358,"context_line":"    def test_detect_deployment_type_platform9(self):"},{"line_number":359,"context_line":"        \"\"\"platform9 is detected when /etc/platform9 directory exists.\"\"\""},{"line_number":360,"context_line":"        self.mock_object(netapp_ems.os.path, \u0027isdir\u0027,"},{"line_number":361,"context_line":"                         mock.Mock(side_effect\u003dlambda p: p \u003d\u003d \u0027/etc/platform9\u0027))"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        with mock.patch.dict(\u0027os.environ\u0027, {}, clear\u003dTrue):"},{"line_number":364,"context_line":"            result \u003d netapp_ems._detect_deployment_type()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ee7278a_0df3ec16","line":361,"updated":"2026-07-21 18:14:27.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"6ad98a8bdd50d86325e9bcbad7fe2f565a829003"}],"releasenotes/notes/netapp-enrich-periodic-ems-autosupport-payload-a3f9c2e1b5d84076.yaml":[{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"5eb2c30d699f332460ea3ba81335d61d9f67e119","unresolved":true,"context_lines":[{"line_number":14,"context_line":"    A ``EMS_SECRET_OPTS`` frozenset guards sensitive config keys from appearing"},{"line_number":15,"context_line":"    in any payload. Both events are logged at DEBUG level in ``share.log``."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"upgrade:"},{"line_number":18,"context_line":"  - |"},{"line_number":19,"context_line":"    NetApp Driver: The public DB API ``share_resource_counts`` has been removed;"},{"line_number":20,"context_line":"    object counting is now handled internally within ``ems.py``."},{"line_number":21,"context_line":"  - |"},{"line_number":22,"context_line":"    NetApp Driver: EMS log messages moved from INFO to DEBUG level."},{"line_number":23,"context_line":"  - |"},{"line_number":24,"context_line":"    NetApp Driver: EMS event-1 (pool catalog) frequency changed from hourly"},{"line_number":25,"context_line":"    to daily (86400 s). Event-0 remains hourly."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"749f797f_29b2efc2","line":25,"range":{"start_line":17,"start_character":1,"end_line":25,"end_character":47},"updated":"2026-08-06 15:16:51.000000000","message":"Do we have any impact on upgrade path, if not, I don\u0027t think this is require to add here. @anoop.shukla@netapp.com","commit_id":"6946f24a555e7ed7f72dd9281cbc3db1d1bce0ad"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"0239fdd1bad67ae453d5fc310e84043e22674a1e","unresolved":true,"context_lines":[{"line_number":14,"context_line":"    A ``EMS_SECRET_OPTS`` frozenset guards sensitive config keys from appearing"},{"line_number":15,"context_line":"    in any payload. Both events are logged at DEBUG level in ``share.log``."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"upgrade:"},{"line_number":18,"context_line":"  - |"},{"line_number":19,"context_line":"    NetApp Driver: The public DB API ``share_resource_counts`` has been removed;"},{"line_number":20,"context_line":"    object counting is now handled internally within ``ems.py``."},{"line_number":21,"context_line":"  - |"},{"line_number":22,"context_line":"    NetApp Driver: EMS log messages moved from INFO to DEBUG level."},{"line_number":23,"context_line":"  - |"},{"line_number":24,"context_line":"    NetApp Driver: EMS event-1 (pool catalog) frequency changed from hourly"},{"line_number":25,"context_line":"    to daily (86400 s). Event-0 remains hourly."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"e2de25f4_11ea054e","line":25,"range":{"start_line":17,"start_character":1,"end_line":25,"end_character":47},"in_reply_to":"749f797f_29b2efc2","updated":"2026-08-12 13:32:16.000000000","message":"There should be no impact on upgrade path.","commit_id":"6946f24a555e7ed7f72dd9281cbc3db1d1bce0ad"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"b4b12c604278854db6c3d5155fb3a361aae683f1","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    A ``EMS_SECRET_OPTS`` frozenset guards sensitive config keys from appearing"},{"line_number":15,"context_line":"    in any payload. Both events are logged at DEBUG level in ``share.log``."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"upgrade:"},{"line_number":18,"context_line":"  - |"},{"line_number":19,"context_line":"    NetApp Driver: The public DB API ``share_resource_counts`` has been removed;"},{"line_number":20,"context_line":"    object counting is now handled internally within ``ems.py``."},{"line_number":21,"context_line":"  - |"},{"line_number":22,"context_line":"    NetApp Driver: EMS log messages moved from INFO to DEBUG level."},{"line_number":23,"context_line":"  - |"},{"line_number":24,"context_line":"    NetApp Driver: EMS event-1 (pool catalog) frequency changed from hourly"},{"line_number":25,"context_line":"    to daily (86400 s). Event-0 remains hourly."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"c1316455_44d01084","line":25,"range":{"start_line":17,"start_character":1,"end_line":25,"end_character":47},"in_reply_to":"e2de25f4_11ea054e","updated":"2026-08-14 01:41:28.000000000","message":"Marked as resolved.","commit_id":"6946f24a555e7ed7f72dd9281cbc3db1d1bce0ad"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"88fcf9da585809b7f051fc0f821e11ddbb4649dc","unresolved":true,"context_lines":[{"line_number":14,"context_line":"    - A new ``netapp_enable_ems_autosupport`` boolean option (default ``True``)"},{"line_number":15,"context_line":"      allows operators to disable all EMS reporting in air-gapped or"},{"line_number":16,"context_line":"      privacy-restricted deployments."},{"line_number":17,"context_line":"    - Sensitive configuration keys (credentials, certificates, DNS entries)"},{"line_number":18,"context_line":"      are protected by ``EMS_SECRET_OPTS`` and never included in any payload."},{"line_number":19,"context_line":"    - Both events are emitted at DEBUG level in ``share.log``."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"8eca229d_8278d2b5","line":17,"updated":"2026-08-24 04:31:02.000000000","message":"\"Sensitive configuration keys ... are protected by EMS_SECRET_OPTS and never included in any payload\" overstates the guarantee - it\u0027s a denylist, so \"never\" only holds for the keys someone remembered to list.","commit_id":"47170eaba1490c5399f538856194619329da2f51"},{"author":{"_account_id":38614,"name":"Sailaja Mada","display_name":"Sailaja Mada","email":"sailajam@netapp.com","username":"sailajam"},"change_message_id":"dbaa55e7d3bb899dab04fb5d8b7b42cbce7be00b","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    - A new ``netapp_enable_ems_autosupport`` boolean option (default ``True``)"},{"line_number":15,"context_line":"      allows operators to disable all EMS reporting in air-gapped or"},{"line_number":16,"context_line":"      privacy-restricted deployments."},{"line_number":17,"context_line":"    - Sensitive configuration keys (credentials, certificates, DNS entries)"},{"line_number":18,"context_line":"      are protected by ``EMS_SECRET_OPTS`` and never included in any payload."},{"line_number":19,"context_line":"    - Both events are emitted at DEBUG level in ``share.log``."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"5d38d7bd_b0116248","line":17,"in_reply_to":"8eca229d_8278d2b5","updated":"2026-08-24 22:18:46.000000000","message":"Marked as resolved.","commit_id":"47170eaba1490c5399f538856194619329da2f51"}]}
