)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5335e7a1635e590e32d980c7525c8f6010601172","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"21481ed4_65288072","updated":"2025-07-28 23:39:49.000000000","message":"recheck ci fixed","commit_id":"ca5d80b966a7dc11e3be5a0de81cc8760a3f85ba"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"aa6c95a8278efd34dc7d2995a8b6d7a91530339a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"80b4499b_cb7adb9c","updated":"2025-07-29 14:44:24.000000000","message":"recheck mirror unhappiness","commit_id":"ca5d80b966a7dc11e3be5a0de81cc8760a3f85ba"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"e973492369db12a002ba434bc96375d5597f85e6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"c464c3b9_f36b7a14","updated":"2025-08-14 18:19:22.000000000","message":"Only voting +1 due to my general lack of familiarity with security groups. If it becomes absolutely necessary ping me and I can upgrade this.","commit_id":"ee1e633ab126f910bd948c8eea94551354757cd7"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"b7c216af0d7ade67ec325012f0f8a942b8f11d91","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"0d4188b8_edb38be9","updated":"2025-09-02 16:46:31.000000000","message":"Whelp. Two weeks and nobody else came around :(","commit_id":"2f7f3e12369e46294a2be5c780db373ba831124c"}],"networking_generic_switch/devices/netmiko_devices/__init__.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6438db52491c1f50f92234a6ac67b883885ae1fb","unresolved":true,"context_lines":[{"line_number":588,"context_line":"        if not cmd_template:"},{"line_number":589,"context_line":"            # There are 2 reasons this could be empty:"},{"line_number":590,"context_line":"            # 1. Some switches don\u0027t support egress rules. This error should"},{"line_number":591,"context_line":"            #    propagate back to the user"},{"line_number":592,"context_line":"            #"},{"line_number":593,"context_line":"            # 2. Some switches don\u0027t support removing rules. This should"},{"line_number":594,"context_line":"            #    propagate to an error path which deletes the whole security"}],"source_content_type":"text/x-python","patch_set":3,"id":"6bef9e0c_5b66af86","line":591,"updated":"2025-06-03 19:13:22.000000000","message":"Are we sure about this? I mean, are we sure we should be kicking it back to the user. Error loudly seems to make sense and not explicitly break, but maybe it makes sense for a knob?!","commit_id":"b58b5f42fd2a10aa6bf09f300ae648c5217dd9e3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e5ce17d9aac13a0f0f268c54f93139f425dbd800","unresolved":true,"context_lines":[{"line_number":588,"context_line":"        if not cmd_template:"},{"line_number":589,"context_line":"            # There are 2 reasons this could be empty:"},{"line_number":590,"context_line":"            # 1. Some switches don\u0027t support egress rules. This error should"},{"line_number":591,"context_line":"            #    propagate back to the user"},{"line_number":592,"context_line":"            #"},{"line_number":593,"context_line":"            # 2. Some switches don\u0027t support removing rules. This should"},{"line_number":594,"context_line":"            #    propagate to an error path which deletes the whole security"}],"source_content_type":"text/x-python","patch_set":3,"id":"74c443cb_e06a0e78","line":591,"in_reply_to":"5481b331_d1f7f166","updated":"2025-08-14 14:02:23.000000000","message":"FWIW, thinking about it, and looking at the latest code, I think that is sort of the best case, but if we really wanted to we might want to log something for the operator to understand the issue. I don\u0027t think binding or application of the rules will actually fail any process later on, at least if I understand the basic flow with neutron, so the user has no real way to know what is going on in the end and that really only leaves an error in the logs for operators.","commit_id":"b58b5f42fd2a10aa6bf09f300ae648c5217dd9e3"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"297b1ffa1077a509f9f22f5f90caa9cf6d434e35","unresolved":true,"context_lines":[{"line_number":588,"context_line":"        if not cmd_template:"},{"line_number":589,"context_line":"            # There are 2 reasons this could be empty:"},{"line_number":590,"context_line":"            # 1. Some switches don\u0027t support egress rules. This error should"},{"line_number":591,"context_line":"            #    propagate back to the user"},{"line_number":592,"context_line":"            #"},{"line_number":593,"context_line":"            # 2. Some switches don\u0027t support removing rules. This should"},{"line_number":594,"context_line":"            #    propagate to an error path which deletes the whole security"}],"source_content_type":"text/x-python","patch_set":3,"id":"5481b331_d1f7f166","line":591,"in_reply_to":"6bef9e0c_5b66af86","updated":"2025-06-03 21:27:48.000000000","message":"I think once we get to implementing a driver which doesn\u0027t support egress then we should add a knob and document for that driver the implications of creating egress rules. That is not really obvious from this comment. I wanted to delay establishing this pattern until there is a concrete driver to model it with.","commit_id":"b58b5f42fd2a10aa6bf09f300ae648c5217dd9e3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6438db52491c1f50f92234a6ac67b883885ae1fb","unresolved":true,"context_lines":[{"line_number":592,"context_line":"            #"},{"line_number":593,"context_line":"            # 2. Some switches don\u0027t support removing rules. This should"},{"line_number":594,"context_line":"            #    propagate to an error path which deletes the whole security"},{"line_number":595,"context_line":"            #    group and rebuilds it from known state."},{"line_number":596,"context_line":"            raise NotImplementedError()"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        names \u003d self._get_acl_names(sg_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"c7ee899e_95fd0d89","line":595,"updated":"2025-06-03 19:13:22.000000000","message":"Yeah, an entire re-write the rule from scratch pattern 😭","commit_id":"b58b5f42fd2a10aa6bf09f300ae648c5217dd9e3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"757c62131027002f2ac87380fc74bc8b5456490f","unresolved":true,"context_lines":[{"line_number":592,"context_line":"            #"},{"line_number":593,"context_line":"            # 2. Some switches don\u0027t support removing rules. This should"},{"line_number":594,"context_line":"            #    propagate to an error path which deletes the whole security"},{"line_number":595,"context_line":"            #    group and rebuilds it from known state."},{"line_number":596,"context_line":"            raise NotImplementedError()"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        names \u003d self._get_acl_names(sg_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"962ec68c_45caebf4","line":595,"in_reply_to":"18e11ce2_3efe581a","updated":"2025-06-06 18:01:06.000000000","message":"I think that pattern is for the best, actually. I remember having some deep converstations with the likes of Godaddy and Yahoo back in the day and they were largely doing full rule rebuild sweeps on their switch fleets in the middle of the night for the same basic reason. In place updates get more problmatic and its just cleaner to nuke and rebuild or rebuild to what you expect.","commit_id":"b58b5f42fd2a10aa6bf09f300ae648c5217dd9e3"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"fdd65f57f74a1d3d66d9fae0a83e7de1b10d89c5","unresolved":false,"context_lines":[{"line_number":592,"context_line":"            #"},{"line_number":593,"context_line":"            # 2. Some switches don\u0027t support removing rules. This should"},{"line_number":594,"context_line":"            #    propagate to an error path which deletes the whole security"},{"line_number":595,"context_line":"            #    group and rebuilds it from known state."},{"line_number":596,"context_line":"            raise NotImplementedError()"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        names \u003d self._get_acl_names(sg_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ffa90199_0cb594ec","line":595,"in_reply_to":"962ec68c_45caebf4","updated":"2025-07-31 23:48:15.000000000","message":"Done","commit_id":"b58b5f42fd2a10aa6bf09f300ae648c5217dd9e3"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"297b1ffa1077a509f9f22f5f90caa9cf6d434e35","unresolved":true,"context_lines":[{"line_number":592,"context_line":"            #"},{"line_number":593,"context_line":"            # 2. Some switches don\u0027t support removing rules. This should"},{"line_number":594,"context_line":"            #    propagate to an error path which deletes the whole security"},{"line_number":595,"context_line":"            #    group and rebuilds it from known state."},{"line_number":596,"context_line":"            raise NotImplementedError()"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        names \u003d self._get_acl_names(sg_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"18e11ce2_3efe581a","line":595,"in_reply_to":"c7ee899e_95fd0d89","updated":"2025-06-03 21:27:48.000000000","message":"Yes, and you know since lookup-and-rebuild-from-scratch will often be required for deleting rules I am quite tempted to do it always for delete, and we should have a discussion about doing this for adding rules too!\n\nDoing this would ensure the switch state matches neutron model, and my assumption is that adding and removing rules is an uncommon manual operation. The counterpoint is that this assumption may not hold if automation tools commonly create and delete many security groups.","commit_id":"b58b5f42fd2a10aa6bf09f300ae648c5217dd9e3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6438db52491c1f50f92234a6ac67b883885ae1fb","unresolved":true,"context_lines":[{"line_number":646,"context_line":"        to_port \u003d rule.get(\u0027port_range_max\u0027, from_port)"},{"line_number":647,"context_line":"        if (from_port !\u003d to_port) and not self.support_sg_port_range:"},{"line_number":648,"context_line":"            # TODO(stevebaker) A range of ports is not supported so"},{"line_number":649,"context_line":"            # create an individual rule for every port"},{"line_number":650,"context_line":"            raise NotImplementedError()"},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"        cmds \u003d self._security_group_rule_commands(sg_id, rule)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1575fdbd_0aa99cae","line":649,"updated":"2025-06-03 19:13:22.000000000","message":"wouldn\u0027t that be switch specific? seems like switch specific behavior.\n\nAnother item, and maybe it might make sense to also have verbose logging here because obviously this is not ideal and we want the infra operator to be aware that \"this is not ideal\"","commit_id":"b58b5f42fd2a10aa6bf09f300ae648c5217dd9e3"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"297b1ffa1077a509f9f22f5f90caa9cf6d434e35","unresolved":true,"context_lines":[{"line_number":646,"context_line":"        to_port \u003d rule.get(\u0027port_range_max\u0027, from_port)"},{"line_number":647,"context_line":"        if (from_port !\u003d to_port) and not self.support_sg_port_range:"},{"line_number":648,"context_line":"            # TODO(stevebaker) A range of ports is not supported so"},{"line_number":649,"context_line":"            # create an individual rule for every port"},{"line_number":650,"context_line":"            raise NotImplementedError()"},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"        cmds \u003d self._security_group_rule_commands(sg_id, rule)"}],"source_content_type":"text/x-python","patch_set":3,"id":"8733a16d_059f4adb","line":649,"in_reply_to":"1575fdbd_0aa99cae","updated":"2025-06-03 21:27:48.000000000","message":"Yes, a subclass for a switch which doesn\u0027t support port ranges has 2 options:\n1: set support_sg_port_range\u003dFalse, user can\u0027t do it\n2: set support_sg_port_range\u003dTrue and override _security_group_rule_commands to have an add rule command for every port in the range\n\nIt likely only makes sense to action this TODO when the first driver that doesn\u0027t support port ranges is implemented.","commit_id":"b58b5f42fd2a10aa6bf09f300ae648c5217dd9e3"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"fdd65f57f74a1d3d66d9fae0a83e7de1b10d89c5","unresolved":false,"context_lines":[{"line_number":646,"context_line":"        to_port \u003d rule.get(\u0027port_range_max\u0027, from_port)"},{"line_number":647,"context_line":"        if (from_port !\u003d to_port) and not self.support_sg_port_range:"},{"line_number":648,"context_line":"            # TODO(stevebaker) A range of ports is not supported so"},{"line_number":649,"context_line":"            # create an individual rule for every port"},{"line_number":650,"context_line":"            raise NotImplementedError()"},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"        cmds \u003d self._security_group_rule_commands(sg_id, rule)"}],"source_content_type":"text/x-python","patch_set":3,"id":"d0d4a630_87b91676","line":649,"in_reply_to":"4b242979_5496a3ee","updated":"2025-07-31 23:48:15.000000000","message":"Done","commit_id":"b58b5f42fd2a10aa6bf09f300ae648c5217dd9e3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"757c62131027002f2ac87380fc74bc8b5456490f","unresolved":true,"context_lines":[{"line_number":646,"context_line":"        to_port \u003d rule.get(\u0027port_range_max\u0027, from_port)"},{"line_number":647,"context_line":"        if (from_port !\u003d to_port) and not self.support_sg_port_range:"},{"line_number":648,"context_line":"            # TODO(stevebaker) A range of ports is not supported so"},{"line_number":649,"context_line":"            # create an individual rule for every port"},{"line_number":650,"context_line":"            raise NotImplementedError()"},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"        cmds \u003d self._security_group_rule_commands(sg_id, rule)"}],"source_content_type":"text/x-python","patch_set":3,"id":"4b242979_5496a3ee","line":649,"in_reply_to":"8733a16d_059f4adb","updated":"2025-06-06 18:01:06.000000000","message":"SGTM","commit_id":"b58b5f42fd2a10aa6bf09f300ae648c5217dd9e3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"41a53063a19ab91af4f52d84ab12a6eef0805fff","unresolved":true,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    UNBIND_SECURITY_GROUP \u003d None"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    support_sg_port_range \u003d True"},{"line_number":130,"context_line":"    \"\"\"Whether a security group rule supports a port range on this switch"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    Set to False for switches which support only a single port per rule."}],"source_content_type":"text/x-python","patch_set":6,"id":"6ad8a167_6e67045a","line":129,"updated":"2025-07-28 19:46:41.000000000","message":"Wow, this one is a little jarring. Could it make sense to also upper case it?","commit_id":"ca5d80b966a7dc11e3be5a0de81cc8760a3f85ba"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"fdd65f57f74a1d3d66d9fae0a83e7de1b10d89c5","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    UNBIND_SECURITY_GROUP \u003d None"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    support_sg_port_range \u003d True"},{"line_number":130,"context_line":"    \"\"\"Whether a security group rule supports a port range on this switch"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    Set to False for switches which support only a single port per rule."}],"source_content_type":"text/x-python","patch_set":6,"id":"458bf039_7494dda9","line":129,"in_reply_to":"6ad8a167_6e67045a","updated":"2025-07-31 23:48:15.000000000","message":"Done","commit_id":"ca5d80b966a7dc11e3be5a0de81cc8760a3f85ba"}]}
