)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"c643b0ee081637b91983d0ecfdfccd9898587f71","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Get the shared security groups the tenant has access to by making an"},{"line_number":10,"context_line":"additional Neutron API call with the shared filter."},{"line_number":11,"context_line":"https://bugs.launchpad.net/neutron/+bug/1942615"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Depends-On: https://review.opendev.org/c/openstack/neutron/+/811242"},{"line_number":14,"context_line":"Change-Id: I6f2847e89a8e4c32ab7c992d6da229f820c4988d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"39cb692d_830b109d","line":11,"updated":"2021-11-10 12:53:22.000000000","message":"Maybe make this a \"Related-Bug:\" link and also add \"Closes-Bug: 1943969\"","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":28159,"name":"Hang Yang","email":"hangyang@yahooinc.com","username":"hangyang"},"change_message_id":"e509d892ab9f4be22118d60336bd2cc267fc5fb9","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Get the shared security groups the tenant has access to by making an"},{"line_number":10,"context_line":"additional Neutron API call with the shared filter."},{"line_number":11,"context_line":"https://bugs.launchpad.net/neutron/+bug/1942615"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Depends-On: https://review.opendev.org/c/openstack/neutron/+/811242"},{"line_number":14,"context_line":"Change-Id: I6f2847e89a8e4c32ab7c992d6da229f820c4988d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"b0148fc8_bf2027ee","line":11,"in_reply_to":"39cb692d_830b109d","updated":"2021-11-10 21:59:02.000000000","message":"Done","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c689d2b5c0fb2593407730c1bddff2dd7152a8ec","unresolved":true,"context_lines":[{"line_number":10,"context_line":"additional Neutron API call with the shared filter."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Depends-On: https://review.opendev.org/c/openstack/neutron/+/811242"},{"line_number":13,"context_line":"Related-Bug: https://bugs.launchpad.net/neutron/+bug/1942615"},{"line_number":14,"context_line":"Closes-Bug: #1943969"},{"line_number":15,"context_line":"Change-Id: I6f2847e89a8e4c32ab7c992d6da229f820c4988d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"b9556546_6193ac69","line":13,"range":{"start_line":13,"start_character":12,"end_line":13,"end_character":60},"updated":"2021-11-15 17:09:35.000000000","message":"this can just be #1942615","commit_id":"53b0ade1e19e780984cd72206807a58fd27a34df"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"979427d89533f1b81837cd91de2d78b090f3b069","unresolved":false,"context_lines":[{"line_number":10,"context_line":"additional Neutron API call with the shared filter."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Depends-On: https://review.opendev.org/c/openstack/neutron/+/811242"},{"line_number":13,"context_line":"Related-Bug: https://bugs.launchpad.net/neutron/+bug/1942615"},{"line_number":14,"context_line":"Closes-Bug: #1943969"},{"line_number":15,"context_line":"Change-Id: I6f2847e89a8e4c32ab7c992d6da229f820c4988d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"2bebfb0a_758945bb","line":13,"range":{"start_line":13,"start_character":12,"end_line":13,"end_character":60},"in_reply_to":"b9556546_6193ac69","updated":"2023-03-15 15:53:12.000000000","message":"Done","commit_id":"53b0ade1e19e780984cd72206807a58fd27a34df"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c689d2b5c0fb2593407730c1bddff2dd7152a8ec","unresolved":true,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Depends-On: https://review.opendev.org/c/openstack/neutron/+/811242"},{"line_number":13,"context_line":"Related-Bug: https://bugs.launchpad.net/neutron/+bug/1942615"},{"line_number":14,"context_line":"Closes-Bug: #1943969"},{"line_number":15,"context_line":"Change-Id: I6f2847e89a8e4c32ab7c992d6da229f820c4988d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"6c49d0ef_44b4495a","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":20},"updated":"2021-11-15 17:09:35.000000000","message":"this should be a linke to the specless blueprint for this feature.\nit is not a bug.","commit_id":"53b0ade1e19e780984cd72206807a58fd27a34df"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"979427d89533f1b81837cd91de2d78b090f3b069","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Depends-On: https://review.opendev.org/c/openstack/neutron/+/811242"},{"line_number":13,"context_line":"Related-Bug: https://bugs.launchpad.net/neutron/+bug/1942615"},{"line_number":14,"context_line":"Closes-Bug: #1943969"},{"line_number":15,"context_line":"Change-Id: I6f2847e89a8e4c32ab7c992d6da229f820c4988d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"50619e73_c037e3df","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":20},"in_reply_to":"6c49d0ef_44b4495a","updated":"2023-03-15 15:53:12.000000000","message":"Done","commit_id":"53b0ade1e19e780984cd72206807a58fd27a34df"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":27256,"name":"Vadim Ponomarev","email":"velizarx@gmail.com","username":"velizarx"},"change_message_id":"627089e8b0b2089dc1acdf71d6ce690d23499574","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e3ec30a1_f54a6ced","updated":"2021-10-15 08:36:39.000000000","message":"FYI: neutron team removes `shared` field from any objects (see discussion https://bugs.launchpad.net/neutron/+bug/1933242/comments/1) and from security group endpoint this field already removed.","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":27256,"name":"Vadim Ponomarev","email":"velizarx@gmail.com","username":"velizarx"},"change_message_id":"42b381b9b25d82f17367ef3cf063a229a7d38277","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ab93077e_ae7a7f1e","updated":"2021-10-15 08:49:27.000000000","message":"Never mind, I see that you already got +2 from Slawek ;)","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"c643b0ee081637b91983d0ecfdfccd9898587f71","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a59edcf6_51272697","updated":"2021-11-10 12:53:22.000000000","message":"Note I\u0027m not a regular reviewer so just making suggestions","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":27256,"name":"Vadim Ponomarev","email":"velizarx@gmail.com","username":"velizarx"},"change_message_id":"c585e6fe477a911a3cb925b5c2780a1bfbb3c942","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b12f2491_3ac9ce83","updated":"2021-11-04 12:18:45.000000000","message":"This fix also related to: https://bugs.launchpad.net/nova/+bug/1943969\nand really needed","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":28159,"name":"Hang Yang","email":"hangyang@yahooinc.com","username":"hangyang"},"change_message_id":"e509d892ab9f4be22118d60336bd2cc267fc5fb9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"2143c982_e2f4cab5","in_reply_to":"a59edcf6_51272697","updated":"2021-11-10 21:59:02.000000000","message":"Thanks for your suggestions! I\u0027ve updated my patch accordingly.","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":28159,"name":"Hang Yang","email":"hangyang@yahooinc.com","username":"hangyang"},"change_message_id":"7d0277e8440f51f07498d969e10d89b809d9f4ad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"426af54a_e15c2179","in_reply_to":"e3ec30a1_f54a6ced","updated":"2021-10-15 16:33:59.000000000","message":"Hi Vadim, the discussion link is about removing the old \"shared\" column from some db models because the column is not needed anymore. The \"shared\" field in Neutron objects will be kept anyway. For example, for SG: https://github.com/openstack/neutron/blob/b78771bbd58d34ff5a4872a666ce25110b5f2bb6/neutron/objects/securitygroup.py#L53. This \"shared\" field is populated based on the RBAC policy entries so does not need its own db column. https://github.com/openstack/neutron/blob/b78771bbd58d34ff5a4872a666ce25110b5f2bb6/neutron/objects/rbac_db.py#L54-L63","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c689d2b5c0fb2593407730c1bddff2dd7152a8ec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"7e674d64_92ed9a57","updated":"2021-11-15 17:09:35.000000000","message":"This appears to be enableing a new feature not fixing a bug.\n\nThe netron changes are modifying the rest api by adding a new extension,and modifies the security group objects definition https://review.opendev.org/c/openstack/neutron/+/811242/7/neutron/objects/securitygroup.py\n\nthis is even declared as a feature in the neutron release notes\nhttps://review.opendev.org/c/openstack/neutron/+/811242/7/releasenotes/notes/add-sg-shared-field-to-response-9ff6b49d36f4af4d.yaml\n\n\nas such at a minium we need a specless blueprint to track this in nova.\n\nwhile this feature has neutron api change there are no nova api chagnes requires to this will not force this to require a nova specs.","commit_id":"53b0ade1e19e780984cd72206807a58fd27a34df"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"0a588a265aa285ff0113d97b470a6f52fb237d87","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"b1777401_8ae5a8e3","updated":"2021-11-11 13:08:40.000000000","message":"thx","commit_id":"53b0ade1e19e780984cd72206807a58fd27a34df"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"979427d89533f1b81837cd91de2d78b090f3b069","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"81749090_07702b6a","updated":"2023-03-15 15:53:12.000000000","message":"I\u0027m not taking ownership of this patch, but I have a friend who would like to see it merged, so I thought I\u0027d push it forward a little. I created a blueprint, and addressed some of the LP related issues. I rebased, and reworked the code to use the same pattern that was introduced in I8058902df167239fa455396d3595a56bcf472b2b.\n\nI haven\u0027t tested this properly, but the unit tests pass.","commit_id":"e621bd3d430c541394b86bf3456c753d065b6f4e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e57331fa2987d4aa66c826f6d9805e5463a5b563","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"ef4b5828_f41e1bbb","in_reply_to":"81749090_07702b6a","updated":"2023-03-15 19:57:17.000000000","message":"ack this would be a good nova/neutron ptg cross project topic.\n\nthanks for updating it.\n\ni guess we will see form tempest if this at least does not break normal usage.","commit_id":"e621bd3d430c541394b86bf3456c753d065b6f4e"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"61b874c7c25a242b83834c446962c95391c5bec7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"f8f0071b_7fc0df02","updated":"2024-04-10 18:24:54.000000000","message":"Hi folks is there any reason why this change didn\u0027t move forward?","commit_id":"42f4f626eb165ef0a010e8f96dc0e5e520e085a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c18286eeb3d1483dc1754329419b3dd71e2d256e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"f308b3ac_e29731ea","updated":"2024-04-11 10:43:56.000000000","message":"i think we hit","commit_id":"42f4f626eb165ef0a010e8f96dc0e5e520e085a7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"afcd8ae1f1303a3e7f75d74e5723b1873b030b22","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"47956886_8b140fd9","in_reply_to":"b1b28944_9f36dce0","updated":"2024-08-05 21:42:13.000000000","message":"Done","commit_id":"42f4f626eb165ef0a010e8f96dc0e5e520e085a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c18286eeb3d1483dc1754329419b3dd71e2d256e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"b1b28944_9f36dce0","in_reply_to":"f8f0071b_7fc0df02","updated":"2024-04-11 10:43:56.000000000","message":"i think we hit feature freeze and it just was not reporpoposed but i dont see why it could not move forward now\n\nwe just need to reappove it for this cycle and review as normal\nbut ya as far as i recall just timing and lack of rebase.\n\nErlon if you want to pick this back up and can fix the trival pep8 issue then it should be fine to review","commit_id":"42f4f626eb165ef0a010e8f96dc0e5e520e085a7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"afcd8ae1f1303a3e7f75d74e5723b1873b030b22","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"e42efc2d_c8ef37b4","updated":"2024-08-05 21:42:13.000000000","message":"I\u0027m going to address the comments here and rebase since we have a customer asking about this, and it if the last in the series for this blueprint.","commit_id":"036a786db4583754d46dc6f6b72b55221f1a7217"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f3877cac0e906494fd21fe54971f6bf457cdb48a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"7061e3fc_6cef9c9c","updated":"2024-09-03 18:40:31.000000000","message":"-1 based on the performance but otherwise this looks reasonable to me\n\nprocedureally this need to be reappvoed in the next nova team meeting but i supprot reapproving it for the epoxY cycle.","commit_id":"0e53e939260f767995c02af3f28da6a5ba1372f3"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7dd3a86e54c6e58034ea0806f2900552f0ebd3eb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"03c67ef3_bab40f1a","updated":"2024-09-01 03:33:18.000000000","message":"recheck","commit_id":"0e53e939260f767995c02af3f28da6a5ba1372f3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"630e287f311f9d7ae76c3d1ad1f00c4105b6dfd3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"35699250_cac951cb","updated":"2024-09-05 10:04:21.000000000","message":"+1 is because we need to reappove this next week in the team meeting then i think im fine wiht upgrading to a +2\n\ni am hopeing we can merge this shortly after rc1 is made and we have create the stable 2024.2 branch","commit_id":"da7ebcc7cbe7e49a89375e2951edb440500e4331"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"5d6d5996c242835244fcc17ee9c2eaae53a2099f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"1f0bc4ea_1565988a","updated":"2024-09-04 12:15:21.000000000","message":"recheck","commit_id":"da7ebcc7cbe7e49a89375e2951edb440500e4331"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"46998428cc66d45a319f24904a73e53f3a2914a7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"a514428c_b2d0148b","updated":"2024-10-09 11:00:12.000000000","message":"I have one question inline.","commit_id":"b930b10504a95ea65b77b3ed89c541207ba9949e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6cfdd4d8ff8e3297ac55408e270ea1f78fa0b3c5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"7f773ed2_9302c06a","updated":"2024-09-05 18:42:01.000000000","message":"recheck unrelated ceph failure","commit_id":"b930b10504a95ea65b77b3ed89c541207ba9949e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8a6552c24230b73ffe54da614fc2c0b02d20911d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"c4e03968_8a4feea1","updated":"2024-09-05 19:44:11.000000000","message":"thanks for the respin.\n\n+2 keeping in mind that this cant merge until after RC1 and reappoval in the next team meeting.","commit_id":"b930b10504a95ea65b77b3ed89c541207ba9949e"},{"author":{"_account_id":29268,"name":"Matthew Heler","email":"matthew.heler@hotmail.com","username":"mheler"},"change_message_id":"395245b52d993e535501a4459e38febad1314e44","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"29f6b21f_83c30d78","updated":"2025-04-01 18:38:39.000000000","message":"Since this patch is merged, I opened a bug report over the regression\nhttps://bugs.launchpad.net/nova/+bug/2105896","commit_id":"95bde8b956d9a63470c95338ef89c14731a949ae"},{"author":{"_account_id":29268,"name":"Matthew Heler","email":"matthew.heler@hotmail.com","username":"mheler"},"change_message_id":"395245b52d993e535501a4459e38febad1314e44","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":13,"id":"abb6658c_cbede302","updated":"2025-04-01 18:38:39.000000000","message":"Since this patch is merged, I opened a bug report over the regression\nhttps://bugs.launchpad.net/nova/+bug/2105896","commit_id":"95bde8b956d9a63470c95338ef89c14731a949ae"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"400ff0bef65982004b5837423918c5e168e470d2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"7944ef27_12689c00","updated":"2024-10-09 15:32:05.000000000","message":"Thanks looks good.","commit_id":"95bde8b956d9a63470c95338ef89c14731a949ae"},{"author":{"_account_id":29268,"name":"Matthew Heler","email":"matthew.heler@hotmail.com","username":"mheler"},"change_message_id":"a84209a6325db7f30a5ca93b56638f018759e70b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"726f7482_657526e4","updated":"2025-03-21 14:19:19.000000000","message":"This introduced a regression where if one or more security groups share the same name, nova will produce this error upon VM creation\n\nnova.exception.NoUniqueMatch: Multiple security groups found matching \u0027allow-ssh-icmp\u0027. Use an ID to be more specific.","commit_id":"95bde8b956d9a63470c95338ef89c14731a949ae"}],"nova/network/constants.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f3877cac0e906494fd21fe54971f6bf457cdb48a","unresolved":false,"context_lines":[{"line_number":36,"context_line":"SUBSTR_PORT_FILTERING \u003d \u0027ip-substring-filtering\u0027"},{"line_number":37,"context_line":"SEGMENT \u003d \u0027segment\u0027"},{"line_number":38,"context_line":"RESOURCE_REQUEST_GROUPS \u003d \u0027port-resource-request-groups\u0027"},{"line_number":39,"context_line":"SG_SHARED_FILTER \u003d \"security-groups-shared-filtering\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"# Third-party extensions"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"89748e7b_94d9c554","line":39,"updated":"2024-09-03 18:40:31.000000000","message":"this is indeed the correct alas to use\nhttps://github.com/openstack/neutron-lib/blob/8fc2cc6f4d913a07d7ea3f4fd8f165e980ec9db8/neutron_lib/api/definitions/security_groups_shared_filtering.py#L19","commit_id":"0e53e939260f767995c02af3f28da6a5ba1372f3"}],"nova/network/neutron.py":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"c643b0ee081637b91983d0ecfdfccd9898587f71","unresolved":true,"context_lines":[{"line_number":823,"context_line":"            else:"},{"line_number":824,"context_line":"                search_opts \u003d {\u0027tenant_id\u0027: instance.project_id}"},{"line_number":825,"context_line":"                user_security_groups \u003d neutron.list_security_groups("},{"line_number":826,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"},{"line_number":827,"context_line":"            for security_group in security_groups:"},{"line_number":828,"context_line":"                name_match \u003d None"},{"line_number":829,"context_line":"                uuid_match \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f8385d9_1a7e045c","line":826,"updated":"2021-11-10 12:53:22.000000000","message":"I wonder whether this may incur too much overhead on larger deployments. Another implementation option would be to only query for specific SGs when they are not found in the first list.","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"ee42e095e8d279e29dbaaa66a35a08cbfe651d80","unresolved":true,"context_lines":[{"line_number":823,"context_line":"            else:"},{"line_number":824,"context_line":"                search_opts \u003d {\u0027tenant_id\u0027: instance.project_id}"},{"line_number":825,"context_line":"                user_security_groups \u003d neutron.list_security_groups("},{"line_number":826,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"},{"line_number":827,"context_line":"            for security_group in security_groups:"},{"line_number":828,"context_line":"                name_match \u003d None"},{"line_number":829,"context_line":"                uuid_match \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"1434adb1_55dc29eb","line":826,"in_reply_to":"02b15052_b8568164","updated":"2023-03-16 09:13:45.000000000","message":"True. I did think of an optimisation here also to avoid the double request in most cases.\n\n* query SGs with shared\u003dFalse\n* try to match all requested SGs\n* if any SG not found, query SGs with shared\u003dTrue and add to list\n* try to match all requested SGs\n\nIt would involve more of a restructure of the code, but probably worthwhile.","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"e53b18681b17ad71d5d8731868998cbd94bd6c59","unresolved":true,"context_lines":[{"line_number":823,"context_line":"            else:"},{"line_number":824,"context_line":"                search_opts \u003d {\u0027tenant_id\u0027: instance.project_id}"},{"line_number":825,"context_line":"                user_security_groups \u003d neutron.list_security_groups("},{"line_number":826,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"},{"line_number":827,"context_line":"            for security_group in security_groups:"},{"line_number":828,"context_line":"                name_match \u003d None"},{"line_number":829,"context_line":"                uuid_match \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"5d4cb76b_b3731d39","line":826,"in_reply_to":"1434adb1_55dc29eb","updated":"2023-03-16 09:14:31.000000000","message":"Looking back, frickler suggested this months ago \u003cfacepalm\u003e","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a8d3dfc033a7cefd66d82f76b1c70ecae33836ed","unresolved":true,"context_lines":[{"line_number":823,"context_line":"            else:"},{"line_number":824,"context_line":"                search_opts \u003d {\u0027tenant_id\u0027: instance.project_id}"},{"line_number":825,"context_line":"                user_security_groups \u003d neutron.list_security_groups("},{"line_number":826,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"},{"line_number":827,"context_line":"            for security_group in security_groups:"},{"line_number":828,"context_line":"                name_match \u003d None"},{"line_number":829,"context_line":"                uuid_match \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"c746f2f6_0f4b9a05","line":826,"in_reply_to":"5d4cb76b_b3731d39","updated":"2024-06-04 16:20:28.000000000","message":"look like my code simplifcatgion change and mark\u0027s/frickler\u0027s optimiatation are still not adressed in the current patch\n\nare we expecting a rebase to adress this or a follow up patch.\n\nim fine with either approch but i would like a responce on this comment thread to conrim one way or anohter.","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":28159,"name":"Hang Yang","email":"hangyang@yahooinc.com","username":"hangyang"},"change_message_id":"e509d892ab9f4be22118d60336bd2cc267fc5fb9","unresolved":true,"context_lines":[{"line_number":823,"context_line":"            else:"},{"line_number":824,"context_line":"                search_opts \u003d {\u0027tenant_id\u0027: instance.project_id}"},{"line_number":825,"context_line":"                user_security_groups \u003d neutron.list_security_groups("},{"line_number":826,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"},{"line_number":827,"context_line":"            for security_group in security_groups:"},{"line_number":828,"context_line":"                name_match \u003d None"},{"line_number":829,"context_line":"                uuid_match \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"a8a71276_c95a60a7","line":826,"in_reply_to":"7f8385d9_1a7e045c","updated":"2021-11-10 21:59:02.000000000","message":"I don\u0027t think making an additional request with shared\u003dTrue will have much impact on performance. If we try to look up SGs individually if they are not in the first list then it could take much more API requests.","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"afcd8ae1f1303a3e7f75d74e5723b1873b030b22","unresolved":false,"context_lines":[{"line_number":823,"context_line":"            else:"},{"line_number":824,"context_line":"                search_opts \u003d {\u0027tenant_id\u0027: instance.project_id}"},{"line_number":825,"context_line":"                user_security_groups \u003d neutron.list_security_groups("},{"line_number":826,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"},{"line_number":827,"context_line":"            for security_group in security_groups:"},{"line_number":828,"context_line":"                name_match \u003d None"},{"line_number":829,"context_line":"                uuid_match \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"09f2049b_156cedf5","line":826,"in_reply_to":"946efabb_22b4ccdb","updated":"2024-08-05 21:42:13.000000000","message":"Done","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ecfdbcfafe9a76a3510e3068ac368e6245d0b4a6","unresolved":true,"context_lines":[{"line_number":823,"context_line":"            else:"},{"line_number":824,"context_line":"                search_opts \u003d {\u0027tenant_id\u0027: instance.project_id}"},{"line_number":825,"context_line":"                user_security_groups \u003d neutron.list_security_groups("},{"line_number":826,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"},{"line_number":827,"context_line":"            for security_group in security_groups:"},{"line_number":828,"context_line":"                name_match \u003d None"},{"line_number":829,"context_line":"                uuid_match \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"02b15052_b8568164","line":826,"in_reply_to":"a8a71276_c95a60a7","updated":"2023-03-15 20:01:57.000000000","message":"this is overly complicate by the way\n\n            if self.has_sg_shared_filter_extension(client\u003dneutron):\n                search_opts \u003d {\u0027tenant_id\u0027: instance.project_id,\n                               \u0027shared\u0027: False}\n                user_security_groups \u003d neutron.list_security_groups(\n                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)\n                # NOTE(hangyang): Make another request to get the RBAC shared\n                # SGs accessible to the tenant\n                search_opts \u003d {\u0027shared\u0027: True}\n                user_security_groups +\u003d neutron.list_security_groups(\n                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)\n            else:\n                search_opts \u003d {\u0027tenant_id\u0027: instance.project_id}\n                user_security_groups \u003d neutron.list_security_groups(\n                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)\n                    \nshould be \n\n              search_opts \u003d {\u0027tenant_id\u0027: instance.project_id}\n                user_security_groups \u003d neutron.list_security_groups(\n                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)\n            if self.has_sg_shared_filter_extension(client\u003dneutron):\n                # NOTE(hangyang): Make another request to get the RBAC shared\n                # SGs accessible to the tenant\n                search_opts \u003d {\u0027shared\u0027: True}\n                user_security_groups +\u003d neutron.list_security_groups(\n                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3fb806719be033e5974b35cfc8130413852aea2b","unresolved":true,"context_lines":[{"line_number":823,"context_line":"            else:"},{"line_number":824,"context_line":"                search_opts \u003d {\u0027tenant_id\u0027: instance.project_id}"},{"line_number":825,"context_line":"                user_security_groups \u003d neutron.list_security_groups("},{"line_number":826,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"},{"line_number":827,"context_line":"            for security_group in security_groups:"},{"line_number":828,"context_line":"                name_match \u003d None"},{"line_number":829,"context_line":"                uuid_match \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"946efabb_22b4ccdb","line":826,"in_reply_to":"c746f2f6_0f4b9a05","updated":"2024-07-03 13:33:20.000000000","message":"Hi - just wondering if there is going to be an update here? This seems to be the last patch to complete the blueprint. Thanks.","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c689d2b5c0fb2593407730c1bddff2dd7152a8ec","unresolved":true,"context_lines":[{"line_number":811,"context_line":"            # got many security groups"},{"line_number":812,"context_line":"            sg_fields \u003d [\u0027id\u0027, \u0027name\u0027]"},{"line_number":813,"context_line":"            if self._has_sg_shared_filter_extension(neutron):"},{"line_number":814,"context_line":"                search_opts \u003d {\u0027tenant_id\u0027: instance.project_id,"},{"line_number":815,"context_line":"                               \u0027shared\u0027: False}"},{"line_number":816,"context_line":"                user_security_groups \u003d neutron.list_security_groups("},{"line_number":817,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"},{"line_number":818,"context_line":"                # NOTE(hangyang): Make another request to get the RBAC shared"},{"line_number":819,"context_line":"                # SGs accessible to the tenant"},{"line_number":820,"context_line":"                search_opts \u003d {\u0027shared\u0027: True}"},{"line_number":821,"context_line":"                user_security_groups +\u003d neutron.list_security_groups("},{"line_number":822,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"},{"line_number":823,"context_line":"            else:"},{"line_number":824,"context_line":"                search_opts \u003d {\u0027tenant_id\u0027: instance.project_id}"},{"line_number":825,"context_line":"                user_security_groups \u003d neutron.list_security_groups("}],"source_content_type":"text/x-python","patch_set":3,"id":"6954e488_0d70cd6e","line":822,"range":{"start_line":814,"start_character":2,"end_line":822,"end_character":75},"updated":"2021-11-15 17:09:35.000000000","message":"its too bad we cant make one request to get both.\n\ni think that is a design defect in the new neutron exteions.","commit_id":"53b0ade1e19e780984cd72206807a58fd27a34df"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"afcd8ae1f1303a3e7f75d74e5723b1873b030b22","unresolved":false,"context_lines":[{"line_number":811,"context_line":"            # got many security groups"},{"line_number":812,"context_line":"            sg_fields \u003d [\u0027id\u0027, \u0027name\u0027]"},{"line_number":813,"context_line":"            if self._has_sg_shared_filter_extension(neutron):"},{"line_number":814,"context_line":"                search_opts \u003d {\u0027tenant_id\u0027: instance.project_id,"},{"line_number":815,"context_line":"                               \u0027shared\u0027: False}"},{"line_number":816,"context_line":"                user_security_groups \u003d neutron.list_security_groups("},{"line_number":817,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"},{"line_number":818,"context_line":"                # NOTE(hangyang): Make another request to get the RBAC shared"},{"line_number":819,"context_line":"                # SGs accessible to the tenant"},{"line_number":820,"context_line":"                search_opts \u003d {\u0027shared\u0027: True}"},{"line_number":821,"context_line":"                user_security_groups +\u003d neutron.list_security_groups("},{"line_number":822,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"},{"line_number":823,"context_line":"            else:"},{"line_number":824,"context_line":"                search_opts \u003d {\u0027tenant_id\u0027: instance.project_id}"},{"line_number":825,"context_line":"                user_security_groups \u003d neutron.list_security_groups("}],"source_content_type":"text/x-python","patch_set":3,"id":"5993b894_3cc27c34","line":822,"range":{"start_line":814,"start_character":2,"end_line":822,"end_character":75},"in_reply_to":"6954e488_0d70cd6e","updated":"2024-08-05 21:42:13.000000000","message":"Yeah, but we can\u0027t fix that here so I\u0027ll marked resolved.","commit_id":"53b0ade1e19e780984cd72206807a58fd27a34df"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4396ff044570e17ba1eabc074df45880cc1089f5","unresolved":false,"context_lines":[{"line_number":855,"context_line":"                security_group_ids.append(uuid_match)"},{"line_number":856,"context_line":"            elif raise_if_sg_not_found:"},{"line_number":857,"context_line":"                raise exception.SecurityGroupNotFound("},{"line_number":858,"context_line":"                    security_group_id\u003dsecurity_group)"},{"line_number":859,"context_line":""},{"line_number":860,"context_line":"        return security_group_ids"},{"line_number":861,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5a141c51_4dfab989","line":858,"updated":"2024-08-29 13:12:06.000000000","message":"okay, you\u0027re keeping the existing behaviour if the new extension is not enabled.","commit_id":"2fb2ed8e2229577d4ebed91eeb336eccda764711"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4396ff044570e17ba1eabc074df45880cc1089f5","unresolved":false,"context_lines":[{"line_number":857,"context_line":"                raise exception.SecurityGroupNotFound("},{"line_number":858,"context_line":"                    security_group_id\u003dsecurity_group)"},{"line_number":859,"context_line":""},{"line_number":860,"context_line":"        return security_group_ids"},{"line_number":861,"context_line":""},{"line_number":862,"context_line":"    def _process_security_groups(self, instance, neutron, security_groups):"},{"line_number":863,"context_line":"        \"\"\"Processes and validates requested security groups for allocation."}],"source_content_type":"text/x-python","patch_set":9,"id":"a74b7fd3_47cb5ebe","line":860,"range":{"start_line":860,"start_character":15,"end_line":860,"end_character":33},"updated":"2024-08-29 13:12:06.000000000","message":"note for reviewers : in the case of the extension being enabled and no SGs, we would then return an empty list","commit_id":"2fb2ed8e2229577d4ebed91eeb336eccda764711"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4396ff044570e17ba1eabc074df45880cc1089f5","unresolved":true,"context_lines":[{"line_number":899,"context_line":"            # any shared security groups."},{"line_number":900,"context_line":"            security_group_ids \u003d self._get_security_group_ids("},{"line_number":901,"context_line":"                security_groups, user_security_groups,"},{"line_number":902,"context_line":"                raise_if_sg_not_found\u003d(not sg_filter_ext))"},{"line_number":903,"context_line":""},{"line_number":904,"context_line":"            if self.has_sg_shared_filter_extension(client\u003dneutron):"},{"line_number":905,"context_line":"                # NOTE(hangyang): Make another request to get the RBAC shared"}],"source_content_type":"text/x-python","patch_set":9,"id":"2799b945_a557d802","line":902,"updated":"2024-08-29 13:12:06.000000000","message":"providing or not an exception depending on a flag is a bit of an antipattern to me as it can be errorprone for other calls. I\u0027d rather prefer the caller to wrap the exception raised by _get_security_group_ids() and say in a comment why this is meaningless","commit_id":"2fb2ed8e2229577d4ebed91eeb336eccda764711"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"fa2743c066dcd05f5efe1d9b44441c5f418a5ce2","unresolved":false,"context_lines":[{"line_number":899,"context_line":"            # any shared security groups."},{"line_number":900,"context_line":"            security_group_ids \u003d self._get_security_group_ids("},{"line_number":901,"context_line":"                security_groups, user_security_groups,"},{"line_number":902,"context_line":"                raise_if_sg_not_found\u003d(not sg_filter_ext))"},{"line_number":903,"context_line":""},{"line_number":904,"context_line":"            if self.has_sg_shared_filter_extension(client\u003dneutron):"},{"line_number":905,"context_line":"                # NOTE(hangyang): Make another request to get the RBAC shared"}],"source_content_type":"text/x-python","patch_set":9,"id":"e13c3b18_7b89d393","line":902,"in_reply_to":"2799b945_a557d802","updated":"2024-08-30 20:53:29.000000000","message":"Done","commit_id":"2fb2ed8e2229577d4ebed91eeb336eccda764711"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4396ff044570e17ba1eabc074df45880cc1089f5","unresolved":true,"context_lines":[{"line_number":901,"context_line":"                security_groups, user_security_groups,"},{"line_number":902,"context_line":"                raise_if_sg_not_found\u003d(not sg_filter_ext))"},{"line_number":903,"context_line":""},{"line_number":904,"context_line":"            if self.has_sg_shared_filter_extension(client\u003dneutron):"},{"line_number":905,"context_line":"                # NOTE(hangyang): Make another request to get the RBAC shared"},{"line_number":906,"context_line":"                # SGs accessible to the tenant"},{"line_number":907,"context_line":"                search_opts \u003d {\u0027shared\u0027: True}"}],"source_content_type":"text/x-python","patch_set":9,"id":"37e2d19e_b3b3c3f1","line":904,"updated":"2024-08-29 13:12:06.000000000","message":"is there any reason why you need to check twice whether the extension is enabled ? \nCouldn\u0027t you just reuse sg_filter_ext var ?","commit_id":"2fb2ed8e2229577d4ebed91eeb336eccda764711"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"fa2743c066dcd05f5efe1d9b44441c5f418a5ce2","unresolved":false,"context_lines":[{"line_number":901,"context_line":"                security_groups, user_security_groups,"},{"line_number":902,"context_line":"                raise_if_sg_not_found\u003d(not sg_filter_ext))"},{"line_number":903,"context_line":""},{"line_number":904,"context_line":"            if self.has_sg_shared_filter_extension(client\u003dneutron):"},{"line_number":905,"context_line":"                # NOTE(hangyang): Make another request to get the RBAC shared"},{"line_number":906,"context_line":"                # SGs accessible to the tenant"},{"line_number":907,"context_line":"                search_opts \u003d {\u0027shared\u0027: True}"}],"source_content_type":"text/x-python","patch_set":9,"id":"cd7cfb82_1e9a7147","line":904,"in_reply_to":"37e2d19e_b3b3c3f1","updated":"2024-08-30 20:53:29.000000000","message":"Done","commit_id":"2fb2ed8e2229577d4ebed91eeb336eccda764711"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4396ff044570e17ba1eabc074df45880cc1089f5","unresolved":true,"context_lines":[{"line_number":903,"context_line":""},{"line_number":904,"context_line":"            if self.has_sg_shared_filter_extension(client\u003dneutron):"},{"line_number":905,"context_line":"                # NOTE(hangyang): Make another request to get the RBAC shared"},{"line_number":906,"context_line":"                # SGs accessible to the tenant"},{"line_number":907,"context_line":"                search_opts \u003d {\u0027shared\u0027: True}"},{"line_number":908,"context_line":"                user_security_groups +\u003d neutron.list_security_groups("},{"line_number":909,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"0f1b5356_8d1b27ef","line":906,"updated":"2024-08-29 13:12:06.000000000","message":"any reason why we need an extra roundtrip to Neutron ? Couldn\u0027t we do a call to Neutron with or without the shared query string parameter depending on the extension state ?","commit_id":"2fb2ed8e2229577d4ebed91eeb336eccda764711"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"05136fe9f9ae6a99bc64bf9daf9fca88d1df9c2b","unresolved":true,"context_lines":[{"line_number":903,"context_line":""},{"line_number":904,"context_line":"            if self.has_sg_shared_filter_extension(client\u003dneutron):"},{"line_number":905,"context_line":"                # NOTE(hangyang): Make another request to get the RBAC shared"},{"line_number":906,"context_line":"                # SGs accessible to the tenant"},{"line_number":907,"context_line":"                search_opts \u003d {\u0027shared\u0027: True}"},{"line_number":908,"context_line":"                user_security_groups +\u003d neutron.list_security_groups("},{"line_number":909,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7bc67de1_62e2381f","line":906,"in_reply_to":"0f1b5356_8d1b27ef","updated":"2024-08-29 13:25:39.000000000","message":"we discussed this before\n\nhttps://review.opendev.org/c/openstack/nova/+/811521/comment/6954e488_0d70cd6e/\n\nwe cant do this in a singel query\nwe would have to chagne the neturon api","commit_id":"2fb2ed8e2229577d4ebed91eeb336eccda764711"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"fa2743c066dcd05f5efe1d9b44441c5f418a5ce2","unresolved":false,"context_lines":[{"line_number":903,"context_line":""},{"line_number":904,"context_line":"            if self.has_sg_shared_filter_extension(client\u003dneutron):"},{"line_number":905,"context_line":"                # NOTE(hangyang): Make another request to get the RBAC shared"},{"line_number":906,"context_line":"                # SGs accessible to the tenant"},{"line_number":907,"context_line":"                search_opts \u003d {\u0027shared\u0027: True}"},{"line_number":908,"context_line":"                user_security_groups +\u003d neutron.list_security_groups("},{"line_number":909,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"8acc2206_c009c66a","line":906,"in_reply_to":"7bc67de1_62e2381f","updated":"2024-08-30 20:53:29.000000000","message":"Done","commit_id":"2fb2ed8e2229577d4ebed91eeb336eccda764711"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f3877cac0e906494fd21fe54971f6bf457cdb48a","unresolved":true,"context_lines":[{"line_number":817,"context_line":"            security_groups \u003d []"},{"line_number":818,"context_line":"        return security_groups"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def _get_security_group_ids(self, security_groups, user_security_groups):"},{"line_number":821,"context_line":"        \"\"\"Processes requested security groups based on existing user groups"},{"line_number":822,"context_line":""},{"line_number":823,"context_line":"        :param security_groups: list of security group names or IDs"}],"source_content_type":"text/x-python","patch_set":10,"id":"86e38036_119ddcf4","line":820,"updated":"2024-09-03 18:40:31.000000000","message":"so my instinct are sreaming at me that doing this with a nested for and multiple nested ifs is not the right way to do this. i guessed it was O(n^2) time complexity\n\nmy headache has mostly gone away but not fully so i asked copilot to help\nby refactorign it to remove the nested loops and use sets instead\n\nhttps://paste.opendev.org/show/bF48Td1z6WRZXedHkDYg/\n\nOriginal version time: 0.005307334940880537\nRefactored version time: 0.003771705087274313\nSpeedup: 1.41x\n```\n# Analysis of Big O Time Complexity\n\n## Summary\n- **Original Version**: \\( O(n \\times m) \\)\n- **Refactored Version**: \\( O(m + n) \\)\n\nThe refactored version is more efficient, especially when both `n` and `m` are large.\n```\n\nso the orginal version in this patch is actully O(n*m)\nwher n is the iterations over the outer loop and m is the inner loop.\n\n\n\ni increased the number of security groups and tried hand optimisting it to use a dict and set instead of two dicts \n\nhttps://paste.opendev.org/show/bu9mCOTvgYjlLFORr3sM/\n\nand succeeded in making it slightly slower so \n\n\ni think the refactored version with some comments is much clearer.\n\n```\n# Refactored version\ndef _get_security_group_ids(security_groups, user_security_groups):\n    # Initialize two dictionaries to map security group names and IDs to their corresponding IDs\n    name_to_id \u003d {}\n    # NOTE(sean-k-mooney): using a dict here instead of a set is faster\n    # probably due to l1 code cache misses due to the introduction\n    # of set lookup in addition to dict lookups making the branch prediction\n    # for the second for loop less reliable.\n    id_to_id \u003d {}\n\n    # Populate the dictionaries with user security groups\n    for user_security_group in user_security_groups:\n        name \u003d user_security_group[\u0027name\u0027]\n        sg_id \u003d user_security_group[\u0027id\u0027]\n        \n        # Check for duplicate names and raise an exception if found\n        if name in name_to_id:\n            raise Exception(\"NoUniqueMatch\")\n        # Map the name to its corresponding ID\n        name_to_id[name] \u003d sg_id\n        # Map the ID to itself for easy lookup\n        id_to_id[sg_id] \u003d sg_id\n\n    # Initialize an empty list to store the resulting security group IDs\n    security_group_ids \u003d []\n    \n    # Iterate over the requested security groups\n    for security_group in security_groups:\n        # Check if the security group is in the name-to-ID dictionary\n        # as if a user names the security group the same as\n        # another\u0027s security groups uuid, the name takes priority.\n        if security_group in name_to_id:\n            security_group_ids.append(name_to_id[security_group])\n        # Check if the security group is in the ID-to-ID dictionary\n        elif security_group in id_to_id:\n            security_group_ids.append(id_to_id[security_group])\n        # Raise an exception if the security group is not found in either dictionary\n        else:\n            raise Exception(\"SecurityGroupNotFound\")\n\n    # Return the list of security group IDs\n    return security_group_ids\n```\n\nit is simpler to read and faster as the number of security groups grows","commit_id":"0e53e939260f767995c02af3f28da6a5ba1372f3"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"87d16298342c3664c84f46541e91068f2eb3f14f","unresolved":false,"context_lines":[{"line_number":817,"context_line":"            security_groups \u003d []"},{"line_number":818,"context_line":"        return security_groups"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def _get_security_group_ids(self, security_groups, user_security_groups):"},{"line_number":821,"context_line":"        \"\"\"Processes requested security groups based on existing user groups"},{"line_number":822,"context_line":""},{"line_number":823,"context_line":"        :param security_groups: list of security group names or IDs"}],"source_content_type":"text/x-python","patch_set":10,"id":"ca30fba2_e78ae09f","line":820,"in_reply_to":"86e38036_119ddcf4","updated":"2024-09-03 20:54:03.000000000","message":"Done","commit_id":"0e53e939260f767995c02af3f28da6a5ba1372f3"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8c60cd4092367c5d814a4407c3a274b52c18c882","unresolved":false,"context_lines":[{"line_number":919,"context_line":"                if not sg_filter_ext:"},{"line_number":920,"context_line":"                    raise"},{"line_number":921,"context_line":""},{"line_number":922,"context_line":"            if sg_filter_ext:"},{"line_number":923,"context_line":"                # NOTE(hangyang): Make another request to get the RBAC shared"},{"line_number":924,"context_line":"                # SGs accessible to the tenant"},{"line_number":925,"context_line":"                search_opts \u003d {\u0027shared\u0027: True}"}],"source_content_type":"text/x-python","patch_set":12,"id":"9c968360_e56b372c","line":922,"updated":"2024-10-09 14:35:45.000000000","message":"It would really just be removing this line and updating the test, let me do that.","commit_id":"b930b10504a95ea65b77b3ed89c541207ba9949e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"400ff0bef65982004b5837423918c5e168e470d2","unresolved":false,"context_lines":[{"line_number":919,"context_line":"                if not sg_filter_ext:"},{"line_number":920,"context_line":"                    raise"},{"line_number":921,"context_line":""},{"line_number":922,"context_line":"            if sg_filter_ext:"},{"line_number":923,"context_line":"                # NOTE(hangyang): Make another request to get the RBAC shared"},{"line_number":924,"context_line":"                # SGs accessible to the tenant"},{"line_number":925,"context_line":"                search_opts \u003d {\u0027shared\u0027: True}"}],"source_content_type":"text/x-python","patch_set":12,"id":"e744ae34_3d200a48","line":922,"in_reply_to":"9c968360_e56b372c","updated":"2024-10-09 15:32:05.000000000","message":"yeah that is fair.","commit_id":"b930b10504a95ea65b77b3ed89c541207ba9949e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a2783df19dd5ee8a080f0ef7fdf11c9243c35327","unresolved":false,"context_lines":[{"line_number":919,"context_line":"                if not sg_filter_ext:"},{"line_number":920,"context_line":"                    raise"},{"line_number":921,"context_line":""},{"line_number":922,"context_line":"            if sg_filter_ext:"},{"line_number":923,"context_line":"                # NOTE(hangyang): Make another request to get the RBAC shared"},{"line_number":924,"context_line":"                # SGs accessible to the tenant"},{"line_number":925,"context_line":"                search_opts \u003d {\u0027shared\u0027: True}"}],"source_content_type":"text/x-python","patch_set":12,"id":"9643c336_8b0efce5","line":922,"in_reply_to":"e744ae34_3d200a48","updated":"2024-10-09 16:38:07.000000000","message":"that was a lot simpler then i was expecting.","commit_id":"b930b10504a95ea65b77b3ed89c541207ba9949e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"46998428cc66d45a319f24904a73e53f3a2914a7","unresolved":true,"context_lines":[{"line_number":927,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"                security_group_ids \u003d self._get_security_group_ids("},{"line_number":930,"context_line":"                    security_groups, user_security_groups)"},{"line_number":931,"context_line":""},{"line_number":932,"context_line":"        return security_group_ids"},{"line_number":933,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"67c48f09_494a6436","line":930,"updated":"2024-10-09 11:00:12.000000000","message":"Do we need to do this query even if the first query was able to find all the requested groups?\n\nWould it be enough to do this query if the first one fails with SecurityGroupNotFound?","commit_id":"b930b10504a95ea65b77b3ed89c541207ba9949e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a31e5f75157893bc762284b686f3f4c8758ed4e9","unresolved":true,"context_lines":[{"line_number":927,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"                security_group_ids \u003d self._get_security_group_ids("},{"line_number":930,"context_line":"                    security_groups, user_security_groups)"},{"line_number":931,"context_line":""},{"line_number":932,"context_line":"        return security_group_ids"},{"line_number":933,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ad838403_5eea326f","line":930,"in_reply_to":"55674433_e5518fab","updated":"2024-10-09 13:53:59.000000000","message":"my point is if the call at L913 succeeds that means all the requested groups in `security_groups` found by the first query and therefor no need for the second neutron query at all. \n\ne.g. something like:\n\n```\n            try:\n                security_group_ids \u003d self._get_security_group_ids(\n                    security_groups, user_security_groups)\n            except exception.SecurityGroupNotFound:\n                # Trigger a raise if the shared filter extension is not loaded,\n                # else we will trigger on the second call below when we pass\n                # any shared security groups.\n                if not sg_filter_ext:\n                    raise\n                else:\n                    # NOTE(hangyang): Make another request to get the RBAC shared\n                    # SGs accessible to the tenant\n                    search_opts \u003d {\u0027shared\u0027: True}\n                    user_security_groups +\u003d neutron.list_security_groups(\n                        fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)\n\n                    security_group_ids \u003d self._get_security_group_ids(\n                        security_groups, user_security_groups)\n```","commit_id":"b930b10504a95ea65b77b3ed89c541207ba9949e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e2ce894c460d528ec78c6e48b258736401086f67","unresolved":true,"context_lines":[{"line_number":927,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"                security_group_ids \u003d self._get_security_group_ids("},{"line_number":930,"context_line":"                    security_groups, user_security_groups)"},{"line_number":931,"context_line":""},{"line_number":932,"context_line":"        return security_group_ids"},{"line_number":933,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"df14256b_720c3c73","line":930,"in_reply_to":"67c48f09_494a6436","updated":"2024-10-09 11:09:51.000000000","message":"the first query returns only the groups in your project and the second query returns only the ones shared with form outside your project.\n\nif i understand correectly your asking, \"if security groups in the boot request are all contianed within the set returned by the first query can we skip the second one\" i dont see why not\n\nwe should be able to early out in that case.\n\nthat is an optimaition we could do as a follow up but im ok with including it in this patch.\n\ndo we want to do it as a FUP patch after or would you prefer to respin?","commit_id":"b930b10504a95ea65b77b3ed89c541207ba9949e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8c60cd4092367c5d814a4407c3a274b52c18c882","unresolved":false,"context_lines":[{"line_number":927,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"                security_group_ids \u003d self._get_security_group_ids("},{"line_number":930,"context_line":"                    security_groups, user_security_groups)"},{"line_number":931,"context_line":""},{"line_number":932,"context_line":"        return security_group_ids"},{"line_number":933,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ed942896_d42828c3","line":930,"in_reply_to":"ad838403_5eea326f","updated":"2024-10-09 14:35:45.000000000","message":"Done","commit_id":"b930b10504a95ea65b77b3ed89c541207ba9949e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7d4715e9798be801471e16d767714312df9ebb6b","unresolved":true,"context_lines":[{"line_number":927,"context_line":"                    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)"},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"                security_group_ids \u003d self._get_security_group_ids("},{"line_number":930,"context_line":"                    security_groups, user_security_groups)"},{"line_number":931,"context_line":""},{"line_number":932,"context_line":"        return security_group_ids"},{"line_number":933,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"55674433_e5518fab","line":930,"in_reply_to":"df14256b_720c3c73","updated":"2024-10-09 13:41:54.000000000","message":"So to make sure I understand, this would be the case where there were no additional shared SGs returned. So could change this to something like:\n\nsearch_opts \u003d {\u0027shared\u0027: True}\nshared_sgs \u003d neutron.list_security_groups(\n    fields\u003dsg_fields, **search_opts).get(\u0027security_groups\u0027)\nif shared_sgs:\n    security_group_ids \u003d self._get_security_group_ids(\n        security_groups, user_security_groups + shared_sgs)\n\nIf that looks right to Sean I can re-spin or do a follow-up.","commit_id":"b930b10504a95ea65b77b3ed89c541207ba9949e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5446ab32c477c25339e454b4268702e0e91aa21e","unresolved":true,"context_lines":[{"line_number":830,"context_line":"        \"\"\""},{"line_number":831,"context_line":"        # Initialize two dictionaries to map security group names and IDs to"},{"line_number":832,"context_line":"        # their corresponding IDs"},{"line_number":833,"context_line":"        name_to_id \u003d {}"},{"line_number":834,"context_line":"        # NOTE(sean-k-mooney): using a dict here instead of a set is faster"},{"line_number":835,"context_line":"        # probably due to l1 code cache misses due to the introduction"},{"line_number":836,"context_line":"        # of set lookup in addition to dict lookups making the branch"}],"source_content_type":"text/x-python","patch_set":13,"id":"b8565535_a86a53f5","line":833,"range":{"start_line":833,"start_character":8,"end_line":833,"end_character":18},"updated":"2025-04-01 17:58:03.000000000","message":"we need to make this a default dict of lists","commit_id":"95bde8b956d9a63470c95338ef89c14731a949ae"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"91827cacb6f49054b3bb4f9553e9d9bf542a8eab","unresolved":true,"context_lines":[{"line_number":839,"context_line":""},{"line_number":840,"context_line":"        # Populate the dictionaries with user security groups"},{"line_number":841,"context_line":"        for user_security_group in user_security_groups:"},{"line_number":842,"context_line":"            name \u003d user_security_group[\u0027name\u0027]"},{"line_number":843,"context_line":"            sg_id \u003d user_security_group[\u0027id\u0027]"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"            # Check for duplicate names and raise an exception if found"},{"line_number":846,"context_line":"            if name in name_to_id:"},{"line_number":847,"context_line":"                raise exception.NoUniqueMatch("},{"line_number":848,"context_line":"                    _(\"Multiple security groups found matching\""},{"line_number":849,"context_line":"                      \" \u0027%s\u0027. Use an ID to be more specific.\") % name)"},{"line_number":850,"context_line":"            # Map the name to its corresponding ID"},{"line_number":851,"context_line":"            name_to_id[name] \u003d sg_id"},{"line_number":852,"context_line":"            # Map the ID to itself for easy lookup"}],"source_content_type":"text/x-python","patch_set":13,"id":"75258f3e_06dbb4a6","line":849,"range":{"start_line":842,"start_character":9,"end_line":849,"end_character":70},"updated":"2025-04-01 17:51:02.000000000","message":"so the bug matt mentioned on there top level comment is here.\n\nuser_security_groups are the groups aviabel to the user not the ones we requeted.\n\nso we need to do the duplicate check differnetnly","commit_id":"95bde8b956d9a63470c95338ef89c14731a949ae"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5446ab32c477c25339e454b4268702e0e91aa21e","unresolved":true,"context_lines":[{"line_number":848,"context_line":"                    _(\"Multiple security groups found matching\""},{"line_number":849,"context_line":"                      \" \u0027%s\u0027. Use an ID to be more specific.\") % name)"},{"line_number":850,"context_line":"            # Map the name to its corresponding ID"},{"line_number":851,"context_line":"            name_to_id[name] \u003d sg_id"},{"line_number":852,"context_line":"            # Map the ID to itself for easy lookup"},{"line_number":853,"context_line":"            id_to_id[sg_id] \u003d sg_id"},{"line_number":854,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"340c8090_2b61ca49","line":851,"range":{"start_line":851,"start_character":11,"end_line":851,"end_character":36},"updated":"2025-04-01 17:58:03.000000000","message":"and append to the list here,","commit_id":"95bde8b956d9a63470c95338ef89c14731a949ae"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5446ab32c477c25339e454b4268702e0e91aa21e","unresolved":true,"context_lines":[{"line_number":860,"context_line":"            # Check if the security group is in the name-to-ID dictionary"},{"line_number":861,"context_line":"            # as if a user names the security group the same as"},{"line_number":862,"context_line":"            # another\u0027s security groups uuid, the name takes priority."},{"line_number":863,"context_line":"            if security_group in name_to_id:"},{"line_number":864,"context_line":"                security_group_ids.append(name_to_id[security_group])"},{"line_number":865,"context_line":"            # Check if the security group is in the ID-to-ID dictionary"},{"line_number":866,"context_line":"            elif security_group in id_to_id:"},{"line_number":867,"context_line":"                security_group_ids.append(id_to_id[security_group])"},{"line_number":868,"context_line":"            # Raise an exception if the security group is not found in"},{"line_number":869,"context_line":"            # either dictionary"},{"line_number":870,"context_line":"            else:"},{"line_number":871,"context_line":"                raise exception.SecurityGroupNotFound("},{"line_number":872,"context_line":"                    security_group_id\u003dsecurity_group)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ed47ad83_192cb8cb","line":869,"range":{"start_line":863,"start_character":7,"end_line":869,"end_character":31},"updated":"2025-04-01 17:58:03.000000000","message":"then invert this to assume it a uuid first.\nif its not a uuid then instead of an in check we need to check if its in the list and the lent of the result is 1.\n\n\nif the lenght is \u003e 1 then the user requested by name and we have more then one group with that name so we shoudl raise\n\n                raise exception.NoUniqueMatch(\n                    _(\"Multiple security groups found matching\"\n                      \" \u0027%s\u0027. Use an ID to be more specific.\") % name)","commit_id":"95bde8b956d9a63470c95338ef89c14731a949ae"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a2783df19dd5ee8a080f0ef7fdf11c9243c35327","unresolved":true,"context_lines":[{"line_number":912,"context_line":"            try:"},{"line_number":913,"context_line":"                security_group_ids \u003d self._get_security_group_ids("},{"line_number":914,"context_line":"                    security_groups, user_security_groups)"},{"line_number":915,"context_line":"            except exception.SecurityGroupNotFound:"},{"line_number":916,"context_line":"                # Trigger a raise if the shared filter extension is not loaded,"},{"line_number":917,"context_line":"                # else we will trigger on the second call below when we pass"},{"line_number":918,"context_line":"                # any shared security groups."}],"source_content_type":"text/x-python","patch_set":13,"id":"33232636_88e4b154","line":915,"updated":"2024-10-09 16:38:07.000000000","message":"oh we are relying on thet fact that this will raise if we need secitygoups and they are not found in the non shared set.\n\nya that works","commit_id":"95bde8b956d9a63470c95338ef89c14731a949ae"}],"releasenotes/notes/support-shared-security-groups-3651e1e1f56cfb7b.yaml":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"c643b0ee081637b91983d0ecfdfccd9898587f71","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Support creating servers with RBAC shared security groups by using the new"},{"line_number":5,"context_line":"    ``shared`` filter for security groups."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"4c96df59_9e5e956e","line":2,"updated":"2021-11-10 12:53:22.000000000","message":"Not sure if this should rather be \"fixes:\" or maybe have entries in both sections.","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":28159,"name":"Hang Yang","email":"hangyang@yahooinc.com","username":"hangyang"},"change_message_id":"e509d892ab9f4be22118d60336bd2cc267fc5fb9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Support creating servers with RBAC shared security groups by using the new"},{"line_number":5,"context_line":"    ``shared`` filter for security groups."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"2a57f6f9_3e0d0512","line":2,"in_reply_to":"4c96df59_9e5e956e","updated":"2021-11-10 21:59:02.000000000","message":"Done","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"c643b0ee081637b91983d0ecfdfccd9898587f71","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Support creating servers with RBAC shared security groups by using the new"},{"line_number":5,"context_line":"    ``shared`` filter for security groups."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"4e69704b_7e5484a0","line":5,"updated":"2021-11-10 12:53:22.000000000","message":"Also link to https://bugs.launchpad.net/nova/+bug/1943969 here?","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":28159,"name":"Hang Yang","email":"hangyang@yahooinc.com","username":"hangyang"},"change_message_id":"e509d892ab9f4be22118d60336bd2cc267fc5fb9","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Support creating servers with RBAC shared security groups by using the new"},{"line_number":5,"context_line":"    ``shared`` filter for security groups."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"1cc9f60b_31fa73d2","line":5,"in_reply_to":"4e69704b_7e5484a0","updated":"2021-11-10 21:59:02.000000000","message":"Done","commit_id":"e3d39a54c61bc78638869faff90f76b794656aa8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c689d2b5c0fb2593407730c1bddff2dd7152a8ec","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Support creating servers with RBAC shared security groups by using the new"},{"line_number":5,"context_line":"    ``shared`` filter for security groups. See `bug 1943969`_ for more details."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"628ab758_93525075","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":5},"updated":"2021-11-15 17:09:35.000000000","message":"feature:\n\nthis is not a bug fix its a feature","commit_id":"53b0ade1e19e780984cd72206807a58fd27a34df"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"979427d89533f1b81837cd91de2d78b090f3b069","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Support creating servers with RBAC shared security groups by using the new"},{"line_number":5,"context_line":"    ``shared`` filter for security groups. See `bug 1943969`_ for more details."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"225facc8_e97db3b9","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":5},"in_reply_to":"628ab758_93525075","updated":"2023-03-15 15:53:12.000000000","message":"Done","commit_id":"53b0ade1e19e780984cd72206807a58fd27a34df"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9221cea1aa95ced869ee88fcc518d9e54cb2851a","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    shared-security-groups`_ for more details."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    .. _blueprint shared-security-groups:"},{"line_number":9,"context_line":"      https://bugs.launchpad.net/nova/+bug/1943969"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"13bcb58f_92f6db5c","line":9,"range":{"start_line":9,"start_character":6,"end_line":9,"end_character":50},"updated":"2024-09-05 10:02:28.000000000","message":"this should be https://blueprints.launchpad.net/nova/+spec/shared-security-groups\n\nhttps://bugs.launchpad.net/nova/+bug/1943969 was marked as invalid","commit_id":"da7ebcc7cbe7e49a89375e2951edb440500e4331"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"630e287f311f9d7ae76c3d1ad1f00c4105b6dfd3","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    shared-security-groups`_ for more details."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    .. _blueprint shared-security-groups:"},{"line_number":9,"context_line":"      https://bugs.launchpad.net/nova/+bug/1943969"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"fef04188_ba16d0ce","line":9,"range":{"start_line":9,"start_character":6,"end_line":9,"end_character":50},"in_reply_to":"13bcb58f_92f6db5c","updated":"2024-09-05 10:04:21.000000000","message":"you do not need to respin for this but if you do please link to the correct tracker.","commit_id":"da7ebcc7cbe7e49a89375e2951edb440500e4331"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"89428112d7203340ef5322e3964696e5dc75543f","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    shared-security-groups`_ for more details."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    .. _blueprint shared-security-groups:"},{"line_number":9,"context_line":"      https://bugs.launchpad.net/nova/+bug/1943969"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"fd8ce305_084bfdac","line":9,"range":{"start_line":9,"start_character":6,"end_line":9,"end_character":50},"in_reply_to":"fef04188_ba16d0ce","updated":"2024-09-05 14:46:20.000000000","message":"Done","commit_id":"da7ebcc7cbe7e49a89375e2951edb440500e4331"}]}
