)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16137,"name":"Tobias Urdin","email":"tobias.urdin@binero.com","username":"tobasco"},"change_message_id":"860ba5267cd0bc033d61db52877707ed762890a7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f86c988d_3afb110c","updated":"2025-05-07 09:11:17.000000000","message":"perhaps we should add testing for project scoped admin so that we can verify that the policies are working? browsing n-d-r repo i can\u0027t see that we have such tests already","commit_id":"c84f17ad39169e8ce473c305b9d1b03ee8f2f474"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"badd7093e514f84251d53baeb0ff6cf321bfa313","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"67866ed2_d4a2e1bd","in_reply_to":"f86c988d_3afb110c","updated":"2025-05-08 08:39:17.000000000","message":"I added more tests, please check, I hope I covered all possible scenarios (not sure if this parameterized is really the best solution just a trial/PoC from my side suggested by Miro Tomaska)","commit_id":"c84f17ad39169e8ce473c305b9d1b03ee8f2f474"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"faf1dba6e7ff1edfce7c6c0b6f40ac47acf3851b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"2ec15f31_050b4f2b","updated":"2025-05-23 10:54:43.000000000","message":"I\u0027m not sure that \"project scoped admin\" is a reasonable concept in this context, do you have a scenario that matches this?\n\nIn my use case, I would only want the deployer to be able to access any n-d-r API and I assume the same holds true for most deployments, so I wouldn\u0027t want to change the default easily. Even if we do, this needs matching updates to the documentation and a release note?","commit_id":"f3b34c1ca7120d270224123f2f8befb4e9b5c557"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"8226d2b808d572eb30ff40e43ce0f247ecfeffac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"4b1fca1b_d4df74e3","updated":"2025-06-24 11:23:55.000000000","message":"hmm, ok, I think this might make sense somehow. one more question inline though","commit_id":"f3b34c1ca7120d270224123f2f8befb4e9b5c557"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0789f52dc96bd00199d4eb7843a2f873f1e1911b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"dfaeafe5_1e889c39","in_reply_to":"2ec15f31_050b4f2b","updated":"2025-06-23 12:13:15.000000000","message":"AFAIR keeping rules with project scope (if those for admin only) was one of the community goal\u0027s points: https://governance.openstack.org/tc/goals/selected/consistent-and-secure-rbac.html#change-in-scope-implementation so I think this is completely ok to do it that way in n-d-r too IMO.\n\nAnd I think that keeping it as ADMIN only be default is enough here. If operator will want to override some of those rules and e.g. allow them for some custom role, this should be possible.","commit_id":"f3b34c1ca7120d270224123f2f8befb4e9b5c557"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"aa968fc31bf2a4f5e7c12b2aacf10a45bd9de816","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3fb26552_2995a930","in_reply_to":"dfaeafe5_1e889c39","updated":"2025-06-23 13:21:25.000000000","message":"thanks Slawek","commit_id":"f3b34c1ca7120d270224123f2f8befb4e9b5c557"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"0addefd333ed7663f57252e2c4fe44cd69f23e7a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"694214f3_1267f4e4","updated":"2026-02-03 18:20:56.000000000","message":"thx for the update, sadly more has gone stale now, see below.\n\nI also wonder whether a reno would be needed?","commit_id":"a738ecc3aff128aaea27d954946aa45ae4d979ff"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6e92432d759bb7d355973ed18d9be6c36cffc371","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"c8e6dff0_9dfebec1","in_reply_to":"694214f3_1267f4e4","updated":"2026-02-06 12:50:23.000000000","message":"good idea, perhaps it was already suggested, but in the meantime I forgot it, I added a re-no","commit_id":"a738ecc3aff128aaea27d954946aa45ae4d979ff"}],"neutron_dynamic_routing/policies/bgp_dragent.py":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"0addefd333ed7663f57252e2c4fe44cd69f23e7a","unresolved":true,"context_lines":[{"line_number":34,"context_line":"            name\u003d\u0027add_bgp_speaker_to_dragent\u0027,"},{"line_number":35,"context_line":"            check_str\u003dbase.RULE_ADMIN_ONLY,"},{"line_number":36,"context_line":"            deprecated_reason\u003dDEPRECATED_REASON,"},{"line_number":37,"context_line":"            deprecated_since\u003d\u00272025.2\u0027)"},{"line_number":38,"context_line":"    ),"},{"line_number":39,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":40,"context_line":"        name\u003d\u0027remove_bgp_speaker_from_dragent\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"966a422f_670889d5","line":37,"range":{"start_line":37,"start_character":30,"end_line":37,"end_character":36},"updated":"2026-02-03 18:20:56.000000000","message":"should be updated for the current cycle? same below\n```suggestion\n            deprecated_since\u003d\u00272026.1\u0027)\n```","commit_id":"a738ecc3aff128aaea27d954946aa45ae4d979ff"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6e92432d759bb7d355973ed18d9be6c36cffc371","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            name\u003d\u0027add_bgp_speaker_to_dragent\u0027,"},{"line_number":35,"context_line":"            check_str\u003dbase.RULE_ADMIN_ONLY,"},{"line_number":36,"context_line":"            deprecated_reason\u003dDEPRECATED_REASON,"},{"line_number":37,"context_line":"            deprecated_since\u003d\u00272025.2\u0027)"},{"line_number":38,"context_line":"    ),"},{"line_number":39,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":40,"context_line":"        name\u003d\u0027remove_bgp_speaker_from_dragent\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3e446667_c7ab7388","line":37,"range":{"start_line":37,"start_character":30,"end_line":37,"end_character":36},"in_reply_to":"966a422f_670889d5","updated":"2026-02-06 12:50:23.000000000","message":"true, thanks, I updated all the release numbers.","commit_id":"a738ecc3aff128aaea27d954946aa45ae4d979ff"}],"neutron_dynamic_routing/policies/bgp_peer.py":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"0addefd333ed7663f57252e2c4fe44cd69f23e7a","unresolved":true,"context_lines":[{"line_number":34,"context_line":"            name\u003d\u0027create_bgp_peer\u0027,"},{"line_number":35,"context_line":"            check_str\u003dbase.RULE_ADMIN_ONLY,"},{"line_number":36,"context_line":"            deprecated_reason\u003dDEPRECATED_REASON,"},{"line_number":37,"context_line":"            deprecated_since\u003d\u00272025.2\u0027)"},{"line_number":38,"context_line":"    ),"},{"line_number":39,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":40,"context_line":"        name\u003d\u0027update_bgp_peer\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"af950052_a8abd92e","line":37,"range":{"start_line":37,"start_character":30,"end_line":37,"end_character":36},"updated":"2026-02-03 18:20:56.000000000","message":"```suggestion\n            deprecated_since\u003d\u00272026.1\u0027)\n```","commit_id":"a738ecc3aff128aaea27d954946aa45ae4d979ff"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6e92432d759bb7d355973ed18d9be6c36cffc371","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            name\u003d\u0027create_bgp_peer\u0027,"},{"line_number":35,"context_line":"            check_str\u003dbase.RULE_ADMIN_ONLY,"},{"line_number":36,"context_line":"            deprecated_reason\u003dDEPRECATED_REASON,"},{"line_number":37,"context_line":"            deprecated_since\u003d\u00272025.2\u0027)"},{"line_number":38,"context_line":"    ),"},{"line_number":39,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":40,"context_line":"        name\u003d\u0027update_bgp_peer\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f02ab1d_1beaebdf","line":37,"range":{"start_line":37,"start_character":30,"end_line":37,"end_character":36},"in_reply_to":"af950052_a8abd92e","updated":"2026-02-06 12:50:23.000000000","message":"Done","commit_id":"a738ecc3aff128aaea27d954946aa45ae4d979ff"}],"neutron_dynamic_routing/policies/bgp_speaker.py":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"0addefd333ed7663f57252e2c4fe44cd69f23e7a","unresolved":true,"context_lines":[{"line_number":34,"context_line":"            name\u003d\u0027create_bgp_speaker\u0027,"},{"line_number":35,"context_line":"            check_str\u003dbase.RULE_ADMIN_ONLY,"},{"line_number":36,"context_line":"            deprecated_reason\u003dDEPRECATED_REASON,"},{"line_number":37,"context_line":"            deprecated_since\u003d\u00272025.2\u0027)"},{"line_number":38,"context_line":"    ),"},{"line_number":39,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":40,"context_line":"        name\u003d\u0027update_bgp_speaker\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"d1c9d859_648b42eb","line":37,"range":{"start_line":37,"start_character":30,"end_line":37,"end_character":36},"updated":"2026-02-03 18:20:56.000000000","message":"```suggestion\n            deprecated_since\u003d\u00272026.1\u0027)\n```","commit_id":"a738ecc3aff128aaea27d954946aa45ae4d979ff"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6e92432d759bb7d355973ed18d9be6c36cffc371","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            name\u003d\u0027create_bgp_speaker\u0027,"},{"line_number":35,"context_line":"            check_str\u003dbase.RULE_ADMIN_ONLY,"},{"line_number":36,"context_line":"            deprecated_reason\u003dDEPRECATED_REASON,"},{"line_number":37,"context_line":"            deprecated_since\u003d\u00272025.2\u0027)"},{"line_number":38,"context_line":"    ),"},{"line_number":39,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":40,"context_line":"        name\u003d\u0027update_bgp_speaker\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3e0569cb_28f5ba9a","line":37,"range":{"start_line":37,"start_character":30,"end_line":37,"end_character":36},"in_reply_to":"d1c9d859_648b42eb","updated":"2026-02-06 12:50:23.000000000","message":"Done","commit_id":"a738ecc3aff128aaea27d954946aa45ae4d979ff"}],"neutron_dynamic_routing/tests/unit/policies/test_bgp_dragent.py":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"8226d2b808d572eb30ff40e43ce0f247ecfeffac","unresolved":true,"context_lines":[{"line_number":112,"context_line":"                self.context, \u0027remove_bgp_speaker_from_dragent\u0027, self.target))"},{"line_number":113,"context_line":"        self.assertTrue("},{"line_number":114,"context_line":"            policy.enforce("},{"line_number":115,"context_line":"                self.context, \u0027remve_bgp_speaker_from_dragent\u0027,"},{"line_number":116,"context_line":"                self.alt_target))"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def test_list_bgp_speaker_on_dragent(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bd8603e4_80762ede","line":115,"range":{"start_line":115,"start_character":31,"end_line":115,"end_character":61},"updated":"2025-06-24 11:23:55.000000000","message":"```suggestion\n                self.context, \u0027remove_bgp_speaker_from_dragent\u0027,\n```\nhow can the test be passing with this typo? what does it actually test?","commit_id":"f3b34c1ca7120d270224123f2f8befb4e9b5c557"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"501385b2102196c27cc75b9378baa4a263846927","unresolved":true,"context_lines":[{"line_number":112,"context_line":"                self.context, \u0027remove_bgp_speaker_from_dragent\u0027, self.target))"},{"line_number":113,"context_line":"        self.assertTrue("},{"line_number":114,"context_line":"            policy.enforce("},{"line_number":115,"context_line":"                self.context, \u0027remve_bgp_speaker_from_dragent\u0027,"},{"line_number":116,"context_line":"                self.alt_target))"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def test_list_bgp_speaker_on_dragent(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3cc759de_2e78e084","line":115,"range":{"start_line":115,"start_character":31,"end_line":115,"end_character":61},"in_reply_to":"083c2262_e41e744b","updated":"2026-03-10 09:57:27.000000000","message":"I think it just returned true for the action which wasn\u0027t define. This is standard behavior of oslo_policy I think","commit_id":"f3b34c1ca7120d270224123f2f8befb4e9b5c557"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"30e477541d1dd303080a922702d3711fa50f742d","unresolved":true,"context_lines":[{"line_number":112,"context_line":"                self.context, \u0027remove_bgp_speaker_from_dragent\u0027, self.target))"},{"line_number":113,"context_line":"        self.assertTrue("},{"line_number":114,"context_line":"            policy.enforce("},{"line_number":115,"context_line":"                self.context, \u0027remve_bgp_speaker_from_dragent\u0027,"},{"line_number":116,"context_line":"                self.alt_target))"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def test_list_bgp_speaker_on_dragent(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"cd3bac14_40ae0713","line":115,"range":{"start_line":115,"start_character":31,"end_line":115,"end_character":61},"in_reply_to":"bd8603e4_80762ede","updated":"2026-02-02 15:46:23.000000000","message":"+1","commit_id":"f3b34c1ca7120d270224123f2f8befb4e9b5c557"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"8772b13ca576ec402f980db70328493193516a60","unresolved":true,"context_lines":[{"line_number":112,"context_line":"                self.context, \u0027remove_bgp_speaker_from_dragent\u0027, self.target))"},{"line_number":113,"context_line":"        self.assertTrue("},{"line_number":114,"context_line":"            policy.enforce("},{"line_number":115,"context_line":"                self.context, \u0027remve_bgp_speaker_from_dragent\u0027,"},{"line_number":116,"context_line":"                self.alt_target))"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def test_list_bgp_speaker_on_dragent(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"083c2262_e41e744b","line":115,"range":{"start_line":115,"start_character":31,"end_line":115,"end_character":61},"in_reply_to":"cd3bac14_40ae0713","updated":"2026-02-03 17:52:25.000000000","message":"Thanks, and sorry for slow response, I missed this notification...\nYeah, strange that policy.enforce seemingly happily returns True for such typos","commit_id":"f3b34c1ca7120d270224123f2f8befb4e9b5c557"}],"neutron_dynamic_routing/tests/unit/policies/test_bgp_peer.py":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"0addefd333ed7663f57252e2c4fe44cd69f23e7a","unresolved":true,"context_lines":[{"line_number":25,"context_line":"        super().setUp()"},{"line_number":26,"context_line":"        self.target \u003d {"},{"line_number":27,"context_line":"            \u0027project_id\u0027: self.project_id,"},{"line_number":28,"context_line":"            \u0027tenant_id\u0027: self.project_id}"},{"line_number":29,"context_line":"        self.alt_target \u003d {"},{"line_number":30,"context_line":"            \u0027project_id\u0027: self.alt_project_id,"},{"line_number":31,"context_line":"            \u0027tenant_id\u0027: self.alt_project_id}"}],"source_content_type":"text/x-python","patch_set":7,"id":"7be35028_c8f234d1","line":28,"updated":"2026-02-03 18:20:56.000000000","message":"some uses of tenant_id have been cleaned up in the meantime, I wonder whether this is still needed?","commit_id":"a738ecc3aff128aaea27d954946aa45ae4d979ff"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"6e92432d759bb7d355973ed18d9be6c36cffc371","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        super().setUp()"},{"line_number":26,"context_line":"        self.target \u003d {"},{"line_number":27,"context_line":"            \u0027project_id\u0027: self.project_id,"},{"line_number":28,"context_line":"            \u0027tenant_id\u0027: self.project_id}"},{"line_number":29,"context_line":"        self.alt_target \u003d {"},{"line_number":30,"context_line":"            \u0027project_id\u0027: self.alt_project_id,"},{"line_number":31,"context_line":"            \u0027tenant_id\u0027: self.alt_project_id}"}],"source_content_type":"text/x-python","patch_set":7,"id":"0f079189_21a4dc78","line":28,"in_reply_to":"7be35028_c8f234d1","updated":"2026-02-06 12:50:23.000000000","message":"Right, I removed tenant_id, there still some tenant_id reference in some tests, I will push a FUP","commit_id":"a738ecc3aff128aaea27d954946aa45ae4d979ff"}]}
