)]}'
{"/COMMIT_MSG":[{"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":"761c8ba999f5771137a4c1a15e2d41c0e9f42a24","unresolved":true,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Given the limited ability to test fully integrated models"},{"line_number":20,"context_line":"virtually, this feature should be considered experimental"},{"line_number":21,"context_line":"albeit necessary in a propelry operating environment."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Assisted-By: Claude Code - Claude Sonnet 4.5"},{"line_number":24,"context_line":"Change-Id: Ic4d9f115aead4a20b76d81f3c0a45cf51848f18a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"6428847d_89306557","line":21,"updated":"2026-02-24 18:29:22.000000000","message":"spelling: properly","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"}],"/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":"930eb87184ced5c4d6dda4110a3882baf396ba2a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"b8590e8f_a83323dd","updated":"2026-01-27 16:37:24.000000000","message":"This code is horribly broken, I’ll be working on it for the next few days most likely to get it into a working state where it is able to talk to OVN to get the needful data.","commit_id":"83cbf8f4f4bda474fe45f0db04cc933337aa6ee1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5161d59ea3d21be4f5ff7bd684524f63d6b4efdf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"b8909f73_df52b73a","updated":"2026-01-29 17:01:43.000000000","message":"Getting there, some broken logic we need to sort out.","commit_id":"5ea078182929662220ee2f79c2e5e101cfd27970"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3c9898f557891c96ded146be2b3acee247d81b08","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"dd52efa8_78c4d87c","updated":"2026-02-04 05:19:27.000000000","message":"really solid approach. Just some small clean ups I think.","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"89980697f99a54b128137957efb4b6b73552627a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":11,"id":"7ba8b855_dd79a449","updated":"2026-02-13 08:09:17.000000000","message":"Overall good with this. I agree with Jay though. Lots of big blocks of just plain Exception which would be better to break up or make more clear with specific things.","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"dbfd6b9fb462642623a9ef6856a42126d689c327","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"b5c770a9_348506bf","updated":"2026-02-25 00:55:00.000000000","message":"Recheck the word is that the failure is fixed","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ab3b9487c5f4b7afe0ad4f1d36dbd2167e493e54","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"1af7d148_7bd445a8","updated":"2026-02-26 14:19:02.000000000","message":"recheck Made main networking-baremetal ci job more robust.","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b96f9a243d85e9f2ada99f93c38feda9b7d29b82","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"df5963e7_bfe09048","updated":"2026-02-24 18:35:37.000000000","message":"recheck approved","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0e5faf599807a343c229d3d59dd8f95c1f6666fd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"85fdcb66_cad3d6a8","updated":"2026-02-25 02:50:27.000000000","message":"recheck ci should be fixed now","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"88cdc289c7bfa081df06855f488ff1d7cee1272f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"3978c3d9_ebec56b2","updated":"2026-02-25 14:08:55.000000000","message":"recheck job timed out due to vm boot failure","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"774c8273a70b1c12d122d9bc4329411c8e4547fc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"f0fd724c_f8d88c45","updated":"2026-02-26 00:00:32.000000000","message":"recheck multinode job fix merged","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"fbbed0d5b7463edd1cd555cc9ab4e932d1b5e17f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"5fe81cb6_43fdf1ff","updated":"2026-02-24 17:31:00.000000000","message":"spelling in commit message: \"reconcilliation\"","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a772c7dd8978cdaacf29d7e9a4bc2c3c30f3bc2f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":11,"id":"78d32f9f_1406389a","in_reply_to":"7ba8b855_dd79a449","updated":"2026-02-17 12:04:46.000000000","message":"I cleaned that up in a follow-up patch which is hanging off this one.","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"}],"doc/source/configuration/ironic-neutron-agent/index.rst":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"67a993bfd1a3d913da97b5fd715c8f604515bc13","unresolved":true,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"  Configuration Options \u003cconfig\u003e"},{"line_number":12,"context_line":"  Sample Config File \u003csample-config\u003e"},{"line_number":13,"context_line":"  L2VNI Trunk Reconciliation \u003cl2vni-trunk-reconciliation\u003e"}],"source_content_type":"text/x-rst","patch_set":11,"id":"06d56671_fed6694b","line":13,"updated":"2026-02-24 17:24:21.000000000","message":"In OpenStack world, such docs go to admin guide","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"}],"doc/source/configuration/ironic-neutron-agent/l2vni-trunk-reconciliation.rst":[{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3c9898f557891c96ded146be2b3acee247d81b08","unresolved":true,"context_lines":[{"line_number":233,"context_line":"   l2vni_auto_create_networks \u003d True"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"   # Subport anchor network name"},{"line_number":236,"context_line":"   l2vni_subport_anchor_network \u003d l2vni-subport-anchor"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"   # Startup jitter to prevent thundering herd (seconds)"},{"line_number":239,"context_line":"   l2vni_startup_jitter_max \u003d 60"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3b334648_43240a9b","line":236,"updated":"2026-02-04 05:19:27.000000000","message":"l2vni_subport_anchor_network_type","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e6ea7cf5c7ef086f458011af77567d23fb501fdd","unresolved":false,"context_lines":[{"line_number":233,"context_line":"   l2vni_auto_create_networks \u003d True"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"   # Subport anchor network name"},{"line_number":236,"context_line":"   l2vni_subport_anchor_network \u003d l2vni-subport-anchor"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"   # Startup jitter to prevent thundering herd (seconds)"},{"line_number":239,"context_line":"   l2vni_startup_jitter_max \u003d 60"}],"source_content_type":"text/x-rst","patch_set":8,"id":"55674064_a8295499","line":236,"in_reply_to":"3b334648_43240a9b","updated":"2026-02-09 06:34:54.000000000","message":"Docs being updated in the next commit which should address this.","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3c9898f557891c96ded146be2b3acee247d81b08","unresolved":true,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    .. note::"},{"line_number":317,"context_line":"       If you change this value, ensure the network exists or set"},{"line_number":318,"context_line":"       ``l2vni_auto_create_networks \u003d True``."},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"``l2vni_startup_jitter_max``"},{"line_number":321,"context_line":"    **Type**: Integer (seconds)"}],"source_content_type":"text/x-rst","patch_set":8,"id":"8e7ebc94_0a90ea8d","line":318,"updated":"2026-02-04 05:19:27.000000000","message":"l2vni_subport_anchor_network_type","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e6ea7cf5c7ef086f458011af77567d23fb501fdd","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    .. note::"},{"line_number":317,"context_line":"       If you change this value, ensure the network exists or set"},{"line_number":318,"context_line":"       ``l2vni_auto_create_networks \u003d True``."},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"``l2vni_startup_jitter_max``"},{"line_number":321,"context_line":"    **Type**: Integer (seconds)"}],"source_content_type":"text/x-rst","patch_set":8,"id":"e142c654_bb03c5b6","line":318,"in_reply_to":"8e7ebc94_0a90ea8d","updated":"2026-02-09 06:34:54.000000000","message":"Done","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"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":"761c8ba999f5771137a4c1a15e2d41c0e9f42a24","unresolved":true,"context_lines":[{"line_number":89,"context_line":"    │                                                          │"},{"line_number":90,"context_line":"    │  ┌─────────────────────────────────────────┐            │"},{"line_number":91,"context_line":"    │  │   L2VNI Trunk Manager                   │            │"},{"line_number":92,"context_line":"    │  │                                          │            │"},{"line_number":93,"context_line":"    │  │  1. Discover chassis in ha_groups       │            │"},{"line_number":94,"context_line":"    │  │  2. Calculate required VLANs            │            │"},{"line_number":95,"context_line":"    │  │  3. Reconcile trunk subports            │            │"}],"source_content_type":"text/x-rst","patch_set":11,"id":"cf337fd2_f3ef8ce7","line":92,"updated":"2026-02-24 18:29:22.000000000","message":"off by one here and LN89; should move much of this to admin guide","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"63a07da9a04346939abca0419e25faafdbf7dd39","unresolved":true,"context_lines":[{"line_number":89,"context_line":"    │                                                          │"},{"line_number":90,"context_line":"    │  ┌─────────────────────────────────────────┐            │"},{"line_number":91,"context_line":"    │  │   L2VNI Trunk Manager                   │            │"},{"line_number":92,"context_line":"    │  │                                          │            │"},{"line_number":93,"context_line":"    │  │  1. Discover chassis in ha_groups       │            │"},{"line_number":94,"context_line":"    │  │  2. Calculate required VLANs            │            │"},{"line_number":95,"context_line":"    │  │  3. Reconcile trunk subports            │            │"}],"source_content_type":"text/x-rst","patch_set":11,"id":"62964166_aba6ff3d","line":92,"in_reply_to":"cf337fd2_f3ef8ce7","updated":"2026-02-27 14:32:12.000000000","message":"Done, and this is being moved in the next patch.","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"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":"761c8ba999f5771137a4c1a15e2d41c0e9f42a24","unresolved":true,"context_lines":[{"line_number":101,"context_line":"            │ Neutron API calls"},{"line_number":102,"context_line":"            │"},{"line_number":103,"context_line":"    ┌───────▼──────────────────────────────────────────────────┐"},{"line_number":104,"context_line":"    │                    Neutron Server                         │"},{"line_number":105,"context_line":"    │  - Creates/deletes trunk ports                            │"},{"line_number":106,"context_line":"    │  - Manages subports                                       │"},{"line_number":107,"context_line":"    │  - Coordinates with ML2 plugin                            │"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3ed10975_cdbed934","line":104,"updated":"2026-02-24 18:29:22.000000000","message":"off by one","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"63a07da9a04346939abca0419e25faafdbf7dd39","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            │ Neutron API calls"},{"line_number":102,"context_line":"            │"},{"line_number":103,"context_line":"    ┌───────▼──────────────────────────────────────────────────┐"},{"line_number":104,"context_line":"    │                    Neutron Server                         │"},{"line_number":105,"context_line":"    │  - Creates/deletes trunk ports                            │"},{"line_number":106,"context_line":"    │  - Manages subports                                       │"},{"line_number":107,"context_line":"    │  - Coordinates with ML2 plugin                            │"}],"source_content_type":"text/x-rst","patch_set":11,"id":"d5b15dba_4ca9a628","line":104,"in_reply_to":"3ed10975_cdbed934","updated":"2026-02-27 14:32:12.000000000","message":"Done","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"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":"761c8ba999f5771137a4c1a15e2d41c0e9f42a24","unresolved":true,"context_lines":[{"line_number":110,"context_line":"                     │ ML2 mechanism drivers"},{"line_number":111,"context_line":"                     │"},{"line_number":112,"context_line":"    ┌────────────────▼──────────────────────────────────────────┐"},{"line_number":113,"context_line":"    │              Physical Switch Plugins                       │"},{"line_number":114,"context_line":"    │  (e.g., genericswitch)                                     │"},{"line_number":115,"context_line":"    │  - Configures trunk ports on physical switches             │"},{"line_number":116,"context_line":"    │  - Maps VLANs to network node ports                        │"}],"source_content_type":"text/x-rst","patch_set":11,"id":"eacd5486_3a3bc50e","line":113,"updated":"2026-02-24 18:29:22.000000000","message":"off by one","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"63a07da9a04346939abca0419e25faafdbf7dd39","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                     │ ML2 mechanism drivers"},{"line_number":111,"context_line":"                     │"},{"line_number":112,"context_line":"    ┌────────────────▼──────────────────────────────────────────┐"},{"line_number":113,"context_line":"    │              Physical Switch Plugins                       │"},{"line_number":114,"context_line":"    │  (e.g., genericswitch)                                     │"},{"line_number":115,"context_line":"    │  - Configures trunk ports on physical switches             │"},{"line_number":116,"context_line":"    │  - Maps VLANs to network node ports                        │"}],"source_content_type":"text/x-rst","patch_set":11,"id":"34ed4016_4bb89a55","line":113,"in_reply_to":"eacd5486_3a3bc50e","updated":"2026-02-27 14:32:12.000000000","message":"Done","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"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":"761c8ba999f5771137a4c1a15e2d41c0e9f42a24","unresolved":true,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"This information is included in subport binding profiles to enable switch"},{"line_number":189,"context_line":"management plugins (e.g., genericswitch) to configure the physical switch"},{"line_number":190,"context_line":"ports correctly."},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"Prerequisites"},{"line_number":193,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":11,"id":"72042b04_883223df","line":190,"updated":"2026-02-24 18:29:22.000000000","message":"Let\u0027s make sure we document for operators the cases where they might have issues with cache (it may have already been done) -- service restart or wait TTL (1h) is all the oper needs to do if things change.","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"63a07da9a04346939abca0419e25faafdbf7dd39","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"This information is included in subport binding profiles to enable switch"},{"line_number":189,"context_line":"management plugins (e.g., genericswitch) to configure the physical switch"},{"line_number":190,"context_line":"ports correctly."},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"Prerequisites"},{"line_number":193,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":11,"id":"f47e0954_fe31bcd9","line":190,"in_reply_to":"72042b04_883223df","updated":"2026-02-27 14:32:12.000000000","message":"Done in next change.","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"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":"761c8ba999f5771137a4c1a15e2d41c0e9f42a24","unresolved":true,"context_lines":[{"line_number":379,"context_line":"    - Larger values (3600-7200s): Reduced API load, suitable for stable"},{"line_number":380,"context_line":"      deployments where node configurations rarely change"},{"line_number":381,"context_line":"    - For deployments with frequent node changes: 300-600 seconds"},{"line_number":382,"context_line":"    - For stable deployments (1000+ nodes): 3600-7200 seconds"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    **Performance impact:**"},{"line_number":385,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"48622da5_7c5c97d6","line":382,"updated":"2026-02-24 18:29:22.000000000","message":"Maybe add a note here that you can tolerate a longer cache TTL if you are willing to restart the service as part of any automation that changes relevant port metadata.","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"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":"761c8ba999f5771137a4c1a15e2d41c0e9f42a24","unresolved":true,"context_lines":[{"line_number":412,"context_line":"    **Description**: Ironic shard to filter nodes when querying for"},{"line_number":413,"context_line":"    local_link_connection data. This allows the agent to only query nodes"},{"line_number":414,"context_line":"    in a specific shard, significantly reducing API load in large sharded"},{"line_number":415,"context_line":"    deployments."},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    If not specified, all nodes are queried (subject to conductor group"},{"line_number":418,"context_line":"    filtering)."}],"source_content_type":"text/x-rst","patch_set":11,"id":"7da98520_2efa409b","line":415,"updated":"2026-02-24 18:29:22.000000000","message":"Add something like (under \"tuning guidance\") using shards reduces the overall nodes to query for information, making lower TTL values for cache_size more reasonable.","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"}],"networking_baremetal/agent/agent_config.py":[{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3c9898f557891c96ded146be2b3acee247d81b08","unresolved":true,"context_lines":[{"line_number":57,"context_line":"        help\u003d\u0027Name of the shared network used for all trunk subports. This \u0027"},{"line_number":58,"context_line":"             \u0027network is used to signal VLAN bindings to ML2 switch plugins \u0027"},{"line_number":59,"context_line":"             \u0027and does not pass actual traffic. Will be auto-created if \u0027"},{"line_number":60,"context_line":"             \u0027l2vni_auto_create_networks is enabled.\u0027),"},{"line_number":61,"context_line":"    cfg.IntOpt("},{"line_number":62,"context_line":"        \u0027l2vni_startup_jitter_max\u0027,"},{"line_number":63,"context_line":"        default\u003d60,"}],"source_content_type":"text/x-python","patch_set":8,"id":"0764b40e_e8b26f29","line":60,"updated":"2026-02-04 05:19:27.000000000","message":"cfg.StrOpt(\u0027l2vni_subport_anchor_network_type\u0027, default\u003d\u0027geneve\u0027, help...),","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e6ea7cf5c7ef086f458011af77567d23fb501fdd","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        help\u003d\u0027Name of the shared network used for all trunk subports. This \u0027"},{"line_number":58,"context_line":"             \u0027network is used to signal VLAN bindings to ML2 switch plugins \u0027"},{"line_number":59,"context_line":"             \u0027and does not pass actual traffic. Will be auto-created if \u0027"},{"line_number":60,"context_line":"             \u0027l2vni_auto_create_networks is enabled.\u0027),"},{"line_number":61,"context_line":"    cfg.IntOpt("},{"line_number":62,"context_line":"        \u0027l2vni_startup_jitter_max\u0027,"},{"line_number":63,"context_line":"        default\u003d60,"}],"source_content_type":"text/x-python","patch_set":8,"id":"166e2501_05f5c089","line":60,"in_reply_to":"0764b40e_e8b26f29","updated":"2026-02-09 06:34:54.000000000","message":"Done","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"}],"networking_baremetal/agent/ironic_neutron_agent.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":"664cce45334cdec663a4492866312b6dfcc98ea7","unresolved":true,"context_lines":[{"line_number":446,"context_line":"        :returns: OpenStack SDK Connection object for accessing network APIs"},{"line_number":447,"context_line":"        \"\"\""},{"line_number":448,"context_line":"        # Reuse cached ironic session to avoid duplicate config registration"},{"line_number":449,"context_line":"        session \u003d ironic_client._get_ironic_session()"},{"line_number":450,"context_line":"        # Don\u0027t pass oslo_conf - let SDK discover services from service catalog"},{"line_number":451,"context_line":"        # Passing oslo_conf causes SDK to look for service-specific config"},{"line_number":452,"context_line":"        # sections which don\u0027t exist for neutron in this agent\u0027s config"}],"source_content_type":"text/x-python","patch_set":7,"id":"edc3b992_bbf359df","line":449,"range":{"start_line":449,"start_character":8,"end_line":449,"end_character":53},"updated":"2026-02-02 14:05:39.000000000","message":"Need to double check this.","commit_id":"1efb39875175e2430252866d579e91881b0c943e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e6ea7cf5c7ef086f458011af77567d23fb501fdd","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        :returns: OpenStack SDK Connection object for accessing network APIs"},{"line_number":447,"context_line":"        \"\"\""},{"line_number":448,"context_line":"        # Reuse cached ironic session to avoid duplicate config registration"},{"line_number":449,"context_line":"        session \u003d ironic_client._get_ironic_session()"},{"line_number":450,"context_line":"        # Don\u0027t pass oslo_conf - let SDK discover services from service catalog"},{"line_number":451,"context_line":"        # Passing oslo_conf causes SDK to look for service-specific config"},{"line_number":452,"context_line":"        # sections which don\u0027t exist for neutron in this agent\u0027s config"}],"source_content_type":"text/x-python","patch_set":7,"id":"f72ea1dd_102f7c1a","line":449,"range":{"start_line":449,"start_character":8,"end_line":449,"end_character":53},"in_reply_to":"a4d05021_513a9bee","updated":"2026-02-09 06:34:54.000000000","message":"Done","commit_id":"1efb39875175e2430252866d579e91881b0c943e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"12221a905bfce0d33faf91f5f698fc80164c8e7d","unresolved":true,"context_lines":[{"line_number":446,"context_line":"        :returns: OpenStack SDK Connection object for accessing network APIs"},{"line_number":447,"context_line":"        \"\"\""},{"line_number":448,"context_line":"        # Reuse cached ironic session to avoid duplicate config registration"},{"line_number":449,"context_line":"        session \u003d ironic_client._get_ironic_session()"},{"line_number":450,"context_line":"        # Don\u0027t pass oslo_conf - let SDK discover services from service catalog"},{"line_number":451,"context_line":"        # Passing oslo_conf causes SDK to look for service-specific config"},{"line_number":452,"context_line":"        # sections which don\u0027t exist for neutron in this agent\u0027s config"}],"source_content_type":"text/x-python","patch_set":7,"id":"a4d05021_513a9bee","line":449,"range":{"start_line":449,"start_character":8,"end_line":449,"end_character":53},"in_reply_to":"edc3b992_bbf359df","updated":"2026-02-04 13:58:04.000000000","message":"Yeah, this is an ironic client, it needs to be fixed.","commit_id":"1efb39875175e2430252866d579e91881b0c943e"},{"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":"761c8ba999f5771137a4c1a15e2d41c0e9f42a24","unresolved":true,"context_lines":[{"line_number":216,"context_line":"            # First run happens after jitter only, subsequent runs at interval"},{"line_number":217,"context_line":"            # NOTE: Using pseudo-random is acceptable for jitter (S311)"},{"line_number":218,"context_line":"            jitter \u003d random.randint(  # noqa: S311"},{"line_number":219,"context_line":"                0, CONF.l2vni.l2vni_startup_jitter_max)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"            self.l2vni_reconcile \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":222,"context_line":"                self._reconcile_l2vni_trunks)"}],"source_content_type":"text/x-python","patch_set":11,"id":"a2b8dc14_f449a29d","line":219,"updated":"2026-02-24 18:29:22.000000000","message":"We could trivially get rid of S311 noqa: https://docs.astral.sh/ruff/rules/suspicious-non-cryptographic-random-usage/","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"63a07da9a04346939abca0419e25faafdbf7dd39","unresolved":true,"context_lines":[{"line_number":216,"context_line":"            # First run happens after jitter only, subsequent runs at interval"},{"line_number":217,"context_line":"            # NOTE: Using pseudo-random is acceptable for jitter (S311)"},{"line_number":218,"context_line":"            jitter \u003d random.randint(  # noqa: S311"},{"line_number":219,"context_line":"                0, CONF.l2vni.l2vni_startup_jitter_max)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"            self.l2vni_reconcile \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":222,"context_line":"                self._reconcile_l2vni_trunks)"}],"source_content_type":"text/x-python","patch_set":11,"id":"e3865f02_6053867d","line":219,"in_reply_to":"a2b8dc14_f449a29d","updated":"2026-02-27 14:32:12.000000000","message":"Done in the follow-up change.","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"}],"networking_baremetal/agent/l2vni_config.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":"664cce45334cdec663a4492866312b6dfcc98ea7","unresolved":true,"context_lines":[{"line_number":42,"context_line":"             \u0027not available from OVN LLDP data or Ironic. The file should \u0027"},{"line_number":43,"context_line":"             \u0027define system_id, physical_network, and local_link_connection \u0027"},{"line_number":44,"context_line":"             \u0027information for each network node.\u0027),"},{"line_number":45,"context_line":"    cfg.BoolOpt("},{"line_number":46,"context_line":"        \u0027l2vni_auto_create_networks\u0027,"},{"line_number":47,"context_line":"        default\u003dTrue,"},{"line_number":48,"context_line":"        help\u003d\u0027Automatically create Neutron networks for ha_chassis_groups \u0027"},{"line_number":49,"context_line":"             \u0027and subport anchors if they do not exist. These networks are \u0027"},{"line_number":50,"context_line":"             \u0027used for metadata and modeling, not for passing traffic. If \u0027"},{"line_number":51,"context_line":"             \u0027disabled, networks must be pre-created with names matching \u0027"},{"line_number":52,"context_line":"             \u0027the expected patterns.\u0027),"},{"line_number":53,"context_line":"    cfg.StrOpt("},{"line_number":54,"context_line":"        \u0027l2vni_subport_anchor_network\u0027,"},{"line_number":55,"context_line":"        default\u003d\u0027l2vni-subport-anchor\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"8713e5e3_ae343e86","line":52,"range":{"start_line":45,"start_character":0,"end_line":52,"end_character":39},"updated":"2026-02-02 14:05:39.000000000","message":"Maybe we shouldn\u0027t provide this as an option?","commit_id":"1efb39875175e2430252866d579e91881b0c943e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"664cce45334cdec663a4492866312b6dfcc98ea7","unresolved":true,"context_lines":[{"line_number":50,"context_line":"             \u0027used for metadata and modeling, not for passing traffic. If \u0027"},{"line_number":51,"context_line":"             \u0027disabled, networks must be pre-created with names matching \u0027"},{"line_number":52,"context_line":"             \u0027the expected patterns.\u0027),"},{"line_number":53,"context_line":"    cfg.StrOpt("},{"line_number":54,"context_line":"        \u0027l2vni_subport_anchor_network\u0027,"},{"line_number":55,"context_line":"        default\u003d\u0027l2vni-subport-anchor\u0027,"},{"line_number":56,"context_line":"        help\u003d\u0027Name of the shared network used for all trunk subports. This \u0027"},{"line_number":57,"context_line":"             \u0027network is used to signal VLAN bindings to ML2 switch plugins \u0027"},{"line_number":58,"context_line":"             \u0027and does not pass actual traffic. Will be auto-created if \u0027"},{"line_number":59,"context_line":"             \u0027l2vni_auto_create_networks is enabled.\u0027),"},{"line_number":60,"context_line":"    cfg.BoolOpt("},{"line_number":61,"context_line":"        \u0027l2vni_enable_event_listener\u0027,"},{"line_number":62,"context_line":"        default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":7,"id":"726446b9_d5c0c884","line":59,"range":{"start_line":53,"start_character":0,"end_line":59,"end_character":55},"updated":"2026-02-02 14:05:39.000000000","message":"similarly, do we really need to configure this.","commit_id":"1efb39875175e2430252866d579e91881b0c943e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"664cce45334cdec663a4492866312b6dfcc98ea7","unresolved":true,"context_lines":[{"line_number":57,"context_line":"             \u0027network is used to signal VLAN bindings to ML2 switch plugins \u0027"},{"line_number":58,"context_line":"             \u0027and does not pass actual traffic. Will be auto-created if \u0027"},{"line_number":59,"context_line":"             \u0027l2vni_auto_create_networks is enabled.\u0027),"},{"line_number":60,"context_line":"    cfg.BoolOpt("},{"line_number":61,"context_line":"        \u0027l2vni_enable_event_listener\u0027,"},{"line_number":62,"context_line":"        default\u003dTrue,"},{"line_number":63,"context_line":"        help\u003d\u0027Enable event-driven fast reconciliation. When enabled, the \u0027"},{"line_number":64,"context_line":"             \u0027agent listens for router and network change notifications and \u0027"},{"line_number":65,"context_line":"             \u0027temporarily increases reconciliation frequency. Disable for \u0027"},{"line_number":66,"context_line":"             \u0027periodic-only reconciliation if event processing overhead is a \u0027"},{"line_number":67,"context_line":"             \u0027concern.\u0027),"},{"line_number":68,"context_line":"    cfg.IntOpt("},{"line_number":69,"context_line":"        \u0027l2vni_startup_jitter_max\u0027,"},{"line_number":70,"context_line":"        default\u003d60,"}],"source_content_type":"text/x-python","patch_set":7,"id":"47617e2f_01682d16","line":67,"range":{"start_line":60,"start_character":0,"end_line":67,"end_character":25},"updated":"2026-02-02 14:05:39.000000000","message":"This can go away.","commit_id":"1efb39875175e2430252866d579e91881b0c943e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"12221a905bfce0d33faf91f5f698fc80164c8e7d","unresolved":false,"context_lines":[{"line_number":57,"context_line":"             \u0027network is used to signal VLAN bindings to ML2 switch plugins \u0027"},{"line_number":58,"context_line":"             \u0027and does not pass actual traffic. Will be auto-created if \u0027"},{"line_number":59,"context_line":"             \u0027l2vni_auto_create_networks is enabled.\u0027),"},{"line_number":60,"context_line":"    cfg.BoolOpt("},{"line_number":61,"context_line":"        \u0027l2vni_enable_event_listener\u0027,"},{"line_number":62,"context_line":"        default\u003dTrue,"},{"line_number":63,"context_line":"        help\u003d\u0027Enable event-driven fast reconciliation. When enabled, the \u0027"},{"line_number":64,"context_line":"             \u0027agent listens for router and network change notifications and \u0027"},{"line_number":65,"context_line":"             \u0027temporarily increases reconciliation frequency. Disable for \u0027"},{"line_number":66,"context_line":"             \u0027periodic-only reconciliation if event processing overhead is a \u0027"},{"line_number":67,"context_line":"             \u0027concern.\u0027),"},{"line_number":68,"context_line":"    cfg.IntOpt("},{"line_number":69,"context_line":"        \u0027l2vni_startup_jitter_max\u0027,"},{"line_number":70,"context_line":"        default\u003d60,"}],"source_content_type":"text/x-python","patch_set":7,"id":"849657d3_40d63e08","line":67,"range":{"start_line":60,"start_character":0,"end_line":67,"end_character":25},"in_reply_to":"47617e2f_01682d16","updated":"2026-02-04 13:58:04.000000000","message":"Done","commit_id":"1efb39875175e2430252866d579e91881b0c943e"}],"networking_baremetal/agent/l2vni_events.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":"59bab799a9ee9e4af3833218cb726574cc199b15","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2026 Red Hat, Inc."},{"line_number":2,"context_line":"# All Rights Reserved"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":5,"id":"c067bd43_0b626092","line":1,"updated":"2026-01-30 17:23:55.000000000","message":"This entire events model is going away. Its not available to remote services, only plugins. 😭","commit_id":"98384c3950e89bbdea4a30f2c4cf3c02b60660e7"}],"networking_baremetal/agent/l2vni_trunk_manager.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":"5161d59ea3d21be4f5ff7bd684524f63d6b4efdf","unresolved":true,"context_lines":[{"line_number":265,"context_line":"                for chassis in self.ovn_sb_idl.tables[\u0027Chassis\u0027].rows.values():"},{"line_number":266,"context_line":"                    if chassis.name not in chassis_names:"},{"line_number":267,"context_line":"                        continue"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"                    system_id \u003d chassis.external_ids.get(\u0027system-id\u0027)"},{"line_number":270,"context_line":"                    if not system_id:"},{"line_number":271,"context_line":"                        LOG.warning(\"Chassis %s missing system-id\","},{"line_number":272,"context_line":"                                    chassis.name)"},{"line_number":273,"context_line":"                        continue"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"                    bridge_mappings \u003d chassis.external_ids.get("},{"line_number":276,"context_line":"                        \u0027ovn-bridge-mappings\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"974e167b_ce6e6d7c","line":273,"range":{"start_line":268,"start_character":0,"end_line":273,"end_character":32},"updated":"2026-01-29 17:01:43.000000000","message":"hitting this on my devstack system, uhhhhh. :\\\n\nstack@devstack-prime:~$ sudo ovn-sbctl list Chassis\n_uuid               : 1bd5a3e8-4dbe-4735-94ee-c9174ead1d11\nencaps              : [af3ab310-be26-47f1-81ef-5e368e90a574]\nexternal_ids        : {ct-no-masked-label\u003d\"true\", datapath-type\u003dsystem, iface-types\u003d\"bareudp,erspan,geneve,gre,gtpu,internal,ip6erspan,ip6gre,lisp,patch,stt,system,tap,vxlan\", is-interconn\u003d\"false\", ovn-bridge-mappings\u003d\"mynetwork:brbm,public:br-ex\", ovn-chassis-mac-mappings\u003d\"\", ovn-cms-options\u003denable-chassis-as-gw, ovn-ct-lb-related\u003d\"true\", ovn-enable-lflow-cache\u003d\"true\", ovn-limit-lflow-cache\u003d\"\", ovn-memlimit-lflow-cache-kb\u003d\"\", ovn-monitor-all\u003d\"false\", ovn-trim-limit-lflow-cache\u003d\"\", ovn-trim-timeout-ms\u003d\"\", ovn-trim-wmark-perc-lflow-cache\u003d\"\", port-up-notif\u003d\"true\"}\nhostname            : devstack-prime\nname                : \"3f340bcb-2645-43cb-8b9d-49c2d9921444\"\nnb_cfg              : 0\nother_config        : {ct-no-masked-label\u003d\"true\", datapath-type\u003dsystem, iface-types\u003d\"bareudp,erspan,geneve,gre,gtpu,internal,ip6erspan,ip6gre,lisp,patch,stt,system,tap,vxlan\", is-interconn\u003d\"false\", ovn-bridge-mappings\u003d\"mynetwork:brbm,public:br-ex\", ovn-chassis-mac-mappings\u003d\"\", ovn-cms-options\u003denable-chassis-as-gw, ovn-ct-lb-related\u003d\"true\", ovn-enable-lflow-cache\u003d\"true\", ovn-limit-lflow-cache\u003d\"\", ovn-memlimit-lflow-cache-kb\u003d\"\", ovn-monitor-all\u003d\"false\", ovn-trim-limit-lflow-cache\u003d\"\", ovn-trim-timeout-ms\u003d\"\", ovn-trim-wmark-perc-lflow-cache\u003d\"\", port-up-notif\u003d\"true\"}\ntransport_zones     : []\nvtep_logical_switches: []\n\nstack@devstack-prime:~$ sudo ovn-nbctl list HA_Chassis_Group\n_uuid               : d85af463-616b-4f69-ac43-152b19d9a3b6\nexternal_ids        : {\"neutron:availability_zone_hints\"\u003d\"\", \"neutron:network_id\"\u003d\"dff5e3fa-7e42-4581-a998-fe04953ccbba\", \"neutron:router_id\"\u003d\"26386192-d720-433c-b0bb-6ca8635b183a\"}\nha_chassis          : [6b1cac98-ec18-4983-aba4-9dffb49a7637]\nname                : neutron-dff5e3fa-7e42-4581-a998-fe04953ccbba\n\n_uuid               : 14b32e93-5ced-4d6b-a52c-c020d28e0d2a\nexternal_ids        : {\"neutron:availability_zone_hints\"\u003d\"\", \"neutron:network_id\"\u003d\"05b6012d-f6ec-4c21-ae31-9fb5c885c02f\", \"neutron:router_id\"\u003d\"26386192-d720-433c-b0bb-6ca8635b183a\"}\nha_chassis          : [2972a8ff-7625-4e0b-b480-9b25ff0de8af]\nname                : neutron-05b6012d-f6ec-4c21-ae31-9fb5c885c02f\nstack@devstack-prime:~$ sudo ovn-nbctl list HA_Chassis\n_uuid               : 6b1cac98-ec18-4983-aba4-9dffb49a7637\nchassis_name        : \"3f340bcb-2645-43cb-8b9d-49c2d9921444\"\nexternal_ids        : {}\npriority            : 1\n\n_uuid               : 2972a8ff-7625-4e0b-b480-9b25ff0de8af\nchassis_name        : \"3f340bcb-2645-43cb-8b9d-49c2d9921444\"\nexternal_ids        : {}\npriority            : 1\nstack@devstack-prime:~$\n\nSo there is a structural break in the modeling. Here it uses hostname for the individual chassis. \n\nChassis \"3f340bcb-2645-43cb-8b9d-49c2d9921444\"\n    hostname: devstack-prime\n    Encap geneve\n        ip: \"192.168.122.129\"\n        options: {csum\u003d\"true\"}\n    Port_Binding cr-lrp-4e5d8440-347c-457a-bb31-e17af71caf68\n    Port_Binding \"7a292714-0ff3-49c0-ad89-913214f9c01b\"\n    Port_Binding cr-lrp-b4834173-53dd-4b25-ae7e-a85b9beb67b9\n    Port_Binding \"5a96f3c7-e0f3-4fdb-84c3-d07c08cdce22\"","commit_id":"5ea078182929662220ee2f79c2e5e101cfd27970"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"311ab4f75baa00d70099e3ad1e8322289327e8d8","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                for chassis in self.ovn_sb_idl.tables[\u0027Chassis\u0027].rows.values():"},{"line_number":266,"context_line":"                    if chassis.name not in chassis_names:"},{"line_number":267,"context_line":"                        continue"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"                    system_id \u003d chassis.external_ids.get(\u0027system-id\u0027)"},{"line_number":270,"context_line":"                    if not system_id:"},{"line_number":271,"context_line":"                        LOG.warning(\"Chassis %s missing system-id\","},{"line_number":272,"context_line":"                                    chassis.name)"},{"line_number":273,"context_line":"                        continue"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"                    bridge_mappings \u003d chassis.external_ids.get("},{"line_number":276,"context_line":"                        \u0027ovn-bridge-mappings\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ae685c38_a2879e43","line":273,"range":{"start_line":268,"start_character":0,"end_line":273,"end_character":32},"in_reply_to":"974e167b_ce6e6d7c","updated":"2026-01-30 18:08:19.000000000","message":"Done","commit_id":"5ea078182929662220ee2f79c2e5e101cfd27970"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"121f6a8e566fd383d4877fb0ad4f60f18178d600","unresolved":true,"context_lines":[{"line_number":217,"context_line":"                admin_state_up\u003dTrue,"},{"line_number":218,"context_line":"                shared\u003dFalse,"},{"line_number":219,"context_line":"                is_default\u003dFalse,"},{"line_number":220,"context_line":"                provider_network_type\u003d\u0027geneve\u0027"},{"line_number":221,"context_line":"            )"},{"line_number":222,"context_line":"        LOG.debug(\"Created ha_chassis_group network: %s\", network.id)"},{"line_number":223,"context_line":"        return network.id"}],"source_content_type":"text/x-python","patch_set":6,"id":"0b30ae9e_6efd9f97","line":220,"updated":"2026-01-30 21:10:00.000000000","message":"uhh, vxlan this should be.","commit_id":"22f938a2460d2afd31a30fab87ba3d1ac8717c06"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"12221a905bfce0d33faf91f5f698fc80164c8e7d","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                admin_state_up\u003dTrue,"},{"line_number":218,"context_line":"                shared\u003dFalse,"},{"line_number":219,"context_line":"                is_default\u003dFalse,"},{"line_number":220,"context_line":"                provider_network_type\u003d\u0027geneve\u0027"},{"line_number":221,"context_line":"            )"},{"line_number":222,"context_line":"        LOG.debug(\"Created ha_chassis_group network: %s\", network.id)"},{"line_number":223,"context_line":"        return network.id"}],"source_content_type":"text/x-python","patch_set":6,"id":"eda224fa_739ca513","line":220,"in_reply_to":"0b30ae9e_6efd9f97","updated":"2026-02-04 13:58:04.000000000","message":"Done","commit_id":"22f938a2460d2afd31a30fab87ba3d1ac8717c06"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3c9898f557891c96ded146be2b3acee247d81b08","unresolved":true,"context_lines":[{"line_number":41,"context_line":"# Device owner types for L2VNI infrastructure ports"},{"line_number":42,"context_line":"DEVICE_OWNER_L2VNI_ANCHOR \u003d \u0027baremetal:l2vni_anchor\u0027"},{"line_number":43,"context_line":"DEVICE_OWNER_L2VNI_SUBPORT \u003d \u0027baremetal:l2vni_subport\u0027"},{"line_number":44,"context_line":"DEVICE_OWNER_L2VNI_NETWORK \u003d \u0027baremetal:l2vni_network\u0027"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class L2VNITrunkManager:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fffcdecd_ea26021f","line":44,"updated":"2026-02-04 05:19:27.000000000","message":"Should we get these promoted to neutron-lib?","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"63a07da9a04346939abca0419e25faafdbf7dd39","unresolved":false,"context_lines":[{"line_number":41,"context_line":"# Device owner types for L2VNI infrastructure ports"},{"line_number":42,"context_line":"DEVICE_OWNER_L2VNI_ANCHOR \u003d \u0027baremetal:l2vni_anchor\u0027"},{"line_number":43,"context_line":"DEVICE_OWNER_L2VNI_SUBPORT \u003d \u0027baremetal:l2vni_subport\u0027"},{"line_number":44,"context_line":"DEVICE_OWNER_L2VNI_NETWORK \u003d \u0027baremetal:l2vni_network\u0027"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class L2VNITrunkManager:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1341320d_b0ef88c2","line":44,"in_reply_to":"2fbd5693_3b4a6fe8","updated":"2026-02-27 14:32:12.000000000","message":"Done","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e6ea7cf5c7ef086f458011af77567d23fb501fdd","unresolved":true,"context_lines":[{"line_number":41,"context_line":"# Device owner types for L2VNI infrastructure ports"},{"line_number":42,"context_line":"DEVICE_OWNER_L2VNI_ANCHOR \u003d \u0027baremetal:l2vni_anchor\u0027"},{"line_number":43,"context_line":"DEVICE_OWNER_L2VNI_SUBPORT \u003d \u0027baremetal:l2vni_subport\u0027"},{"line_number":44,"context_line":"DEVICE_OWNER_L2VNI_NETWORK \u003d \u0027baremetal:l2vni_network\u0027"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class L2VNITrunkManager:"}],"source_content_type":"text/x-python","patch_set":8,"id":"2fbd5693_3b4a6fe8","line":44,"in_reply_to":"f0096b60_32a67b6d","updated":"2026-02-09 06:34:54.000000000","message":"Added a todo.","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"12221a905bfce0d33faf91f5f698fc80164c8e7d","unresolved":true,"context_lines":[{"line_number":41,"context_line":"# Device owner types for L2VNI infrastructure ports"},{"line_number":42,"context_line":"DEVICE_OWNER_L2VNI_ANCHOR \u003d \u0027baremetal:l2vni_anchor\u0027"},{"line_number":43,"context_line":"DEVICE_OWNER_L2VNI_SUBPORT \u003d \u0027baremetal:l2vni_subport\u0027"},{"line_number":44,"context_line":"DEVICE_OWNER_L2VNI_NETWORK \u003d \u0027baremetal:l2vni_network\u0027"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class L2VNITrunkManager:"}],"source_content_type":"text/x-python","patch_set":8,"id":"f0096b60_32a67b6d","line":44,"in_reply_to":"fffcdecd_ea26021f","updated":"2026-02-04 13:58:04.000000000","message":"Eventually, perhaps. We can\u0027t realistically block on this at the moment given that would require landing/merger/release in under a week which I don\u0027t expect to happen.","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3c9898f557891c96ded146be2b3acee247d81b08","unresolved":true,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def _ensure_subport_anchor_network(self):"},{"line_number":153,"context_line":"        \"\"\"Ensure the shared subport anchor network exists.\"\"\""},{"line_number":154,"context_line":"        network_name \u003d CONF.l2vni.l2vni_subport_anchor_network"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        # Check if network exists"},{"line_number":157,"context_line":"        networks \u003d self.neutron.network.networks(name\u003dnetwork_name)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9c895b12_ac5bf3f8","line":154,"updated":"2026-02-04 05:19:27.000000000","message":"network_type \u003d CONF.l2vni.l2vni_subport_anchor_network_type","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e6ea7cf5c7ef086f458011af77567d23fb501fdd","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def _ensure_subport_anchor_network(self):"},{"line_number":153,"context_line":"        \"\"\"Ensure the shared subport anchor network exists.\"\"\""},{"line_number":154,"context_line":"        network_name \u003d CONF.l2vni.l2vni_subport_anchor_network"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        # Check if network exists"},{"line_number":157,"context_line":"        networks \u003d self.neutron.network.networks(name\u003dnetwork_name)"}],"source_content_type":"text/x-python","patch_set":8,"id":"c38e10c0_62eaff8c","line":154,"in_reply_to":"9c895b12_ac5bf3f8","updated":"2026-02-09 06:34:54.000000000","message":"Done","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3c9898f557891c96ded146be2b3acee247d81b08","unresolved":true,"context_lines":[{"line_number":167,"context_line":"                admin_state_up\u003dTrue,"},{"line_number":168,"context_line":"                shared\u003dFalse,"},{"line_number":169,"context_line":"                is_default\u003dFalse,"},{"line_number":170,"context_line":"                provider_network_type\u003d\u0027geneve\u0027"},{"line_number":171,"context_line":"            )"},{"line_number":172,"context_line":"        except sdkexc.BadRequestException:"},{"line_number":173,"context_line":"            # Okay, Possible issue. We tried for a geneve network by default,"}],"source_content_type":"text/x-python","patch_set":8,"id":"21954e1c_d142b295","line":170,"updated":"2026-02-04 05:19:27.000000000","message":"This be configurable in the config file. I\u0027ve made suggestions to this.","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e6ea7cf5c7ef086f458011af77567d23fb501fdd","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                admin_state_up\u003dTrue,"},{"line_number":168,"context_line":"                shared\u003dFalse,"},{"line_number":169,"context_line":"                is_default\u003dFalse,"},{"line_number":170,"context_line":"                provider_network_type\u003d\u0027geneve\u0027"},{"line_number":171,"context_line":"            )"},{"line_number":172,"context_line":"        except sdkexc.BadRequestException:"},{"line_number":173,"context_line":"            # Okay, Possible issue. We tried for a geneve network by default,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5596167a_ab82d084","line":170,"in_reply_to":"21954e1c_d142b295","updated":"2026-02-09 06:34:54.000000000","message":"Done","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3c9898f557891c96ded146be2b3acee247d81b08","unresolved":true,"context_lines":[{"line_number":189,"context_line":"        :param ha_group: OVN HA_Chassis_Group row"},{"line_number":190,"context_line":"        :returns: Network ID"},{"line_number":191,"context_line":"        \"\"\""},{"line_number":192,"context_line":"        network_name \u003d f\"l2vni-ha-group-{ha_group.name}\""},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        # Check if network exists"},{"line_number":195,"context_line":"        networks \u003d self.neutron.network.networks(name\u003dnetwork_name)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ebb6494f_09d2f5a3","line":192,"updated":"2026-02-04 05:19:27.000000000","message":"So this is undocumented and really seems like its in place of the anchor network.\n\nThis whole function is almost the same as well.","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e6ea7cf5c7ef086f458011af77567d23fb501fdd","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        :param ha_group: OVN HA_Chassis_Group row"},{"line_number":190,"context_line":"        :returns: Network ID"},{"line_number":191,"context_line":"        \"\"\""},{"line_number":192,"context_line":"        network_name \u003d f\"l2vni-ha-group-{ha_group.name}\""},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        # Check if network exists"},{"line_number":195,"context_line":"        networks \u003d self.neutron.network.networks(name\u003dnetwork_name)"}],"source_content_type":"text/x-python","patch_set":8,"id":"68c37b21_5f150777","line":192,"in_reply_to":"ebb6494f_09d2f5a3","updated":"2026-02-09 06:34:54.000000000","message":"Refactored and combined.","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3c9898f557891c96ded146be2b3acee247d81b08","unresolved":true,"context_lines":[{"line_number":340,"context_line":"        :returns: Trunk ID or None"},{"line_number":341,"context_line":"        \"\"\""},{"line_number":342,"context_line":"        # Try to find existing trunk"},{"line_number":343,"context_line":"        trunk_name \u003d f\"l2vni-trunk-{system_id}-{physnet}\""},{"line_number":344,"context_line":"        trunks \u003d self.neutron.network.trunks(name\u003dtrunk_name)"},{"line_number":345,"context_line":"        for trunk in trunks:"},{"line_number":346,"context_line":"            return trunk.id"}],"source_content_type":"text/x-python","patch_set":8,"id":"e82731a2_976f7dd1","line":343,"updated":"2026-02-04 05:19:27.000000000","message":"Should probably be a helper function","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e6ea7cf5c7ef086f458011af77567d23fb501fdd","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        :returns: Trunk ID or None"},{"line_number":341,"context_line":"        \"\"\""},{"line_number":342,"context_line":"        # Try to find existing trunk"},{"line_number":343,"context_line":"        trunk_name \u003d f\"l2vni-trunk-{system_id}-{physnet}\""},{"line_number":344,"context_line":"        trunks \u003d self.neutron.network.trunks(name\u003dtrunk_name)"},{"line_number":345,"context_line":"        for trunk in trunks:"},{"line_number":346,"context_line":"            return trunk.id"}],"source_content_type":"text/x-python","patch_set":8,"id":"55d38ea6_a158b879","line":343,"in_reply_to":"e82731a2_976f7dd1","updated":"2026-02-09 06:34:54.000000000","message":"Done","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3c9898f557891c96ded146be2b3acee247d81b08","unresolved":true,"context_lines":[{"line_number":380,"context_line":"        :param physnet: Physical network name"},{"line_number":381,"context_line":"        :returns: Port ID or None"},{"line_number":382,"context_line":"        \"\"\""},{"line_number":383,"context_line":"        port_name \u003d f\"l2vni-anchor-{system_id}-{physnet}\""},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        # Try to find existing port"},{"line_number":386,"context_line":"        ports \u003d self.neutron.network.ports(name\u003dport_name)"}],"source_content_type":"text/x-python","patch_set":8,"id":"a66d805d_65f52735","line":383,"updated":"2026-02-04 05:19:27.000000000","message":"help func","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e6ea7cf5c7ef086f458011af77567d23fb501fdd","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        :param physnet: Physical network name"},{"line_number":381,"context_line":"        :returns: Port ID or None"},{"line_number":382,"context_line":"        \"\"\""},{"line_number":383,"context_line":"        port_name \u003d f\"l2vni-anchor-{system_id}-{physnet}\""},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        # Try to find existing port"},{"line_number":386,"context_line":"        ports \u003d self.neutron.network.ports(name\u003dport_name)"}],"source_content_type":"text/x-python","patch_set":8,"id":"335e5d56_fc81d19e","line":383,"in_reply_to":"a66d805d_65f52735","updated":"2026-02-09 06:34:54.000000000","message":"Done","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3c9898f557891c96ded146be2b3acee247d81b08","unresolved":true,"context_lines":[{"line_number":403,"context_line":"                network_id\u003dnetwork_id,"},{"line_number":404,"context_line":"                device_owner\u003dDEVICE_OWNER_L2VNI_ANCHOR,"},{"line_number":405,"context_line":"                admin_state_up\u003dTrue,"},{"line_number":406,"context_line":"                binding_vnic_type\u003d\u0027baremetal\u0027,"},{"line_number":407,"context_line":"                binding_profile\u003d{"},{"line_number":408,"context_line":"                    \u0027system_id\u0027: system_id,"},{"line_number":409,"context_line":"                    \u0027physical_network\u0027: physnet"}],"source_content_type":"text/x-python","patch_set":8,"id":"71084044_2ac091e3","line":406,"updated":"2026-02-04 05:19:27.000000000","message":"```suggestion\n                binding_vnic_type\u003dportbindings.VNIC_BAREMETAL,\n```","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e6ea7cf5c7ef086f458011af77567d23fb501fdd","unresolved":false,"context_lines":[{"line_number":403,"context_line":"                network_id\u003dnetwork_id,"},{"line_number":404,"context_line":"                device_owner\u003dDEVICE_OWNER_L2VNI_ANCHOR,"},{"line_number":405,"context_line":"                admin_state_up\u003dTrue,"},{"line_number":406,"context_line":"                binding_vnic_type\u003d\u0027baremetal\u0027,"},{"line_number":407,"context_line":"                binding_profile\u003d{"},{"line_number":408,"context_line":"                    \u0027system_id\u0027: system_id,"},{"line_number":409,"context_line":"                    \u0027physical_network\u0027: physnet"}],"source_content_type":"text/x-python","patch_set":8,"id":"673d107d_8c6104c8","line":406,"in_reply_to":"71084044_2ac091e3","updated":"2026-02-09 06:34:54.000000000","message":"Done","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3c9898f557891c96ded146be2b3acee247d81b08","unresolved":true,"context_lines":[{"line_number":434,"context_line":"                    networks \u003d self.neutron.network.networks("},{"line_number":435,"context_line":"                        name\u003dnetwork_name)"},{"line_number":436,"context_line":"                    for network in networks:"},{"line_number":437,"context_line":"                        return network.id"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        return None"},{"line_number":440,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5e6d9ea4_c08bb7f2","line":437,"updated":"2026-02-04 05:19:27.000000000","message":"Are we really going to have multiple networks per HA chassis group? If not can\u0027t we just grab the one network for the HA chassis group?","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"12221a905bfce0d33faf91f5f698fc80164c8e7d","unresolved":true,"context_lines":[{"line_number":434,"context_line":"                    networks \u003d self.neutron.network.networks("},{"line_number":435,"context_line":"                        name\u003dnetwork_name)"},{"line_number":436,"context_line":"                    for network in networks:"},{"line_number":437,"context_line":"                        return network.id"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        return None"},{"line_number":440,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"f44cc20c_12dcd0c5","line":437,"in_reply_to":"5e6d9ea4_c08bb7f2","updated":"2026-02-04 13:58:04.000000000","message":"As I understand it, it is disjointed. The code here is hunting for the ha group network which is singular, the pattern claude whipped for the line above is just being defensive even thought here really should only ever be one matching network by name. We could just likely return the first entry\u0027s ID value and call it a day if present and set, but to be defensive we still need to evaluate that we had a list of objects, and that the first object has an id field. I guess at the end of the day its just a bit more graceful.","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"63a07da9a04346939abca0419e25faafdbf7dd39","unresolved":true,"context_lines":[{"line_number":434,"context_line":"                    networks \u003d self.neutron.network.networks("},{"line_number":435,"context_line":"                        name\u003dnetwork_name)"},{"line_number":436,"context_line":"                    for network in networks:"},{"line_number":437,"context_line":"                        return network.id"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        return None"},{"line_number":440,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fd284ad9_539b1123","line":437,"in_reply_to":"f44cc20c_12dcd0c5","updated":"2026-02-27 14:32:12.000000000","message":"I *think* we have resolved this, fwiw.","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3c9898f557891c96ded146be2b3acee247d81b08","unresolved":true,"context_lines":[{"line_number":734,"context_line":"        :param vlan_id: VLAN ID for segmentation"},{"line_number":735,"context_line":"        :param anchor_network_id: Subport anchor network UUID"},{"line_number":736,"context_line":"        \"\"\""},{"line_number":737,"context_line":"        port_name \u003d f\"l2vni-subport-{system_id}-{physnet}-vlan{vlan_id}\""},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"        # Get local_link_connection"},{"line_number":740,"context_line":"        local_link \u003d self._get_local_link_connection(system_id, physnet)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba82b2b7_ec875ca9","line":737,"updated":"2026-02-04 05:19:27.000000000","message":"helper func","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e6ea7cf5c7ef086f458011af77567d23fb501fdd","unresolved":false,"context_lines":[{"line_number":734,"context_line":"        :param vlan_id: VLAN ID for segmentation"},{"line_number":735,"context_line":"        :param anchor_network_id: Subport anchor network UUID"},{"line_number":736,"context_line":"        \"\"\""},{"line_number":737,"context_line":"        port_name \u003d f\"l2vni-subport-{system_id}-{physnet}-vlan{vlan_id}\""},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"        # Get local_link_connection"},{"line_number":740,"context_line":"        local_link \u003d self._get_local_link_connection(system_id, physnet)"}],"source_content_type":"text/x-python","patch_set":8,"id":"28959f35_24d7a56d","line":737,"in_reply_to":"ba82b2b7_ec875ca9","updated":"2026-02-09 06:34:54.000000000","message":"Done","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3c9898f557891c96ded146be2b3acee247d81b08","unresolved":true,"context_lines":[{"line_number":912,"context_line":"                # Note: This requires the node to have system_id in properties"},{"line_number":913,"context_line":"                node \u003d self.ironic.get_node(port.node_id)"},{"line_number":914,"context_line":"                node_system_id \u003d node.properties.get(\u0027system_id\u0027)"},{"line_number":915,"context_line":"                if node_system_id !\u003d system_id:"},{"line_number":916,"context_line":"                    continue"},{"line_number":917,"context_line":""},{"line_number":918,"context_line":"                # Check if port matches physnet"}],"source_content_type":"text/x-python","patch_set":8,"id":"a29f1088_8126df7c","line":915,"updated":"2026-02-04 05:19:27.000000000","message":"Can we not invert this whole loop to grab the node with that property? and then just grab its ports?","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e6ea7cf5c7ef086f458011af77567d23fb501fdd","unresolved":true,"context_lines":[{"line_number":912,"context_line":"                # Note: This requires the node to have system_id in properties"},{"line_number":913,"context_line":"                node \u003d self.ironic.get_node(port.node_id)"},{"line_number":914,"context_line":"                node_system_id \u003d node.properties.get(\u0027system_id\u0027)"},{"line_number":915,"context_line":"                if node_system_id !\u003d system_id:"},{"line_number":916,"context_line":"                    continue"},{"line_number":917,"context_line":""},{"line_number":918,"context_line":"                # Check if port matches physnet"}],"source_content_type":"text/x-python","patch_set":8,"id":"76d75636_737fe791","line":915,"in_reply_to":"008a2e66_0ef3f91b","updated":"2026-02-09 06:34:54.000000000","message":"Okay, proposing an entirely different model of interaction here because ultimately the ports hits as an environment scales are insane. This new model starts with nodes, and obtains the linkage. At least that is the intent.","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"12221a905bfce0d33faf91f5f698fc80164c8e7d","unresolved":true,"context_lines":[{"line_number":912,"context_line":"                # Note: This requires the node to have system_id in properties"},{"line_number":913,"context_line":"                node \u003d self.ironic.get_node(port.node_id)"},{"line_number":914,"context_line":"                node_system_id \u003d node.properties.get(\u0027system_id\u0027)"},{"line_number":915,"context_line":"                if node_system_id !\u003d system_id:"},{"line_number":916,"context_line":"                    continue"},{"line_number":917,"context_line":""},{"line_number":918,"context_line":"                # Check if port matches physnet"}],"source_content_type":"text/x-python","patch_set":8,"id":"008a2e66_0ef3f91b","line":915,"in_reply_to":"a29f1088_8126df7c","updated":"2026-02-04 13:58:04.000000000","message":"Umm, we can\u0027t substring search the properties field, I don\u0027t think...  Unless we just expect it to match. ?!","commit_id":"d1c9ada49951728c73481b51f17e1deee151328d"},{"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":"b909e36d11a322d8eb3649ebc834f384397eb970","unresolved":true,"context_lines":[{"line_number":106,"context_line":"        self.member_manager \u003d member_manager"},{"line_number":107,"context_line":"        self.agent_id \u003d agent_id"},{"line_number":108,"context_line":"        self._config_cache \u003d None"},{"line_number":109,"context_line":"        self._ironic_cache \u003d {}  # Per-record cache: system_id -\u003e data"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def _should_manage_chassis(self, system_id):"},{"line_number":112,"context_line":"        \"\"\"Check if this agent should manage this chassis based on hash ring."}],"source_content_type":"text/x-python","patch_set":10,"id":"f5a54d79_90bc99e7","line":109,"updated":"2026-02-10 19:46:16.000000000","message":"This isn\u0027t thread safe; does it need to be?","commit_id":"c6080ac6220785249c8aaa7792eedd64410455b5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c6c4f1135544c5507b31f9e95d36abcd7a30e9c2","unresolved":true,"context_lines":[{"line_number":106,"context_line":"        self.member_manager \u003d member_manager"},{"line_number":107,"context_line":"        self.agent_id \u003d agent_id"},{"line_number":108,"context_line":"        self._config_cache \u003d None"},{"line_number":109,"context_line":"        self._ironic_cache \u003d {}  # Per-record cache: system_id -\u003e data"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def _should_manage_chassis(self, system_id):"},{"line_number":112,"context_line":"        \"\"\"Check if this agent should manage this chassis based on hash ring."}],"source_content_type":"text/x-python","patch_set":10,"id":"ede21d0e_15a7a280","line":109,"in_reply_to":"f5a54d79_90bc99e7","updated":"2026-02-11 07:32:39.000000000","message":"It’s a periodic job, so it should only ever be a single thread running. We can add more locking but it didn’t really seem needful because it is a periodic and that framework blocks the next call until the prior call is completed.","commit_id":"c6080ac6220785249c8aaa7792eedd64410455b5"},{"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":"b909e36d11a322d8eb3649ebc834f384397eb970","unresolved":true,"context_lines":[{"line_number":300,"context_line":""},{"line_number":301,"context_line":"            return ha_groups"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        except Exception:"},{"line_number":304,"context_line":"            LOG.exception(\"Failed to get ha_chassis_groups from OVN\")"},{"line_number":305,"context_line":"            return []"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3c20497e_935ca247","line":303,"updated":"2026-02-10 19:46:16.000000000","message":"lots of except Exception, would prefer these be more specific if possible","commit_id":"c6080ac6220785249c8aaa7792eedd64410455b5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"63a07da9a04346939abca0419e25faafdbf7dd39","unresolved":false,"context_lines":[{"line_number":300,"context_line":""},{"line_number":301,"context_line":"            return ha_groups"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        except Exception:"},{"line_number":304,"context_line":"            LOG.exception(\"Failed to get ha_chassis_groups from OVN\")"},{"line_number":305,"context_line":"            return []"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"a859b30a_8daa5c2c","line":303,"in_reply_to":"2edade40_21927705","updated":"2026-02-27 14:32:12.000000000","message":"Its in the follow-up change.","commit_id":"c6080ac6220785249c8aaa7792eedd64410455b5"},{"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":"761c8ba999f5771137a4c1a15e2d41c0e9f42a24","unresolved":true,"context_lines":[{"line_number":300,"context_line":""},{"line_number":301,"context_line":"            return ha_groups"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        except Exception:"},{"line_number":304,"context_line":"            LOG.exception(\"Failed to get ha_chassis_groups from OVN\")"},{"line_number":305,"context_line":"            return []"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"2edade40_21927705","line":303,"in_reply_to":"3c20497e_935ca247","updated":"2026-02-24 18:29:22.000000000","message":"We didn\u0027t get the one I actually commented on 😞","commit_id":"c6080ac6220785249c8aaa7792eedd64410455b5"},{"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":"b909e36d11a322d8eb3649ebc834f384397eb970","unresolved":true,"context_lines":[{"line_number":977,"context_line":"        :param system_id: Chassis system-id"},{"line_number":978,"context_line":"        :returns: dict with cached_at, node_uuid, and ports list, or None"},{"line_number":979,"context_line":"        \"\"\""},{"line_number":980,"context_line":"        import time"},{"line_number":981,"context_line":""},{"line_number":982,"context_line":"        try:"},{"line_number":983,"context_line":"            # Build query filters"}],"source_content_type":"text/x-python","patch_set":10,"id":"f5824432_cc2bd0cc","line":980,"updated":"2026-02-10 19:46:16.000000000","message":"late import not permitted -- how in the heck is pep8 job not catching this!? -- see also _get_local_link_from_ironic for same issue","commit_id":"c6080ac6220785249c8aaa7792eedd64410455b5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c6c4f1135544c5507b31f9e95d36abcd7a30e9c2","unresolved":true,"context_lines":[{"line_number":977,"context_line":"        :param system_id: Chassis system-id"},{"line_number":978,"context_line":"        :returns: dict with cached_at, node_uuid, and ports list, or None"},{"line_number":979,"context_line":"        \"\"\""},{"line_number":980,"context_line":"        import time"},{"line_number":981,"context_line":""},{"line_number":982,"context_line":"        try:"},{"line_number":983,"context_line":"            # Build query filters"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f6b2d03_ddef0c1d","line":980,"in_reply_to":"f5824432_cc2bd0cc","updated":"2026-02-11 07:32:39.000000000","message":"Yeah, I need to get Claude to stop doing that. 😭","commit_id":"c6080ac6220785249c8aaa7792eedd64410455b5"},{"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":"761c8ba999f5771137a4c1a15e2d41c0e9f42a24","unresolved":true,"context_lines":[{"line_number":376,"context_line":"                    for physnet in physnets:"},{"line_number":377,"context_line":"                        chassis_physnets.add((system_id, physnet))"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"        except Exception:"},{"line_number":380,"context_line":"            LOG.exception(\"Failed to get chassis physnets\")"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        return chassis_physnets"}],"source_content_type":"text/x-python","patch_set":11,"id":"dece1c18_b26e41c2","line":379,"updated":"2026-02-24 18:29:22.000000000","message":"except Exception","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"63a07da9a04346939abca0419e25faafdbf7dd39","unresolved":false,"context_lines":[{"line_number":376,"context_line":"                    for physnet in physnets:"},{"line_number":377,"context_line":"                        chassis_physnets.add((system_id, physnet))"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"        except Exception:"},{"line_number":380,"context_line":"            LOG.exception(\"Failed to get chassis physnets\")"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        return chassis_physnets"}],"source_content_type":"text/x-python","patch_set":11,"id":"c4183d8d_5206ceb8","line":379,"in_reply_to":"dece1c18_b26e41c2","updated":"2026-02-27 14:32:12.000000000","message":"In the follow-up change.","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"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":"761c8ba999f5771137a4c1a15e2d41c0e9f42a24","unresolved":true,"context_lines":[{"line_number":530,"context_line":"                    if chassis.name \u003d\u003d chassis_name:"},{"line_number":531,"context_line":"                        return chassis"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"        except Exception:"},{"line_number":534,"context_line":"            LOG.exception(\"Failed to get chassis %s\", chassis_name)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":11,"id":"ebc70083_63ce160c","line":533,"updated":"2026-02-24 18:29:22.000000000","message":"bare except","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"63a07da9a04346939abca0419e25faafdbf7dd39","unresolved":false,"context_lines":[{"line_number":530,"context_line":"                    if chassis.name \u003d\u003d chassis_name:"},{"line_number":531,"context_line":"                        return chassis"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"        except Exception:"},{"line_number":534,"context_line":"            LOG.exception(\"Failed to get chassis %s\", chassis_name)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":11,"id":"e14b3396_6efa248c","line":533,"in_reply_to":"ebc70083_63ce160c","updated":"2026-02-27 14:32:12.000000000","message":"In the follow-up already.","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"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":"761c8ba999f5771137a4c1a15e2d41c0e9f42a24","unresolved":true,"context_lines":[{"line_number":635,"context_line":"                                if ls.name \u003d\u003d ls_name and lsp in ls.ports:"},{"line_number":636,"context_line":"                                    return True"},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"        except Exception:"},{"line_number":639,"context_line":"            LOG.exception(\"Failed to check for localnet port on network %s\","},{"line_number":640,"context_line":"                          network_id)"},{"line_number":641,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"fb06231d_fda87775","line":638,"updated":"2026-02-24 18:29:22.000000000","message":"bare except","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"63a07da9a04346939abca0419e25faafdbf7dd39","unresolved":false,"context_lines":[{"line_number":635,"context_line":"                                if ls.name \u003d\u003d ls_name and lsp in ls.ports:"},{"line_number":636,"context_line":"                                    return True"},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"        except Exception:"},{"line_number":639,"context_line":"            LOG.exception(\"Failed to check for localnet port on network %s\","},{"line_number":640,"context_line":"                          network_id)"},{"line_number":641,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1f01c54c_05185422","line":638,"in_reply_to":"fb06231d_fda87775","updated":"2026-02-27 14:32:12.000000000","message":"In the follow-up already.","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"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":"761c8ba999f5771137a4c1a15e2d41c0e9f42a24","unresolved":true,"context_lines":[{"line_number":664,"context_line":"                        chassis_set.add(chassis.name)"},{"line_number":665,"context_line":""},{"line_number":666,"context_line":"        except Exception:"},{"line_number":667,"context_line":"            LOG.exception(\"Failed to get chassis with physnet %s\", physnet)"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"        return chassis_set"},{"line_number":670,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"72334704_0bd0d29b","line":667,"updated":"2026-02-24 18:29:22.000000000","message":"bare except","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"63a07da9a04346939abca0419e25faafdbf7dd39","unresolved":false,"context_lines":[{"line_number":664,"context_line":"                        chassis_set.add(chassis.name)"},{"line_number":665,"context_line":""},{"line_number":666,"context_line":"        except Exception:"},{"line_number":667,"context_line":"            LOG.exception(\"Failed to get chassis with physnet %s\", physnet)"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"        return chassis_set"},{"line_number":670,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"66f0c377_0c958dbe","line":667,"in_reply_to":"72334704_0bd0d29b","updated":"2026-02-27 14:32:12.000000000","message":"Done, in the follow-up already.","commit_id":"93ae2e24d66a70ccbfe04ce52ae7e7e51effa2ea"}]}
