)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"b5b53ab10620f9c939ecbb618fc0ec1732e47963","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Austin Russell \u003ckenrusse@cisco.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-08-27 15:42:57 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Enables amphora VRRP ports to be on different subnets on the same network when there is a loadbalancer failover.  Performs ip availability check on the vip-network and selects alternate subnet with free IPs if the vip-subnet is full. Installs routes on amphoras for all subnets in vip-network to ensure VRRP connnectivity when the amphoras have VRRP ports on different subnets."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-Bug: #2162916"},{"line_number":10,"context_line":"Change-Id: If9c515056a39236a7b1266159731eba9ce20d18a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"701704ec_52f94ce5","line":7,"updated":"2026-09-03 12:46:18.000000000","message":"You might want to add a title line here. Gerrit uses the title line for the name of the CR, hence this this CR has the entire commit as the title 😀","commit_id":"d8dd0c439b35e8882ac04a043695c60c75bc9271"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"787b020eab4e4d7dba89dc8db95a9bfdc8c76869","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Austin Russell \u003ckenrusse@cisco.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-08-27 15:42:57 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Enables amphora VRRP ports to be on different subnets on the same network when there is a loadbalancer failover.  Performs ip availability check on the vip-network and selects alternate subnet with free IPs if the vip-subnet is full. Installs routes on amphoras for all subnets in vip-network to ensure VRRP connnectivity when the amphoras have VRRP ports on different subnets."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-Bug: #2162916"},{"line_number":10,"context_line":"Change-Id: If9c515056a39236a7b1266159731eba9ce20d18a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"126b81cc_18eac1d6","line":7,"in_reply_to":"6ea3bc5e_011c8f83","updated":"2026-10-16 14:27:14.000000000","message":"Marked as resolved.","commit_id":"d8dd0c439b35e8882ac04a043695c60c75bc9271"},{"author":{"_account_id":28258,"name":"Austin Russell","email":"kenrusse@cisco.com","username":"austinr"},"change_message_id":"9bd4af5827dc06018df192c896171d49ac68c664","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Austin Russell \u003ckenrusse@cisco.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-08-27 15:42:57 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Enables amphora VRRP ports to be on different subnets on the same network when there is a loadbalancer failover.  Performs ip availability check on the vip-network and selects alternate subnet with free IPs if the vip-subnet is full. Installs routes on amphoras for all subnets in vip-network to ensure VRRP connnectivity when the amphoras have VRRP ports on different subnets."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-Bug: #2162916"},{"line_number":10,"context_line":"Change-Id: If9c515056a39236a7b1266159731eba9ce20d18a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"6ea3bc5e_011c8f83","line":7,"in_reply_to":"701704ec_52f94ce5","updated":"2026-09-11 17:00:31.000000000","message":"I will add a title.","commit_id":"d8dd0c439b35e8882ac04a043695c60c75bc9271"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"b5b53ab10620f9c939ecbb618fc0ec1732e47963","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"54a447a0_7c1a04e5","updated":"2026-09-03 12:46:18.000000000","message":"There\u0027s a few issues with this patch overall. I wonder would it be a good approach to propose a spec for the fix, this would help figure out a lot of the details before the implementation is done\n\nIt also requires an amphora image rebuild so probably not a backport candidate\n\nAt the minimum, it needs a release note","commit_id":"d8dd0c439b35e8882ac04a043695c60c75bc9271"},{"author":{"_account_id":28258,"name":"Austin Russell","email":"kenrusse@cisco.com","username":"austinr"},"change_message_id":"9bd4af5827dc06018df192c896171d49ac68c664","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"957694e0_6715f241","in_reply_to":"54a447a0_7c1a04e5","updated":"2026-09-11 17:00:31.000000000","message":"I will try to create a spec.  My hope is the final version of this patch could be back ported to 2025.1 Epoxy for inclusion in RHOSO 18.","commit_id":"d8dd0c439b35e8882ac04a043695c60c75bc9271"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"9584f69626ea3e41f761d55de1b136e83f2b8325","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"5f922fa2_837b6efa","updated":"2026-10-26 14:30:48.000000000","message":"I have a few concerns, the patch modifies the Amphora API (version v1.0), and it\u0027s difficult to guarantee that a control plane from Hibiscus using v1.0 will work with a new amphora image (v1.0) and that a new control plane will work with an old amphora image. We need to ensure that the behavior of the old control plane/agent is still functional.\n\n\nI found a bug in my devstack:\n\nwith a VIP network that has:\n- VIP subnet 1, available IPs: 3\n- VIP subnet 2\n\n* Create an A/S LB on VIP subnet 1 \u003d\u003e 2 amphorae: A and B\n* Perform a failover on amphora B\n* New amphora C is created on VIP subnet 2 (subnet 1 is full)\n* amphora A doesn\u0027t have a route to amphora C, haproxy peering doesn\u0027t work\n\nAmphora A:\n```\n# ip netns exec amphora-haproxy ip -br addr show eth1\neth1             UP             10.0.0.2/29 10.0.0.5/32\n# ip netns exec amphora-haproxy ip r\n10.0.0.0/29 dev eth1 proto kernel scope link src 10.0.0.2\n# ip netns exec amphora-haproxy ip route get 10.0.1.11\nRTNETLINK answers: Network is unreachable\n```\n\nAmphora C:\n```\n# ip netns exec amphora-haproxy ip -br addr show eth1\neth1             UP             10.0.1.11/24\n# ip netns exec amphora-haproxy ip r\n10.0.0.0/29 dev eth1 proto static scope link\n10.0.1.0/24 dev eth1 proto kernel scope link src 10.0.1.11\n```\n\nit seems that `AmphoraePostVIPPlugIfNeeded` should have called `post_vip_plug` for amphora A, but the call was skipped, `amphora_needs_cross_subnet_vip_replug` considers that the subnet is already present in the amp","commit_id":"041926b545d767e9637b3d04bf7f65e166650c35"}],"octavia/amphorae/backends/agent/api_server/plug.py":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"b5b53ab10620f9c939ecbb618fc0ec1732e47963","unresolved":true,"context_lines":[{"line_number":123,"context_line":"                \"VIPs updated on interface {interface}: {vips}\".format("},{"line_number":124,"context_line":"                    interface\u003dexisting_interface,"},{"line_number":125,"context_line":"                    vips\u003d\", \".join(v[\u0027ip_address\u0027] for v in rendered_vips)))"},{"line_number":126,"context_line":"            return webob.Response(json\u003d{"},{"line_number":127,"context_line":"                \u0027message\u0027: \"OK\","},{"line_number":128,"context_line":"                \u0027details\u0027: vip_message}, status\u003d202)"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"24c9d761_e254fa8c","line":126,"updated":"2026-09-03 12:46:18.000000000","message":"This will change the behaviour of the amphora agent API and I think this needs more discussion before it can proceed. A less disruptive approach might be to have the replug VIP as a separate call and trigger this from the controller if a 409 response is given","commit_id":"d8dd0c439b35e8882ac04a043695c60c75bc9271"},{"author":{"_account_id":28258,"name":"Austin Russell","email":"kenrusse@cisco.com","username":"austinr"},"change_message_id":"9bd4af5827dc06018df192c896171d49ac68c664","unresolved":true,"context_lines":[{"line_number":123,"context_line":"                \"VIPs updated on interface {interface}: {vips}\".format("},{"line_number":124,"context_line":"                    interface\u003dexisting_interface,"},{"line_number":125,"context_line":"                    vips\u003d\", \".join(v[\u0027ip_address\u0027] for v in rendered_vips)))"},{"line_number":126,"context_line":"            return webob.Response(json\u003d{"},{"line_number":127,"context_line":"                \u0027message\u0027: \"OK\","},{"line_number":128,"context_line":"                \u0027details\u0027: vip_message}, status\u003d202)"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"c59c2cbd_4707bf1a","line":126,"in_reply_to":"24c9d761_e254fa8c","updated":"2026-09-11 17:00:31.000000000","message":"I\u0027m open to suggestions and welcome some guidance about the best way to implement this feature.  Do we need another set of eyes to review?  I can try implementing this with separate API for replugging if that\u0027s the desired direction.","commit_id":"d8dd0c439b35e8882ac04a043695c60c75bc9271"}],"octavia/amphorae/backends/utils/interface_file.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"fa5333cbedcc83dcbb64f74fba03aa37c9ef89a8","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                strict\u003dFalse)"},{"line_number":272,"context_line":"            if network \u003d\u003d vip_cidr:"},{"line_number":273,"context_line":"                # Only pin VIP prefsrc when VRRP is on the VIP subnet. Backups"},{"line_number":274,"context_line":"                # on a sibling subnet need a plain link route to reach the peer."},{"line_number":275,"context_line":"                use_prefsrc \u003d True"},{"line_number":276,"context_line":"                if vrrp_info and vrrp_info.get(\u0027ip\u0027):"},{"line_number":277,"context_line":"                    vrrp_ip \u003d ipaddress.ip_address(vrrp_info[\u0027ip\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"42a2a691_ddf67330","line":274,"updated":"2026-08-05 21:29:14.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"859ab7cd2e10a405276e4f1bd26f9f6e2ce46bec"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"b5b53ab10620f9c939ecbb618fc0ec1732e47963","unresolved":true,"context_lines":[{"line_number":191,"context_line":"            self.routes.extend(self.get_host_routes(vip[\u0027host_routes\u0027],"},{"line_number":192,"context_line":"                                                    table\u003d1))"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        if vrrp_info:"},{"line_number":195,"context_line":"            vrrp_network \u003d ipaddress.ip_network("},{"line_number":196,"context_line":"                f\"{vrrp_info[\u0027ip\u0027]}/{vrrp_info[\u0027prefixlen\u0027]}\","},{"line_number":197,"context_line":"                strict\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":3,"id":"30576ec5_41680f86","line":194,"updated":"2026-09-03 12:46:18.000000000","message":"Claude spotted a bug here, there\u0027s no deduplication check on the host routes so you\u0027ll end up with duplicated lines in the JSON","commit_id":"d8dd0c439b35e8882ac04a043695c60c75bc9271"},{"author":{"_account_id":28258,"name":"Austin Russell","email":"kenrusse@cisco.com","username":"austinr"},"change_message_id":"9bd4af5827dc06018df192c896171d49ac68c664","unresolved":true,"context_lines":[{"line_number":191,"context_line":"            self.routes.extend(self.get_host_routes(vip[\u0027host_routes\u0027],"},{"line_number":192,"context_line":"                                                    table\u003d1))"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        if vrrp_info:"},{"line_number":195,"context_line":"            vrrp_network \u003d ipaddress.ip_network("},{"line_number":196,"context_line":"                f\"{vrrp_info[\u0027ip\u0027]}/{vrrp_info[\u0027prefixlen\u0027]}\","},{"line_number":197,"context_line":"                strict\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":3,"id":"f651e3f8_143d2bbd","line":194,"in_reply_to":"30576ec5_41680f86","updated":"2026-09-11 17:00:31.000000000","message":"Will add duplicate route filtering in interface_file.py","commit_id":"d8dd0c439b35e8882ac04a043695c60c75bc9271"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"787b020eab4e4d7dba89dc8db95a9bfdc8c76869","unresolved":false,"context_lines":[{"line_number":191,"context_line":"            self.routes.extend(self.get_host_routes(vip[\u0027host_routes\u0027],"},{"line_number":192,"context_line":"                                                    table\u003d1))"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        if vrrp_info:"},{"line_number":195,"context_line":"            vrrp_network \u003d ipaddress.ip_network("},{"line_number":196,"context_line":"                f\"{vrrp_info[\u0027ip\u0027]}/{vrrp_info[\u0027prefixlen\u0027]}\","},{"line_number":197,"context_line":"                strict\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":3,"id":"c0655535_d07cfda1","line":194,"in_reply_to":"f651e3f8_143d2bbd","updated":"2026-10-16 14:27:14.000000000","message":"Marked as resolved.","commit_id":"d8dd0c439b35e8882ac04a043695c60c75bc9271"}],"octavia/amphorae/drivers/haproxy/rest_api_driver.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"9584f69626ea3e41f761d55de1b136e83f2b8325","unresolved":true,"context_lines":[{"line_number":471,"context_line":"            vrrp_subnet \u003d amphora_network_config.get("},{"line_number":472,"context_line":"                consts.VRRP_SUBNET) or vip_subnet"},{"line_number":473,"context_line":"            lb_subnet_cidrs \u003d utils.collect_lb_subnet_cidrs("},{"line_number":474,"context_line":"                amphora_network_config)"},{"line_number":475,"context_line":"            net_info \u003d self._build_vip_plug_net_info("},{"line_number":476,"context_line":"                port.to_dict(recurse\u003dTrue), amphora.to_dict(),"},{"line_number":477,"context_line":"                vip_subnet, vrrp_subnet, port.network.mtu,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ef5467dc_d5012031","line":474,"range":{"start_line":474,"start_character":16,"end_line":474,"end_character":38},"updated":"2026-10-26 14:30:48.000000000","message":"collect_lb_subnet_cidrs takes an amphorae_network_config dict (ex `{amp1: {vip_subnet: xxx}}`), here it\u0027s an amphora_network_config (`{vip_subnet: xxx}`)","commit_id":"041926b545d767e9637b3d04bf7f65e166650c35"}],"octavia/common/utils.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"fa5333cbedcc83dcbb64f74fba03aa37c9ef89a8","unresolved":false,"context_lines":[{"line_number":220,"context_line":"def validate_failover_vip_port_capacity(network_driver, load_balancer,"},{"line_number":221,"context_line":"                                        vip_subnet_id, vip_port_id,"},{"line_number":222,"context_line":"                                        vip_address, network_id):"},{"line_number":223,"context_line":"    \"\"\"Ensure VIP port subnets have capacity if the VIP port must be rebuilt.\"\"\""},{"line_number":224,"context_line":"    from octavia.common import exceptions as octavia_exc"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    if vip_port_usable(network_driver, vip_port_id, vip_subnet_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"0420eaa5_50ef05f3","line":223,"updated":"2026-08-05 21:29:14.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"859ab7cd2e10a405276e4f1bd26f9f6e2ce46bec"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"05aa0933beb1764b9c3dc922a523eccea10ebe10","unresolved":false,"context_lines":[{"line_number":194,"context_line":"    if not vip_port_id:"},{"line_number":195,"context_line":"        return False"},{"line_number":196,"context_line":"    try:"},{"line_number":197,"context_line":"        from octavia.network import base as network_base"},{"line_number":198,"context_line":"        port \u003d network_driver.get_port(vip_port_id)"},{"line_number":199,"context_line":"    except network_base.PortNotFound:"},{"line_number":200,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":2,"id":"dbf05d2b_b21a3c6a","line":197,"updated":"2026-08-25 14:08:47.000000000","message":"pep8: C0415: Import outside toplevel (octavia.network.base) (import-outside-toplevel)","commit_id":"1705ff33015ece15167bbb323d9dbb8ab346155c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"05aa0933beb1764b9c3dc922a523eccea10ebe10","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                                        vip_subnet_id, vip_port_id,"},{"line_number":222,"context_line":"                                        vip_address, network_id):"},{"line_number":223,"context_line":"    \"\"\"Ensure VIP port subnets have capacity if VIP port must be rebuilt.\"\"\""},{"line_number":224,"context_line":"    from octavia.common import exceptions as octavia_exc"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    if vip_port_usable(network_driver, vip_port_id, vip_subnet_id,"},{"line_number":227,"context_line":"                       vip_address):"}],"source_content_type":"text/x-python","patch_set":2,"id":"eff20c4c_de91f981","line":224,"updated":"2026-08-25 14:08:47.000000000","message":"pep8: C0415: Import outside toplevel (octavia.common.exceptions) (import-outside-toplevel)","commit_id":"1705ff33015ece15167bbb323d9dbb8ab346155c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"05aa0933beb1764b9c3dc922a523eccea10ebe10","unresolved":false,"context_lines":[{"line_number":308,"context_line":"    failover_vrrp_subnet_fallback is enabled, select another subnet on the"},{"line_number":309,"context_line":"    same network with the same IP version as the VIP subnet."},{"line_number":310,"context_line":"    \"\"\""},{"line_number":311,"context_line":"    from octavia.common import exceptions as octavia_exc"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    vip_subnet \u003d network_driver.get_subnet(vip_subnet_id)"},{"line_number":314,"context_line":"    network \u003d network_driver.get_network(network_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"d6a39599_a358a0a8","line":311,"updated":"2026-08-25 14:08:47.000000000","message":"pep8: C0415: Import outside toplevel (octavia.common.exceptions) (import-outside-toplevel)","commit_id":"1705ff33015ece15167bbb323d9dbb8ab346155c"}],"octavia/controller/worker/v2/flows/amphora_flows.py":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"b5b53ab10620f9c939ecbb618fc0ec1732e47963","unresolved":true,"context_lines":[{"line_number":191,"context_line":"            requires\u003dconstants.LOADBALANCER_ID,"},{"line_number":192,"context_line":"            provides\u003dconstants.AMPHORAE_NETWORK_CONFIG))"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        vrrp_subflow.add(amphora_driver_tasks.AmphoraePostVIPPlug("},{"line_number":195,"context_line":"            name\u003dsf_name + \u0027-\u0027 + constants.AMPHORAE_POST_VIP_PLUG,"},{"line_number":196,"context_line":"            requires\u003d(constants.LOADBALANCER,"},{"line_number":197,"context_line":"                      constants.AMPHORAE_NETWORK_CONFIG)))"}],"source_content_type":"text/x-python","patch_set":3,"id":"1465e67d_8ae82040","line":194,"updated":"2026-09-03 12:46:18.000000000","message":"I feel adding this task for all amphora VRRP flows is a bad idea. Are you sure it doesn\u0027t cause the VIP to be replugged on more benign operations (e.g. LB creation)?","commit_id":"d8dd0c439b35e8882ac04a043695c60c75bc9271"},{"author":{"_account_id":28258,"name":"Austin Russell","email":"kenrusse@cisco.com","username":"austinr"},"change_message_id":"9bd4af5827dc06018df192c896171d49ac68c664","unresolved":true,"context_lines":[{"line_number":191,"context_line":"            requires\u003dconstants.LOADBALANCER_ID,"},{"line_number":192,"context_line":"            provides\u003dconstants.AMPHORAE_NETWORK_CONFIG))"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        vrrp_subflow.add(amphora_driver_tasks.AmphoraePostVIPPlug("},{"line_number":195,"context_line":"            name\u003dsf_name + \u0027-\u0027 + constants.AMPHORAE_POST_VIP_PLUG,"},{"line_number":196,"context_line":"            requires\u003d(constants.LOADBALANCER,"},{"line_number":197,"context_line":"                      constants.AMPHORAE_NETWORK_CONFIG)))"}],"source_content_type":"text/x-python","patch_set":3,"id":"df107999_1bf46c2c","line":194,"in_reply_to":"1465e67d_8ae82040","updated":"2026-09-11 17:00:31.000000000","message":"It does indeed run during LB creation which results in replugging.  Let me figure out a better way to replug only the surviving amphora during a failover.","commit_id":"d8dd0c439b35e8882ac04a043695c60c75bc9271"}],"octavia/controller/worker/v2/tasks/database_tasks.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"fa5333cbedcc83dcbb64f74fba03aa37c9ef89a8","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from octavia.api.drivers import utils as provider_utils"},{"line_number":28,"context_line":"from octavia.common import constants"},{"line_number":29,"context_line":"from octavia.common import utils"},{"line_number":30,"context_line":"from octavia.common import data_models"},{"line_number":31,"context_line":"from octavia.common import exceptions"},{"line_number":32,"context_line":"from octavia.common.tls_utils import cert_parser"},{"line_number":33,"context_line":"from octavia.controller.worker import task_utils as task_utilities"}],"source_content_type":"text/x-python","patch_set":1,"id":"02d96708_c3f35ca8","line":30,"updated":"2026-08-05 21:29:14.000000000","message":"pep8: H306: imports not in alphabetical order (octavia.common.utils, octavia.common.data_models)","commit_id":"859ab7cd2e10a405276e4f1bd26f9f6e2ce46bec"}],"octavia/tests/unit/common/test_utils.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"fa5333cbedcc83dcbb64f74fba03aa37c9ef89a8","unresolved":false,"context_lines":[{"line_number":277,"context_line":"            subnets\u003d[vip_subnet_id])"},{"line_number":278,"context_line":"        network_driver.get_network_ip_availability.return_value \u003d ("},{"line_number":279,"context_line":"            self._ip_avail([{\u0027subnet_id\u0027: vip_subnet_id,"},{"line_number":280,"context_line":"                               \u0027total_ips\u0027: 10, \u0027used_ips\u0027: 9}]))"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        result \u003d utils.select_failover_vrrp_subnet("},{"line_number":283,"context_line":"            network_driver, load_balancer, vip_subnet_id, network_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"45dd544b_d8976e01","line":280,"updated":"2026-08-05 21:29:14.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"859ab7cd2e10a405276e4f1bd26f9f6e2ce46bec"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"fa5333cbedcc83dcbb64f74fba03aa37c9ef89a8","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            subnets\u003d[vip_subnet_id])"},{"line_number":329,"context_line":"        network_driver.get_network_ip_availability.return_value \u003d ("},{"line_number":330,"context_line":"            self._ip_avail([{\u0027subnet_id\u0027: vip_subnet_id,"},{"line_number":331,"context_line":"                               \u0027total_ips\u0027: 10, \u0027used_ips\u0027: 10}]))"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        self.assertRaises("},{"line_number":334,"context_line":"            octavia_exc.FailoverVRRPSubnetUnavailable,"}],"source_content_type":"text/x-python","patch_set":1,"id":"e267b75c_d9807c94","line":331,"updated":"2026-08-05 21:29:14.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"859ab7cd2e10a405276e4f1bd26f9f6e2ce46bec"}]}
