)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3ac313066d3faad0b50ff6d96decd19c37dad724","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f5f63075_70505a1d","updated":"2026-08-03 16:18:21.000000000","message":"LGTM, not sure why it\u0027s WIP still","commit_id":"6cbca4056f857fc07a8e9c44bd763e1e21195926"}],"specs/approved/standalone-networking-lag.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":"aa5ea36de27b3802d7af0a03ee3a329421dce3e2","unresolved":true,"context_lines":[{"line_number":8,"context_line":"LAG Support for the Ironic Networking Interface"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://bugs.launchpad.net/ironic/+bug/XXXXXXX"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Bare metal nodes are frequently cabled to their top-of-rack switch with two or"},{"line_number":14,"context_line":"more network interfaces bonded together, using LACP or a static aggregate, to"}],"source_content_type":"text/x-rst","patch_set":1,"id":"66a16faf_8d7f7168","line":11,"range":{"start_line":11,"start_character":39,"end_line":11,"end_character":46},"updated":"2026-08-03 17:09:21.000000000","message":"A bug to track this work please! 😉","commit_id":"6cbca4056f857fc07a8e9c44bd763e1e21195926"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"aa5ea36de27b3802d7af0a03ee3a329421dce3e2","unresolved":true,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Bare metal nodes are frequently cabled to their top-of-rack switch with two or"},{"line_number":14,"context_line":"more network interfaces bonded together, using LACP or a static aggregate, to"},{"line_number":15,"context_line":"gain bandwidth and to survive the loss of a single link or switch. Ironic"},{"line_number":16,"context_line":"already models this on the node side with port groups, and the ``neutron``"},{"line_number":17,"context_line":"network interface already arranges the matching switch-side configuration. The"},{"line_number":18,"context_line":"``ironic-networking`` network interface, introduced by the :doc:`standalone"}],"source_content_type":"text/x-rst","patch_set":1,"id":"d78dfd60_c476085a","line":15,"range":{"start_line":15,"start_character":14,"end_line":15,"end_character":22},"updated":"2026-08-03 17:09:21.000000000","message":"nit: distribute CPU load across processors and not hot-spotting on a single interrupt, as well.","commit_id":"6cbca4056f857fc07a8e9c44bd763e1e21195926"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"aa5ea36de27b3802d7af0a03ee3a329421dce3e2","unresolved":true,"context_lines":[{"line_number":62,"context_line":"A **Deployer** racks a node with two NICs, cabled to two ports on a single"},{"line_number":63,"context_line":"top-of-rack switch (or to two switches in an MLAG/VPC pair). They pre-create"},{"line_number":64,"context_line":"the aggregate on the switch as part of rack build-out, then enroll the node in"},{"line_number":65,"context_line":"Ironic with two ports and a port group joining them."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"An **Admin User** deploys the node. Ironic must place the node on the"},{"line_number":68,"context_line":"provisioning network, PXE boot it, deploy it, and then place the aggregate on"}],"source_content_type":"text/x-rst","patch_set":1,"id":"17b54c28_7d93a135","line":65,"updated":"2026-08-03 17:09:21.000000000","message":"An aside: \n\nOkay, we might need to peel this apart a little bit. Then again, we might not, my thoughts/context below:\n\nOverall what is here is fine. \n\nSome NGS drivers expect the local_link_connection information to have the \"interface\" name to be the *trunk*, while some others don\u0027t. Inherently, the static pre-configured lag case may just sort of work in some cases, but may not work in others. The key here is to make it consistent.  I think that itself is the key to help delineate because the pre-set static name model is inherently broken in dynamic modes.","commit_id":"6cbca4056f857fc07a8e9c44bd763e1e21195926"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"aa5ea36de27b3802d7af0a03ee3a329421dce3e2","unresolved":true,"context_lines":[{"line_number":138,"context_line":"        \u0027interface {bond}\u0027,"},{"line_number":139,"context_line":"        \u0027switchport trunk allowed vlan add {segmentation_id}\u0027)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"The one materially different behavior is that bond members are disabled by"},{"line_number":142,"context_line":"setting link state down (``ENABLE_BOND`` / ``DISABLE_BOND``) rather than by an"},{"line_number":143,"context_line":"administrative shutdown, because shutting a LACP member breaks the bond."},{"line_number":144,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"aa35319d_c11fd5d6","line":141,"updated":"2026-08-03 17:09:21.000000000","message":"FWIW, this begins to pull at the thread with my prior comment.","commit_id":"6cbca4056f857fc07a8e9c44bd763e1e21195926"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"aa5ea36de27b3802d7af0a03ee3a329421dce3e2","unresolved":true,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"The one materially different behavior is that bond members are disabled by"},{"line_number":142,"context_line":"setting link state down (``ENABLE_BOND`` / ``DISABLE_BOND``) rather than by an"},{"line_number":143,"context_line":"administrative shutdown, because shutting a LACP member breaks the bond."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Two conclusions follow, and they shape the rest of this specification:"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"049697f8_b8f61e9c","line":143,"range":{"start_line":143,"start_character":25,"end_line":143,"end_character":72},"updated":"2026-08-03 17:09:21.000000000","message":"This is extra context, we can likely drop it because it is also not always, strictly speaking, true.","commit_id":"6cbca4056f857fc07a8e9c44bd763e1e21195926"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"aa5ea36de27b3802d7af0a03ee3a329421dce3e2","unresolved":true,"context_lines":[{"line_number":153,"context_line":"#. Configuration is applied **per member port**, exactly as the Neutron path"},{"line_number":154,"context_line":"   does. The existing ``update_lag(switch_ids, lag_name, ...)`` stub signature"},{"line_number":155,"context_line":"   carries no member port names and therefore cannot express this; it must"},{"line_number":156,"context_line":"   change."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"LAG lifecycle"},{"line_number":159,"context_line":"-------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"63febcee_468da809","line":156,"updated":"2026-08-03 17:09:21.000000000","message":"This feels like it could be expanded upon. It is entirely possible for the NGS code to delineate the intent out and do the needful.","commit_id":"6cbca4056f857fc07a8e9c44bd763e1e21195926"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3ac313066d3faad0b50ff6d96decd19c37dad724","unresolved":true,"context_lines":[{"line_number":205,"context_line":"----------"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"The LAG name is taken from ``portgroup.name``, with an optional"},{"line_number":208,"context_line":"``extra[\u0027lag\u0027][\u0027lag_name\u0027]`` override for switches whose interface naming is"},{"line_number":209,"context_line":"constrained. Because NGS addresses member interfaces directly, the name is"},{"line_number":210,"context_line":"currently used only for the description string and for logging, but it is"},{"line_number":211,"context_line":"carried through the RPC so that switch drivers capable of addressing the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9da59d5b_395710b9","line":208,"updated":"2026-08-03 16:18:21.000000000","message":"If we want to keep the override, we need to update my spec: I\u0027m proposing to drop it currently based on previous feedback.","commit_id":"6cbca4056f857fc07a8e9c44bd763e1e21195926"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"aa5ea36de27b3802d7af0a03ee3a329421dce3e2","unresolved":true,"context_lines":[{"line_number":205,"context_line":"----------"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"The LAG name is taken from ``portgroup.name``, with an optional"},{"line_number":208,"context_line":"``extra[\u0027lag\u0027][\u0027lag_name\u0027]`` override for switches whose interface naming is"},{"line_number":209,"context_line":"constrained. Because NGS addresses member interfaces directly, the name is"},{"line_number":210,"context_line":"currently used only for the description string and for logging, but it is"},{"line_number":211,"context_line":"carried through the RPC so that switch drivers capable of addressing the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"6c6a9a54_4e35dd4d","line":208,"in_reply_to":"9da59d5b_395710b9","updated":"2026-08-03 17:09:21.000000000","message":"The name does have a nice simplicity to it though... But implied.","commit_id":"6cbca4056f857fc07a8e9c44bd763e1e21195926"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3ac313066d3faad0b50ff6d96decd19c37dad724","unresolved":true,"context_lines":[{"line_number":221,"context_line":"second source of truth only permits the two to disagree. The property remains"},{"line_number":222,"context_line":"in ``SWITCHPORT_SCHEMA`` so that existing port records continue to validate,"},{"line_number":223,"context_line":"but it is documented as deprecated and has no effect for ports belonging to a"},{"line_number":224,"context_line":"port group."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"Multi-switch aggregates (MLAG/VPC)"},{"line_number":227,"context_line":"----------------------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"16e67410_4ccac38a","line":224,"updated":"2026-08-03 16:18:21.000000000","message":"Yep, I won\u0027t carry this one over to the new spec.","commit_id":"6cbca4056f857fc07a8e9c44bd763e1e21195926"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"aa5ea36de27b3802d7af0a03ee3a329421dce3e2","unresolved":true,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"Because configuration is applied per member port, and each member port carries"},{"line_number":230,"context_line":"its own ``switch_id`` in its ``local_link_connection``, member ports spread"},{"line_number":231,"context_line":"across an MLAG or VPC pair are handled without any special casing: each member"},{"line_number":232,"context_line":"is configured on its own switch. Ironic performs no validation that the"},{"line_number":233,"context_line":"switches are actually peered, and does not configure the peer link or the MLAG"},{"line_number":234,"context_line":"domain. Whether the resulting aggregate works is a property of the operator\u0027s"}],"source_content_type":"text/x-rst","patch_set":1,"id":"f81e7aae_b54799e8","line":231,"range":{"start_line":231,"start_character":9,"end_line":231,"end_character":66},"updated":"2026-08-03 17:09:21.000000000","message":"FWIW, I know this is the AI prompt over-loading context into words here, but this is a good reason to keep the name field and leverage it as a static cross-cutting context. Because the names *MUST* match between peered MLAG participants.","commit_id":"6cbca4056f857fc07a8e9c44bd763e1e21195926"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"aa5ea36de27b3802d7af0a03ee3a329421dce3e2","unresolved":true,"context_lines":[{"line_number":485,"context_line":""},{"line_number":486,"context_line":"Nova driver impact"},{"line_number":487,"context_line":"------------------"},{"line_number":488,"context_line":"None. This interface does not support VIF attachment, so the Nova virt driver"},{"line_number":489,"context_line":"is not involved."},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"Ramdisk impact"},{"line_number":492,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"f53c2c0e_c9286820","line":489,"range":{"start_line":488,"start_character":0,"end_line":489,"end_character":16},"updated":"2026-08-03 17:09:21.000000000","message":"s/all this to/Not applicable./ 😉","commit_id":"6cbca4056f857fc07a8e9c44bd763e1e21195926"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3ac313066d3faad0b50ff6d96decd19c37dad724","unresolved":true,"context_lines":[{"line_number":664,"context_line":"* \"New API for standalone networking\" [1]_ — related but not blocking, in"},{"line_number":665,"context_line":"  either direction. That proposed specification introduces"},{"line_number":666,"context_line":"  a first-class ``network_attachments`` resource carrying ``lag_name`` and"},{"line_number":667,"context_line":"  ``aggregation_mode`` fields, which would eventually replace the"},{"line_number":668,"context_line":"  ``extra[\u0027lag\u0027]`` property used here, in the same way it replaces"},{"line_number":669,"context_line":"  ``extra[\u0027switchport\u0027]`` for ports."},{"line_number":670,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"2373052f_d5aa0fdc","line":667,"updated":"2026-08-03 16:18:21.000000000","message":"I\u0027m actually dropping both, I guess you need lag_name in the end.","commit_id":"6cbca4056f857fc07a8e9c44bd763e1e21195926"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"aa5ea36de27b3802d7af0a03ee3a329421dce3e2","unresolved":true,"context_lines":[{"line_number":664,"context_line":"* \"New API for standalone networking\" [1]_ — related but not blocking, in"},{"line_number":665,"context_line":"  either direction. That proposed specification introduces"},{"line_number":666,"context_line":"  a first-class ``network_attachments`` resource carrying ``lag_name`` and"},{"line_number":667,"context_line":"  ``aggregation_mode`` fields, which would eventually replace the"},{"line_number":668,"context_line":"  ``extra[\u0027lag\u0027]`` property used here, in the same way it replaces"},{"line_number":669,"context_line":"  ``extra[\u0027switchport\u0027]`` for ports."},{"line_number":670,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"8cccb11a_2e67ba3f","line":667,"in_reply_to":"2373052f_d5aa0fdc","updated":"2026-08-03 17:09:21.000000000","message":"Yeah, if it can be set/used it would make sense to keep.","commit_id":"6cbca4056f857fc07a8e9c44bd763e1e21195926"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"aa5ea36de27b3802d7af0a03ee3a329421dce3e2","unresolved":true,"context_lines":[{"line_number":742,"context_line":"where previously they received none; this is the intended fix, but operators"},{"line_number":743,"context_line":"who worked around the gap by supplying static ``network_data`` should be aware"},{"line_number":744,"context_line":"their static data still wins."},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"Documentation Impact"},{"line_number":747,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":748,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"537587ea_f2fcf886","line":745,"updated":"2026-08-03 17:09:21.000000000","message":"ask for the next revision: Maybe tl;dr the section into as few words as possible and not letting the AI prompt reiterate every point?","commit_id":"6cbca4056f857fc07a8e9c44bd763e1e21195926"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"aa5ea36de27b3802d7af0a03ee3a329421dce3e2","unresolved":true,"context_lines":[{"line_number":746,"context_line":"Documentation Impact"},{"line_number":747,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"``doc/source/admin/networking.rst`` gains a port group section under the"},{"line_number":750,"context_line":"standalone networking documentation, covering the switch pre-provisioning"},{"line_number":751,"context_line":"requirement with a worked example, the port group and member port fields that"},{"line_number":752,"context_line":"must be set, the ``standalone_ports_supported`` requirement, the tenant-only"}],"source_content_type":"text/x-rst","patch_set":1,"id":"08f74cf3_598ae800","line":749,"updated":"2026-08-03 17:09:21.000000000","message":"Nit: I think splitting out to a separate file might make sense. Networking is already kind of verbse.","commit_id":"6cbca4056f857fc07a8e9c44bd763e1e21195926"}]}
