)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"4925188f36539097be901145b01282fa7f615cfd","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Configure link aggregations declaratively, never their member ports"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A bonded baremetal host reaches Neutron as one port per NIC. Ironic\u0027s"},{"line_number":10,"context_line":"provisioning ports name the physical switch port and carry no"},{"line_number":11,"context_line":"local_group_information at all, and even a tenant VIF on an 802.3ad"},{"line_number":12,"context_line":"port group arrives as one link per member. NGS then configures each"},{"line_number":13,"context_line":"member as an access port and, on unbind, runs DELETE_PORT on each of"},{"line_number":14,"context_line":"them, which on Arista EOS writes \"switchport trunk allowed vlan none\""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"768e9ef9_baf69fde","line":11,"range":{"start_line":10,"start_character":49,"end_line":11,"end_character":30},"updated":"2026-09-18 13:47:11.000000000","message":"As I understand this, you have link-aggregations-groups (PortChannels) pre-configured on your switches, and you want all config to happen on these PortChannel interfaces, ignoring the member ports entirely?\n\nYou could achieve this by creating a single port in Ironic and set `port_id` in `local_link_information` for that port to `Port-Channel7`? If you where using a PortGroup in Ironic, you should see local_group_information populated with extra information like the bond mode which in some drivers are used to create|delete the PortChannels on demand ref [2] and [3].\n\n[1] https://opendev.org/openstack/ironic/src/branch/master/ironic/drivers/modules/network/common.py#L275-L276\n[2] https://opendev.org/openstack/networking-baremetal/commit/21f591bcb7d6c59d8977c6a34230dfce6c88cd70\n[3] https://opendev.org/openstack/networking-baremetal/commit/31a8c7a3a46fb290d8470e2d43ea54b052cb2d2e","commit_id":"5d04cbe6ea4a8ce12c2fed12b7c59bd97c1fcd0b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4a458e7c5a89a82988aaf374be643c2f153c20c6","unresolved":true,"context_lines":[{"line_number":54,"context_line":"Assisted-By: Claude Opus 5"},{"line_number":55,"context_line":"Change-Id: I770be10ca9508c9c581c096010f04fd3b8425fe8"},{"line_number":56,"context_line":"Signed-off-by: Simon Zhou \u003ctd@fivetime.ltd\u003e"},{"line_number":57,"context_line":"Co-Authored-By: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"},{"line_number":58,"context_line":"Claude-Session: https://claude.ai/code/session_01FqXGTd71E38jvvpBo7NHuP"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"6560d642_905a5e58","line":57,"updated":"2026-09-18 15:10:17.000000000","message":"JFYI, we don\u0027t expect nor attribute Assistance to the model being a co-author, as much as the models really want that now. If you have any questions, please feel free to reach out. Updated community AI policy is expected to land this coming week.","commit_id":"5d04cbe6ea4a8ce12c2fed12b7c59bd97c1fcd0b"}],"/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":"f36ca87af0b26d46f41d52e380fd9c90bb0f9e57","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"8afec7f8_39faba48","updated":"2026-09-18 15:09:08.000000000","message":"Welcome! A few thoughts in-line. I think part of my challenge is the commit message doesn\u0027t explain from a human point of view what your trying to achieve. Obviously the AI\u0027s have taken some liberties as well. There seems to be a configuration modeling issue here with the services and runtime, and a separate change which is likely wrong but should be discussed on a separate change.","commit_id":"5d04cbe6ea4a8ce12c2fed12b7c59bd97c1fcd0b"}],"doc/source/admin/general-configuration.rst":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f36ca87af0b26d46f41d52e380fd9c90bb0f9e57","unresolved":true,"context_lines":[{"line_number":268,"context_line":"every member port on its own while the aggregate interface, which is what"},{"line_number":269,"context_line":"actually carries the traffic, is never changed."},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"The ``ngs_port_channels`` option tells the driver which switch ports are"},{"line_number":272,"context_line":"members of which aggregate. Aggregates are separated by ``;`` and member"},{"line_number":273,"context_line":"ports by ``,``::"},{"line_number":274,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"2b840449_0b449c3f","line":271,"updated":"2026-09-18 15:09:08.000000000","message":"I guess I need to understand \"why can\u0027t this be provided in stateful configuration that can be changed. The challenge is setting this in static configuration means having to restart neutron to apply configuration changes. And even worse if your neutron is running inside of a container. Sure you might have a proxy in front and numerous neutron containers, but most operating environments are far too dynamic for this to be configuration file based.","commit_id":"5d04cbe6ea4a8ce12c2fed12b7c59bd97c1fcd0b"}],"networking_generic_switch/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":"f36ca87af0b26d46f41d52e380fd9c90bb0f9e57","unresolved":true,"context_lines":[{"line_number":71,"context_line":"    # no local_group_information at all), so without this a bonded host\u0027s"},{"line_number":72,"context_line":"    # member ports get configured one by one as access ports, and the"},{"line_number":73,"context_line":"    # aggregate that actually carries the traffic is never touched."},{"line_number":74,"context_line":"    {\u0027name\u0027: \u0027ngs_port_channels\u0027},"},{"line_number":75,"context_line":"    # Require security groups to be enabled on a per-device basis"},{"line_number":76,"context_line":"    {\u0027name\u0027: \u0027ngs_security_groups_enabled\u0027, \u0027default\u0027: False},"},{"line_number":77,"context_line":"    # Force NETCONF datastore target (\u0027candidate\u0027 or \u0027running\u0027)."}],"source_content_type":"text/x-python","patch_set":1,"id":"4dfff389_f9ec4844","line":74,"updated":"2026-09-18 15:09:08.000000000","message":"Port channels really should come from dynamic configuration state on declared ports, not configuration files.\n\nThe base issue is that to change these values in any environment, your pushing towards a model of k8s operators making config file changes and restarting containers which is super interruptive. The pattern of the binding information being sufficiently authortative is likely ideal as a result.","commit_id":"5d04cbe6ea4a8ce12c2fed12b7c59bd97c1fcd0b"}],"networking_generic_switch/devices/netmiko_devices/__init__.py":[{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"4925188f36539097be901145b01282fa7f615cfd","unresolved":true,"context_lines":[{"line_number":680,"context_line":"        if port_default_vlan:"},{"line_number":681,"context_line":"            # NOTE(mgoddard): Pass network_id and segmentation_id for drivers"},{"line_number":682,"context_line":"            # not yet using network_name."},{"line_number":683,"context_line":"            # With ngs_manage_vlans off the VLAN objects are not ours to"},{"line_number":684,"context_line":"            # create or rename: re-issuing \"vlan N / name N\" here would"},{"line_number":685,"context_line":"            # rename a VLAN that belongs to the switch\u0027s operator."},{"line_number":686,"context_line":"            if self._do_vlan_management():"},{"line_number":687,"context_line":"                network_name \u003d self._get_network_name(port_default_vlan,"},{"line_number":688,"context_line":"                                                      port_default_vlan)"},{"line_number":689,"context_line":"                cmds +\u003d self._format_commands("},{"line_number":690,"context_line":"                    self.ADD_NETWORK,"},{"line_number":691,"context_line":"                    segmentation_id\u003dport_default_vlan,"},{"line_number":692,"context_line":"                    network_id\u003dport_default_vlan,"},{"line_number":693,"context_line":"                    network_name\u003dnetwork_name)"},{"line_number":694,"context_line":"            cmds +\u003d self._format_commands("},{"line_number":695,"context_line":"                self.PLUG_PORT_TO_NETWORK,"},{"line_number":696,"context_line":"                port\u003dport,"}],"source_content_type":"text/x-python","patch_set":1,"id":"698f1daa_e4f7cd39","line":693,"range":{"start_line":683,"start_character":0,"end_line":693,"end_character":46},"updated":"2026-09-18 13:47:11.000000000","message":"This is a separate issue, please create a separate change focusing only on this issue.","commit_id":"5d04cbe6ea4a8ce12c2fed12b7c59bd97c1fcd0b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f36ca87af0b26d46f41d52e380fd9c90bb0f9e57","unresolved":true,"context_lines":[{"line_number":680,"context_line":"        if port_default_vlan:"},{"line_number":681,"context_line":"            # NOTE(mgoddard): Pass network_id and segmentation_id for drivers"},{"line_number":682,"context_line":"            # not yet using network_name."},{"line_number":683,"context_line":"            # With ngs_manage_vlans off the VLAN objects are not ours to"},{"line_number":684,"context_line":"            # create or rename: re-issuing \"vlan N / name N\" here would"},{"line_number":685,"context_line":"            # rename a VLAN that belongs to the switch\u0027s operator."},{"line_number":686,"context_line":"            if self._do_vlan_management():"},{"line_number":687,"context_line":"                network_name \u003d self._get_network_name(port_default_vlan,"},{"line_number":688,"context_line":"                                                      port_default_vlan)"},{"line_number":689,"context_line":"                cmds +\u003d self._format_commands("},{"line_number":690,"context_line":"                    self.ADD_NETWORK,"},{"line_number":691,"context_line":"                    segmentation_id\u003dport_default_vlan,"},{"line_number":692,"context_line":"                    network_id\u003dport_default_vlan,"},{"line_number":693,"context_line":"                    network_name\u003dnetwork_name)"},{"line_number":694,"context_line":"            cmds +\u003d self._format_commands("},{"line_number":695,"context_line":"                self.PLUG_PORT_TO_NETWORK,"},{"line_number":696,"context_line":"                port\u003dport,"}],"source_content_type":"text/x-python","patch_set":1,"id":"0346a26a_064b9a91","line":693,"range":{"start_line":683,"start_character":0,"end_line":693,"end_character":46},"in_reply_to":"698f1daa_e4f7cd39","updated":"2026-09-18 15:09:08.000000000","message":"+1 Furthermore, this is sort of the behavior we expect. When the admin configures Neutron and the physical network names, then they are delegating the entire range of vlans being configured to neutron to manage. So, all external configuration says \"I\u0027m authoritative for this config\", the switch somehow already having an old vlan is okay, it should be squashed because it was likely manual/one-off configuration and incorrect based upon the established expectations of the environment.","commit_id":"5d04cbe6ea4a8ce12c2fed12b7c59bd97c1fcd0b"}],"networking_generic_switch/generic_switch_mech.py":[{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"4925188f36539097be901145b01282fa7f615cfd","unresolved":true,"context_lines":[{"line_number":414,"context_line":""},{"line_number":415,"context_line":"                bond \u003d self._aggregate_for_link(switch, binding_profile,"},{"line_number":416,"context_line":"                                                link)"},{"line_number":417,"context_line":"                # A bonded host reaches neutron as one link per member"},{"line_number":418,"context_line":"                # port; the aggregate is configured once, not per member."},{"line_number":419,"context_line":"                target \u003d (id(switch), bond or port_id)"},{"line_number":420,"context_line":"                if target in plugged:"},{"line_number":421,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":1,"id":"94ad9f73_3f328aa8","line":418,"range":{"start_line":417,"start_character":16,"end_line":418,"end_character":73},"updated":"2026-09-18 13:47:11.000000000","message":"This depends on the bond mode used and potentially also the switch type being managed. For instance if bond mode of balance-rr (0), the switch has no aggregate config at all, e.g. in that case each individual link should be configured.","commit_id":"5d04cbe6ea4a8ce12c2fed12b7c59bd97c1fcd0b"}]}
