)]}'
{"/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":"8e797e17834491ba145cd1c6ceb5018888a8f391","unresolved":true,"context_lines":[{"line_number":12,"context_line":"VLAN to segmentation ID such that repeatable and reliable port binding"},{"line_number":13,"context_line":"occurs for bare metal workloads. As a result of a lack of engagement"},{"line_number":14,"context_line":"and the likely need to have a bit more baremetal specific logic,"},{"line_number":15,"context_line":"we\u0027ve chosen to move it to networking-baremetal to make forward."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Original commit message with updated and different Chagne-ID"},{"line_number":18,"context_line":"follows this point."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"8c24348e_5bbf3b17","line":15,"updated":"2026-02-10 19:30:12.000000000","message":"*move forward","commit_id":"ae36d6ec0cf331a738a0579ad287ffb69c2df7ac"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"dd2dd344ceecebf69886ce4fb9c9ea5b9fc053ef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"ce8737f5_912e4ec7","updated":"2026-01-22 22:18:50.000000000","message":"Great basis for us to iterate on. Thanks for being the champion!","commit_id":"319112eee0b53409116078817c0146e399efbc17"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f100b04f60cfdfcd928e8f75070a06766a15c41b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"1060b9d5_20b6be29","updated":"2026-02-02 14:31:03.000000000","message":"A couple updates inbound shortly.","commit_id":"c841d41fc6f49c6c8277767d54c28277af114132"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"47d0cf8416a58726004b4867ad4c9cfa4491cd58","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"68c9038a_84cb45b2","updated":"2026-01-30 15:42:11.000000000","message":"Looks good overall. Made some comments, but nothing strikes as something to block on.","commit_id":"c841d41fc6f49c6c8277767d54c28277af114132"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"51d50717170a7d77fecede7bb5d11c27a7ecec97","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"bb46453a_7402861a","updated":"2026-02-04 04:28:11.000000000","message":"We pass in ovn_client as a variable and check it a number of times at runtime. I feel like since its coming from self we can check it once early on and just use it. But again that can be a follow on.","commit_id":"77bc846949ef3dd16d634281d2d98958ba146042"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e68e9e4112bc9ed719048a19ec824e81f8443607","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"1934a9cf_e9e1cbf2","updated":"2026-02-04 20:48:12.000000000","message":"lgtm, comments can be follow ups.","commit_id":"3c34c9268660fab0cb087c552745657f669538f6"},{"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":"b5ca9f5b8548abff017cdd873787f44fec23616c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":11,"id":"52876eab_f7ad7925","updated":"2026-02-09 01:31:00.000000000","message":"I don\u0027t have requisite context for a +2 on this pass, but let me know if you need me to upgrade my vote.","commit_id":"2172d546f7a8e8582b2505fd0d63a8888dc9b0aa"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"1cfde5449150abb9643668b28b4b1179de6b55d8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"51a4f663_4357abfb","updated":"2026-02-11 06:39:51.000000000","message":"As a new driver I think this is ready enough to merge. It will give folk the opportunity to actually try it.","commit_id":"ae36d6ec0cf331a738a0579ad287ffb69c2df7ac"}],"doc/source/configuration/ml2/l2vni-example.ini":[{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"dd2dd344ceecebf69886ce4fb9c9ea5b9fc053ef","unresolved":true,"context_lines":[{"line_number":10,"context_line":"mechanism_drivers \u003d ovn,baremetal_l2vni,baremetal,genericswitch"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"# Enable overlay network types"},{"line_number":13,"context_line":"type_drivers \u003d local,flat,vlan,vxlan,geneve"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"# Configure VLAN ranges for dynamic segment allocation"},{"line_number":16,"context_line":"# Each overlay network with baremetal ports will allocate one VLAN"}],"source_content_type":"text/x-properties","patch_set":6,"id":"ab914fa5_55386cea","line":13,"updated":"2026-01-22 22:18:50.000000000","message":"Order matters here as well if we\u0027re not going to set `tenant_network_types`. I think we should. I\u0027ve also removed `local` since that\u0027s really just an escape hatch with no validation and not something someone should use in production.\n\n```suggestion\ntype_drivers \u003d flat,vlan,vxlan,geneve\n\ntenant_network_types \u003d vxlan,geneve\n```","commit_id":"319112eee0b53409116078817c0146e399efbc17"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f100b04f60cfdfcd928e8f75070a06766a15c41b","unresolved":false,"context_lines":[{"line_number":10,"context_line":"mechanism_drivers \u003d ovn,baremetal_l2vni,baremetal,genericswitch"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"# Enable overlay network types"},{"line_number":13,"context_line":"type_drivers \u003d local,flat,vlan,vxlan,geneve"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"# Configure VLAN ranges for dynamic segment allocation"},{"line_number":16,"context_line":"# Each overlay network with baremetal ports will allocate one VLAN"}],"source_content_type":"text/x-properties","patch_set":6,"id":"c71cf853_18687f48","line":13,"in_reply_to":"ab914fa5_55386cea","updated":"2026-02-02 14:31:03.000000000","message":"Done","commit_id":"319112eee0b53409116078817c0146e399efbc17"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"47d0cf8416a58726004b4867ad4c9cfa4491cd58","unresolved":true,"context_lines":[{"line_number":45,"context_line":"# OVN configuration"},{"line_number":46,"context_line":"# Ensure bridge mappings are configured for your physical networks"},{"line_number":47,"context_line":"[ovn]"},{"line_number":48,"context_line":"bridge_mappings \u003d physnet1:br-provider,physnet2:br-external"},{"line_number":49,"context_line":"ovn_nb_connection \u003d tcp:127.0.0.1:6641"},{"line_number":50,"context_line":"ovn_sb_connection \u003d tcp:127.0.0.1:6642"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-properties","patch_set":8,"id":"f035ac84_984cabce","line":48,"updated":"2026-01-30 15:42:11.000000000","message":"Is bridge_mappings a valid config option in the OVN section?\nI do not see it in https://opendev.org/openstack/neutron/src/branch/master/neutron/conf/plugins/ml2/drivers/ovn/ovn_conf.py#L32","commit_id":"c841d41fc6f49c6c8277767d54c28277af114132"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f100b04f60cfdfcd928e8f75070a06766a15c41b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"# OVN configuration"},{"line_number":46,"context_line":"# Ensure bridge mappings are configured for your physical networks"},{"line_number":47,"context_line":"[ovn]"},{"line_number":48,"context_line":"bridge_mappings \u003d physnet1:br-provider,physnet2:br-external"},{"line_number":49,"context_line":"ovn_nb_connection \u003d tcp:127.0.0.1:6641"},{"line_number":50,"context_line":"ovn_sb_connection \u003d tcp:127.0.0.1:6642"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-properties","patch_set":8,"id":"77739d42_8e94dffe","line":48,"in_reply_to":"127f8ac5_b0352ce2","updated":"2026-02-02 14:31:03.000000000","message":"Done","commit_id":"c841d41fc6f49c6c8277767d54c28277af114132"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c85e0a678c5d0bd6cdaa13cdb8756a0093ee30a1","unresolved":true,"context_lines":[{"line_number":45,"context_line":"# OVN configuration"},{"line_number":46,"context_line":"# Ensure bridge mappings are configured for your physical networks"},{"line_number":47,"context_line":"[ovn]"},{"line_number":48,"context_line":"bridge_mappings \u003d physnet1:br-provider,physnet2:br-external"},{"line_number":49,"context_line":"ovn_nb_connection \u003d tcp:127.0.0.1:6641"},{"line_number":50,"context_line":"ovn_sb_connection \u003d tcp:127.0.0.1:6642"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-properties","patch_set":8,"id":"127f8ac5_b0352ce2","line":48,"in_reply_to":"f035ac84_984cabce","updated":"2026-01-30 17:23:20.000000000","message":"Your right, it is internal configuration. Le-sigh. I think we need to likely expand upon the comment there.","commit_id":"c841d41fc6f49c6c8277767d54c28277af114132"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"47d0cf8416a58726004b4867ad4c9cfa4491cd58","unresolved":true,"context_lines":[{"line_number":90,"context_line":"# - Allocate a dynamic VLAN segment (e.g., VLAN 150) on physnet1"},{"line_number":91,"context_line":"# - Create an OVN localnet port to bridge VXLAN \u003c-\u003e VLAN 150"},{"line_number":92,"context_line":"# - Bind the port using the VLAN segment"},{"line_number":93,"context_line":"# - Genericswitch will configure the physical switch port"}],"source_content_type":"text/x-properties","patch_set":8,"id":"fe523776_81944370","line":93,"range":{"start_line":93,"start_character":4,"end_line":93,"end_character":17},"updated":"2026-01-30 15:42:11.000000000","message":"nit picking, \"Another ML2 driver, for example Genericswitch, will configure ...\"","commit_id":"c841d41fc6f49c6c8277767d54c28277af114132"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f100b04f60cfdfcd928e8f75070a06766a15c41b","unresolved":false,"context_lines":[{"line_number":90,"context_line":"# - Allocate a dynamic VLAN segment (e.g., VLAN 150) on physnet1"},{"line_number":91,"context_line":"# - Create an OVN localnet port to bridge VXLAN \u003c-\u003e VLAN 150"},{"line_number":92,"context_line":"# - Bind the port using the VLAN segment"},{"line_number":93,"context_line":"# - Genericswitch will configure the physical switch port"}],"source_content_type":"text/x-properties","patch_set":8,"id":"9f9033e8_b2d91594","line":93,"range":{"start_line":93,"start_character":4,"end_line":93,"end_character":17},"in_reply_to":"fe523776_81944370","updated":"2026-02-02 14:31:03.000000000","message":"Done","commit_id":"c841d41fc6f49c6c8277767d54c28277af114132"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"51d50717170a7d77fecede7bb5d11c27a7ecec97","unresolved":true,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"# Example: Create a VXLAN network and baremetal port"},{"line_number":56,"context_line":"#"},{"line_number":57,"context_line":"# IMPORTANT: Do NOT use provider networks (--provider-network-type,"},{"line_number":58,"context_line":"# --provider-segment) as they bypass ML2 orchestration needed for"},{"line_number":59,"context_line":"# proper VNI\u003c-\u003eVLAN mapping!"},{"line_number":60,"context_line":"#"}],"source_content_type":"text/x-properties","patch_set":9,"id":"cb9f9e14_18f7475c","line":57,"updated":"2026-02-04 04:28:11.000000000","message":"This IMPORTANT block is wrong. You can specify those flags just fine. They can only be specified by admins and if you\u0027re not an admin or you didn\u0027t provide it then it will default to the `tenant_network_types`.","commit_id":"77bc846949ef3dd16d634281d2d98958ba146042"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"80046695a8947474ff8ecfcb89b80d5e777cc99a","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"# Example: Create a VXLAN network and baremetal port"},{"line_number":56,"context_line":"#"},{"line_number":57,"context_line":"# IMPORTANT: Do NOT use provider networks (--provider-network-type,"},{"line_number":58,"context_line":"# --provider-segment) as they bypass ML2 orchestration needed for"},{"line_number":59,"context_line":"# proper VNI\u003c-\u003eVLAN mapping!"},{"line_number":60,"context_line":"#"}],"source_content_type":"text/x-properties","patch_set":9,"id":"cf68393b_52c7b787","line":57,"in_reply_to":"249b0d60_76d0b481","updated":"2026-02-04 21:09:27.000000000","message":"Done","commit_id":"77bc846949ef3dd16d634281d2d98958ba146042"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6f89592b637a7c2b1ff01d5df31c22975c65bedc","unresolved":true,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"# Example: Create a VXLAN network and baremetal port"},{"line_number":56,"context_line":"#"},{"line_number":57,"context_line":"# IMPORTANT: Do NOT use provider networks (--provider-network-type,"},{"line_number":58,"context_line":"# --provider-segment) as they bypass ML2 orchestration needed for"},{"line_number":59,"context_line":"# proper VNI\u003c-\u003eVLAN mapping!"},{"line_number":60,"context_line":"#"}],"source_content_type":"text/x-properties","patch_set":9,"id":"249b0d60_76d0b481","line":57,"in_reply_to":"cb9f9e14_18f7475c","updated":"2026-02-04 13:46:51.000000000","message":"Okay, its wrong in that ML2 orchestration still really gets triggered, but lower OVN mechanics don\u0027t act upon attaching the network out.","commit_id":"77bc846949ef3dd16d634281d2d98958ba146042"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"51d50717170a7d77fecede7bb5d11c27a7ecec97","unresolved":true,"context_lines":[{"line_number":58,"context_line":"# --provider-segment) as they bypass ML2 orchestration needed for"},{"line_number":59,"context_line":"# proper VNI\u003c-\u003eVLAN mapping!"},{"line_number":60,"context_line":"#"},{"line_number":61,"context_line":"# 1. Create tenant overlay network (explicitly specify type):"},{"line_number":62,"context_line":"#    openstack network create \\"},{"line_number":63,"context_line":"#      --network-type vxlan \\"},{"line_number":64,"context_line":"#      overlay-network"}],"source_content_type":"text/x-properties","patch_set":9,"id":"c84d7dbc_3a579ced","line":61,"updated":"2026-02-04 04:28:11.000000000","message":"```suggestion\n# 1. Create tenant overlay network (if you want to specify the type):\n```","commit_id":"77bc846949ef3dd16d634281d2d98958ba146042"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"80046695a8947474ff8ecfcb89b80d5e777cc99a","unresolved":false,"context_lines":[{"line_number":58,"context_line":"# --provider-segment) as they bypass ML2 orchestration needed for"},{"line_number":59,"context_line":"# proper VNI\u003c-\u003eVLAN mapping!"},{"line_number":60,"context_line":"#"},{"line_number":61,"context_line":"# 1. Create tenant overlay network (explicitly specify type):"},{"line_number":62,"context_line":"#    openstack network create \\"},{"line_number":63,"context_line":"#      --network-type vxlan \\"},{"line_number":64,"context_line":"#      overlay-network"}],"source_content_type":"text/x-properties","patch_set":9,"id":"5d330c0b_7abf2568","line":61,"in_reply_to":"c84d7dbc_3a579ced","updated":"2026-02-04 21:09:27.000000000","message":"Done","commit_id":"77bc846949ef3dd16d634281d2d98958ba146042"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"51d50717170a7d77fecede7bb5d11c27a7ecec97","unresolved":true,"context_lines":[{"line_number":60,"context_line":"#"},{"line_number":61,"context_line":"# 1. Create tenant overlay network (explicitly specify type):"},{"line_number":62,"context_line":"#    openstack network create \\"},{"line_number":63,"context_line":"#      --network-type vxlan \\"},{"line_number":64,"context_line":"#      overlay-network"},{"line_number":65,"context_line":"#"},{"line_number":66,"context_line":"#    Note: Only VXLAN and Geneve are supported. You must explicitly"}],"source_content_type":"text/x-properties","patch_set":9,"id":"c73d8973_1225b409","line":63,"updated":"2026-02-04 04:28:11.000000000","message":"```suggestion\n#      --provider-network-type vxlan \\\n```","commit_id":"77bc846949ef3dd16d634281d2d98958ba146042"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"80046695a8947474ff8ecfcb89b80d5e777cc99a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"#"},{"line_number":61,"context_line":"# 1. Create tenant overlay network (explicitly specify type):"},{"line_number":62,"context_line":"#    openstack network create \\"},{"line_number":63,"context_line":"#      --network-type vxlan \\"},{"line_number":64,"context_line":"#      overlay-network"},{"line_number":65,"context_line":"#"},{"line_number":66,"context_line":"#    Note: Only VXLAN and Geneve are supported. You must explicitly"}],"source_content_type":"text/x-properties","patch_set":9,"id":"5da4c9f6_28219ca9","line":63,"in_reply_to":"1b8b3d67_fe6b5fb2","updated":"2026-02-04 21:09:27.000000000","message":"Done","commit_id":"77bc846949ef3dd16d634281d2d98958ba146042"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6f89592b637a7c2b1ff01d5df31c22975c65bedc","unresolved":true,"context_lines":[{"line_number":60,"context_line":"#"},{"line_number":61,"context_line":"# 1. Create tenant overlay network (explicitly specify type):"},{"line_number":62,"context_line":"#    openstack network create \\"},{"line_number":63,"context_line":"#      --network-type vxlan \\"},{"line_number":64,"context_line":"#      overlay-network"},{"line_number":65,"context_line":"#"},{"line_number":66,"context_line":"#    Note: Only VXLAN and Geneve are supported. You must explicitly"}],"source_content_type":"text/x-properties","patch_set":9,"id":"1b8b3d67_fe6b5fb2","line":63,"in_reply_to":"c73d8973_1225b409","updated":"2026-02-04 13:46:51.000000000","message":"Ugh, shouldn\u0027t have network-type at all.","commit_id":"77bc846949ef3dd16d634281d2d98958ba146042"},{"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":"b5ca9f5b8548abff017cdd873787f44fec23616c","unresolved":true,"context_lines":[{"line_number":46,"context_line":"# Ensure bridge mappings are configured for your physical networks"},{"line_number":47,"context_line":"[ovn]"},{"line_number":48,"context_line":"ovn_nb_connection \u003d tcp:127.0.0.1:6641"},{"line_number":49,"context_line":"ovn_sb_connection \u003d tcp:127.0.0.1:6642"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"# On each OVN chassis/compute node, configure bridge mappings:"},{"line_number":52,"context_line":"#   ovs-vsctl set Open_vSwitch . \\"}],"source_content_type":"text/x-properties","patch_set":10,"id":"c1ac98d2_aae0cc28","line":49,"updated":"2026-02-09 01:31:00.000000000","message":"I assume northbound/southbound have specific OVN meaning?","commit_id":"3c34c9268660fab0cb087c552745657f669538f6"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"187366f7631b223e2cf1b263217f39962af71f13","unresolved":true,"context_lines":[{"line_number":46,"context_line":"# Ensure bridge mappings are configured for your physical networks"},{"line_number":47,"context_line":"[ovn]"},{"line_number":48,"context_line":"ovn_nb_connection \u003d tcp:127.0.0.1:6641"},{"line_number":49,"context_line":"ovn_sb_connection \u003d tcp:127.0.0.1:6642"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"# On each OVN chassis/compute node, configure bridge mappings:"},{"line_number":52,"context_line":"#   ovs-vsctl set Open_vSwitch . \\"}],"source_content_type":"text/x-properties","patch_set":10,"id":"eebb1c86_b10c6be5","line":49,"in_reply_to":"c1ac98d2_aae0cc28","updated":"2026-02-09 06:24:25.000000000","message":"Yes, OVN has a northbound and southbound database with different bits of structural data in each. The northbound, I can best describe as the higher level structural (networks, routers) data, where as the southbound is the lower level workload connected detail (ports). As I understand it, done for performance reasons as well, since part of the model is more towards eventual consistency.","commit_id":"3c34c9268660fab0cb087c552745657f669538f6"},{"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":"ce279fda6f3519f45edcc58ce1cd40e3add5311e","unresolved":true,"context_lines":[{"line_number":46,"context_line":"# Ensure bridge mappings are configured for your physical networks"},{"line_number":47,"context_line":"[ovn]"},{"line_number":48,"context_line":"ovn_nb_connection \u003d tcp:127.0.0.1:6641"},{"line_number":49,"context_line":"ovn_sb_connection \u003d tcp:127.0.0.1:6642"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"# On each OVN chassis/compute node, configure bridge mappings:"},{"line_number":52,"context_line":"#   ovs-vsctl set Open_vSwitch . \\"}],"source_content_type":"text/x-properties","patch_set":10,"id":"2d247441_47c65aa9","line":49,"in_reply_to":"eebb1c86_b10c6be5","updated":"2026-02-09 16:37:46.000000000","message":"++ Cool, just making sure it wasn\u0027t our jargon to disambiguate :D","commit_id":"3c34c9268660fab0cb087c552745657f669538f6"}],"doc/source/configuration/ml2/l2vni-mechanism-driver.rst":[{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"dd2dd344ceecebf69886ce4fb9c9ea5b9fc053ef","unresolved":true,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"   [ml2]"},{"line_number":263,"context_line":"   mechanism_drivers \u003d ovn,baremetal_l2vni,baremetal,genericswitch"},{"line_number":264,"context_line":"   type_drivers \u003d local,flat,vlan,vxlan,geneve"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"   [baremetal_l2vni]"},{"line_number":267,"context_line":"   create_localnet_ports \u003d True"}],"source_content_type":"text/x-rst","patch_set":6,"id":"38122c4a_51893366","line":264,"updated":"2026-01-22 22:18:50.000000000","message":"```suggestion\n   type_drivers \u003d flat,vlan,vxlan,geneve\n   \n   tenant_network_types \u003d vxlan,geneve\n```","commit_id":"319112eee0b53409116078817c0146e399efbc17"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eb509a919831123b9b4efa0afdde345c89119529","unresolved":true,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"   [ml2]"},{"line_number":263,"context_line":"   mechanism_drivers \u003d ovn,baremetal_l2vni,baremetal,genericswitch"},{"line_number":264,"context_line":"   type_drivers \u003d local,flat,vlan,vxlan,geneve"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"   [baremetal_l2vni]"},{"line_number":267,"context_line":"   create_localnet_ports \u003d True"}],"source_content_type":"text/x-rst","patch_set":6,"id":"769d20e4_debe2abf","line":264,"in_reply_to":"38122c4a_51893366","updated":"2026-01-22 23:07:47.000000000","message":"AFAIK, you can\u0027t have multiple tenant network types, only one as it is the default for tenant network creations....\n\nThat being said, fair to remove local.","commit_id":"319112eee0b53409116078817c0146e399efbc17"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f100b04f60cfdfcd928e8f75070a06766a15c41b","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"   [ml2]"},{"line_number":263,"context_line":"   mechanism_drivers \u003d ovn,baremetal_l2vni,baremetal,genericswitch"},{"line_number":264,"context_line":"   type_drivers \u003d local,flat,vlan,vxlan,geneve"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"   [baremetal_l2vni]"},{"line_number":267,"context_line":"   create_localnet_ports \u003d True"}],"source_content_type":"text/x-rst","patch_set":6,"id":"586592f4_8c208890","line":264,"in_reply_to":"769d20e4_debe2abf","updated":"2026-02-02 14:31:03.000000000","message":"Done","commit_id":"319112eee0b53409116078817c0146e399efbc17"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"8ae5f1adaa952dc6894ff177431af03f3a0be7ea","unresolved":true,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"   # Default physical network for baremetal ports (optional)"},{"line_number":164,"context_line":"   # If not set, ports must specify physical_network in binding profile"},{"line_number":165,"context_line":"   default_physical_network \u003d physnet1"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"Configuration Parameters"},{"line_number":168,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":8,"id":"b476b7b6_8f7ae3b1","line":165,"updated":"2026-01-29 16:32:14.000000000","message":"we should likely set this for devstack runs 😊\n\nOh, and it definitely works. \\o/","commit_id":"c841d41fc6f49c6c8277767d54c28277af114132"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f100b04f60cfdfcd928e8f75070a06766a15c41b","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"   # Default physical network for baremetal ports (optional)"},{"line_number":164,"context_line":"   # If not set, ports must specify physical_network in binding profile"},{"line_number":165,"context_line":"   default_physical_network \u003d physnet1"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"Configuration Parameters"},{"line_number":168,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":8,"id":"acc8cde0_cf53b012","line":165,"in_reply_to":"b476b7b6_8f7ae3b1","updated":"2026-02-02 14:31:03.000000000","message":"Done","commit_id":"c841d41fc6f49c6c8277767d54c28277af114132"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"51d50717170a7d77fecede7bb5d11c27a7ecec97","unresolved":true,"context_lines":[{"line_number":318,"context_line":".. warning::"},{"line_number":319,"context_line":"   **Do not use provider networks** (``--provider-network-type``,"},{"line_number":320,"context_line":"   ``--provider-segment``) with this driver. Provider networks bypass the ML2"},{"line_number":321,"context_line":"   orchestration layer that is required for proper VNI↔VLAN mapping."},{"line_number":322,"context_line":""},{"line_number":323,"context_line":".. note::"},{"line_number":324,"context_line":"   Only VXLAN and Geneve network types are supported. If your default network"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3ed06efb_5935d5f3","line":321,"updated":"2026-02-04 04:28:11.000000000","message":"This block is wrong.","commit_id":"77bc846949ef3dd16d634281d2d98958ba146042"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"80046695a8947474ff8ecfcb89b80d5e777cc99a","unresolved":false,"context_lines":[{"line_number":318,"context_line":".. warning::"},{"line_number":319,"context_line":"   **Do not use provider networks** (``--provider-network-type``,"},{"line_number":320,"context_line":"   ``--provider-segment``) with this driver. Provider networks bypass the ML2"},{"line_number":321,"context_line":"   orchestration layer that is required for proper VNI↔VLAN mapping."},{"line_number":322,"context_line":""},{"line_number":323,"context_line":".. note::"},{"line_number":324,"context_line":"   Only VXLAN and Geneve network types are supported. If your default network"}],"source_content_type":"text/x-rst","patch_set":9,"id":"46469e5b_d9778619","line":321,"in_reply_to":"3ed06efb_5935d5f3","updated":"2026-02-04 21:09:27.000000000","message":"Done","commit_id":"77bc846949ef3dd16d634281d2d98958ba146042"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e68e9e4112bc9ed719048a19ec824e81f8443607","unresolved":true,"context_lines":[{"line_number":233,"context_line":"   network_vlan_ranges \u003d physnet1:100:200"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"   [ovn]"},{"line_number":236,"context_line":"   bridge_mappings \u003d physnet1:br-provider"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"On each chassis (compute/network node), configure OVN bridge mappings:"},{"line_number":239,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"40a8090d_d6ab4ec1","line":236,"updated":"2026-02-04 20:48:12.000000000","message":"Did\u0027nt we find that this is not a config option in the ovn group?","commit_id":"3c34c9268660fab0cb087c552745657f669538f6"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"80046695a8947474ff8ecfcb89b80d5e777cc99a","unresolved":true,"context_lines":[{"line_number":233,"context_line":"   network_vlan_ranges \u003d physnet1:100:200"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"   [ovn]"},{"line_number":236,"context_line":"   bridge_mappings \u003d physnet1:br-provider"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"On each chassis (compute/network node), configure OVN bridge mappings:"},{"line_number":239,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"4267f4ab_018c3bf2","line":236,"in_reply_to":"40a8090d_d6ab4ec1","updated":"2026-02-04 21:09:27.000000000","message":"That is correct, we fixed it elsewhere :\\","commit_id":"3c34c9268660fab0cb087c552745657f669538f6"}],"networking_baremetal/plugins/ml2/baremetal_l2vni_mapping.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":"0a7bd651ae2941d27e1111af281f2aae96263ff5","unresolved":true,"context_lines":[{"line_number":354,"context_line":"                      lower_segment, physnet, l2vni)"},{"line_number":355,"context_line":"        else:"},{"line_number":356,"context_line":"            # If we do not have a lower segment, we need to allocate it."},{"line_number":357,"context_line":"            lower_segment \u003d context.allocate_dynamic_segment("},{"line_number":358,"context_line":"                {"},{"line_number":359,"context_line":"                    api.PHYSICAL_NETWORK: physnet,"},{"line_number":360,"context_line":"                    api.NETWORK_TYPE: p_const.TYPE_VLAN,"}],"source_content_type":"text/x-python","patch_set":2,"id":"6dfa1e75_2b3ac0b6","line":357,"updated":"2026-01-21 17:34:25.000000000","message":"We need to fix this to have error handling, specifically, we need to error, or fall back to a default, or then air. Something along those lines.\n\nThis requires the physnet to be defined on the port *and* for a range to exist.","commit_id":"4e0f1beac7456462552ead32e4ebfc8c5d839a3a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"490a4df5901bf33dab9c099b6490624aba6255c0","unresolved":false,"context_lines":[{"line_number":354,"context_line":"                      lower_segment, physnet, l2vni)"},{"line_number":355,"context_line":"        else:"},{"line_number":356,"context_line":"            # If we do not have a lower segment, we need to allocate it."},{"line_number":357,"context_line":"            lower_segment \u003d context.allocate_dynamic_segment("},{"line_number":358,"context_line":"                {"},{"line_number":359,"context_line":"                    api.PHYSICAL_NETWORK: physnet,"},{"line_number":360,"context_line":"                    api.NETWORK_TYPE: p_const.TYPE_VLAN,"}],"source_content_type":"text/x-python","patch_set":2,"id":"03de7fb1_63cf44de","line":357,"in_reply_to":"6dfa1e75_2b3ac0b6","updated":"2026-01-22 21:51:01.000000000","message":"Done","commit_id":"4e0f1beac7456462552ead32e4ebfc8c5d839a3a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0a7bd651ae2941d27e1111af281f2aae96263ff5","unresolved":true,"context_lines":[{"line_number":361,"context_line":"                }"},{"line_number":362,"context_line":"            )"},{"line_number":363,"context_line":"            LOG.debug(\"A lower_segment was not found to bind segmentation id \""},{"line_number":364,"context_line":"                      \"%s to physical network %. Allocated %s.\","},{"line_number":365,"context_line":"                      l2vni, physnet, lower_segment)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"        # Ensure OVN has a localnet port to bridge the overlay to the physnet"}],"source_content_type":"text/x-python","patch_set":2,"id":"e9868c2d_9db330e0","line":364,"range":{"start_line":364,"start_character":46,"end_line":364,"end_character":48},"updated":"2026-01-21 17:34:25.000000000","message":"uhh, %s, but also l2vni can be none on first pass which makes zero sense.","commit_id":"4e0f1beac7456462552ead32e4ebfc8c5d839a3a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"490a4df5901bf33dab9c099b6490624aba6255c0","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                }"},{"line_number":362,"context_line":"            )"},{"line_number":363,"context_line":"            LOG.debug(\"A lower_segment was not found to bind segmentation id \""},{"line_number":364,"context_line":"                      \"%s to physical network %. Allocated %s.\","},{"line_number":365,"context_line":"                      l2vni, physnet, lower_segment)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"        # Ensure OVN has a localnet port to bridge the overlay to the physnet"}],"source_content_type":"text/x-python","patch_set":2,"id":"928ae8cb_b2e54dbb","line":364,"range":{"start_line":364,"start_character":46,"end_line":364,"end_character":48},"in_reply_to":"e9868c2d_9db330e0","updated":"2026-01-22 21:51:01.000000000","message":"Done","commit_id":"4e0f1beac7456462552ead32e4ebfc8c5d839a3a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0a7bd651ae2941d27e1111af281f2aae96263ff5","unresolved":true,"context_lines":[{"line_number":365,"context_line":"                      l2vni, physnet, lower_segment)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"        # Ensure OVN has a localnet port to bridge the overlay to the physnet"},{"line_number":368,"context_line":"        vlan_id \u003d lower_segment.get(api.SEGMENTATION_ID)"},{"line_number":369,"context_line":"        self._ensure_localnet_port("},{"line_number":370,"context_line":"            context,"},{"line_number":371,"context_line":"            context.network.current[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"e5c09098_5c5166af","line":368,"updated":"2026-01-21 17:34:25.000000000","message":"fwiw, we wanted to get lower segment as well, so this should be moved ?up?","commit_id":"4e0f1beac7456462552ead32e4ebfc8c5d839a3a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"490a4df5901bf33dab9c099b6490624aba6255c0","unresolved":false,"context_lines":[{"line_number":365,"context_line":"                      l2vni, physnet, lower_segment)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"        # Ensure OVN has a localnet port to bridge the overlay to the physnet"},{"line_number":368,"context_line":"        vlan_id \u003d lower_segment.get(api.SEGMENTATION_ID)"},{"line_number":369,"context_line":"        self._ensure_localnet_port("},{"line_number":370,"context_line":"            context,"},{"line_number":371,"context_line":"            context.network.current[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"80af2d18_93085f1e","line":368,"in_reply_to":"e5c09098_5c5166af","updated":"2026-01-22 21:51:01.000000000","message":"Done","commit_id":"4e0f1beac7456462552ead32e4ebfc8c5d839a3a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0a7bd651ae2941d27e1111af281f2aae96263ff5","unresolved":true,"context_lines":[{"line_number":122,"context_line":"        :returns: True if chassis has physnet, False otherwise"},{"line_number":123,"context_line":"        \"\"\""},{"line_number":124,"context_line":"        try:"},{"line_number":125,"context_line":"            local_chassis \u003d self._get_local_chassis_name(ovn_client)"},{"line_number":126,"context_line":"            if not local_chassis:"},{"line_number":127,"context_line":"                LOG.warning(\"Cannot determine local chassis, assuming \""},{"line_number":128,"context_line":"                            \"physnet %s is not available\", physnet)"}],"source_content_type":"text/x-python","patch_set":3,"id":"42c633f5_4dea198e","line":125,"updated":"2026-01-21 17:34:25.000000000","message":"So this can\u0027t always use the local chassis, it needs to look at the router ports most likely and determine that from that point.","commit_id":"816649d228e38b904d6017c27410a5f6e1db7a96"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f662711e2b6edd41288789a0ccaa5168431627a8","unresolved":true,"context_lines":[{"line_number":122,"context_line":"        :returns: True if chassis has physnet, False otherwise"},{"line_number":123,"context_line":"        \"\"\""},{"line_number":124,"context_line":"        try:"},{"line_number":125,"context_line":"            local_chassis \u003d self._get_local_chassis_name(ovn_client)"},{"line_number":126,"context_line":"            if not local_chassis:"},{"line_number":127,"context_line":"                LOG.warning(\"Cannot determine local chassis, assuming \""},{"line_number":128,"context_line":"                            \"physnet %s is not available\", physnet)"}],"source_content_type":"text/x-python","patch_set":3,"id":"91ef94ec_f32dd0b7","line":125,"in_reply_to":"42c633f5_4dea198e","updated":"2026-01-21 17:55:45.000000000","message":"Another base issue is it might not be the chassis name. The UUID really needs to be identified from an existing resource.","commit_id":"816649d228e38b904d6017c27410a5f6e1db7a96"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f100b04f60cfdfcd928e8f75070a06766a15c41b","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        :returns: True if chassis has physnet, False otherwise"},{"line_number":123,"context_line":"        \"\"\""},{"line_number":124,"context_line":"        try:"},{"line_number":125,"context_line":"            local_chassis \u003d self._get_local_chassis_name(ovn_client)"},{"line_number":126,"context_line":"            if not local_chassis:"},{"line_number":127,"context_line":"                LOG.warning(\"Cannot determine local chassis, assuming \""},{"line_number":128,"context_line":"                            \"physnet %s is not available\", physnet)"}],"source_content_type":"text/x-python","patch_set":3,"id":"8eb3fa41_b24f9823","line":125,"in_reply_to":"91ef94ec_f32dd0b7","updated":"2026-02-02 14:31:03.000000000","message":"Done","commit_id":"816649d228e38b904d6017c27410a5f6e1db7a96"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"490a4df5901bf33dab9c099b6490624aba6255c0","unresolved":false,"context_lines":[{"line_number":490,"context_line":"            )"},{"line_number":491,"context_line":"            LOG.debug(\"A lower_segment was not found to bind segmentation id \""},{"line_number":492,"context_line":"                      \"%s to physical network %s. Allocated: %s\","},{"line_number":493,"context_line":"                      l2vni.get(api.SEGMENTATION_ID),"},{"line_number":494,"context_line":"                      physnet,"},{"line_number":495,"context_line":"                      lower_segment.get(api.SEGMENTATION_ID))"},{"line_number":496,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5da19162_86234c10","line":493,"range":{"start_line":493,"start_character":22,"end_line":493,"end_character":53},"updated":"2026-01-22 21:51:01.000000000","message":"Often, this is None depending on the binding level, and fails. In large part because top bound segment doesn\u0027t exist when it is not the top bound segment. Its annoying, but okay. More than anything, it is stupidly annoying.","commit_id":"7da699be84571c614d70247be39eabc8c8bce2cd"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"dd2dd344ceecebf69886ce4fb9c9ea5b9fc053ef","unresolved":true,"context_lines":[{"line_number":69,"context_line":"        return portbindings.CONNECTIVITY_L2"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def initialize(self):"},{"line_number":72,"context_line":"        pass"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def _get_ovn_client(self):"},{"line_number":75,"context_line":"        \"\"\"Get OVN client from the OVN mechanism driver."}],"source_content_type":"text/x-python","patch_set":6,"id":"6f0be998_6d660488","line":72,"updated":"2026-01-22 22:18:50.000000000","message":"Note to me: As a follow on check that the user has loaded the OVN ML2 mechanism in initialize","commit_id":"319112eee0b53409116078817c0146e399efbc17"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eb509a919831123b9b4efa0afdde345c89119529","unresolved":true,"context_lines":[{"line_number":69,"context_line":"        return portbindings.CONNECTIVITY_L2"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def initialize(self):"},{"line_number":72,"context_line":"        pass"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def _get_ovn_client(self):"},{"line_number":75,"context_line":"        \"\"\"Get OVN client from the OVN mechanism driver."}],"source_content_type":"text/x-python","patch_set":6,"id":"bd820f7e_61249901","line":72,"in_reply_to":"6f0be998_6d660488","updated":"2026-01-22 23:07:47.000000000","message":"wouldn\u0027t be a *bad* idea to check the order overall. because this driver also shouldn\u0027t be the last one.","commit_id":"319112eee0b53409116078817c0146e399efbc17"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"51d50717170a7d77fecede7bb5d11c27a7ecec97","unresolved":true,"context_lines":[{"line_number":69,"context_line":"        return portbindings.CONNECTIVITY_L2"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def initialize(self):"},{"line_number":72,"context_line":"        pass"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def _get_ovn_client(self):"},{"line_number":75,"context_line":"        \"\"\"Get OVN client from the OVN mechanism driver."}],"source_content_type":"text/x-python","patch_set":6,"id":"e4cad149_517df4c1","line":72,"in_reply_to":"bd820f7e_61249901","updated":"2026-02-04 04:28:11.000000000","message":"Let\u0027s do this as a follow on.","commit_id":"319112eee0b53409116078817c0146e399efbc17"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"dd2dd344ceecebf69886ce4fb9c9ea5b9fc053ef","unresolved":true,"context_lines":[{"line_number":71,"context_line":"    def initialize(self):"},{"line_number":72,"context_line":"        pass"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def _get_ovn_client(self):"},{"line_number":75,"context_line":"        \"\"\"Get OVN client from the OVN mechanism driver."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        :returns: OVN client instance or None if OVN driver not available"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf14ffdc_71eb4a5e","line":74,"updated":"2026-01-22 22:18:50.000000000","message":"Can we use functools.cached_property on this?","commit_id":"319112eee0b53409116078817c0146e399efbc17"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eb509a919831123b9b4efa0afdde345c89119529","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    def initialize(self):"},{"line_number":72,"context_line":"        pass"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def _get_ovn_client(self):"},{"line_number":75,"context_line":"        \"\"\"Get OVN client from the OVN mechanism driver."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        :returns: OVN client instance or None if OVN driver not available"}],"source_content_type":"text/x-python","patch_set":6,"id":"9e4af21e_d61ce804","line":74,"in_reply_to":"bf14ffdc_71eb4a5e","updated":"2026-01-22 23:07:47.000000000","message":"Done","commit_id":"319112eee0b53409116078817c0146e399efbc17"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"dd2dd344ceecebf69886ce4fb9c9ea5b9fc053ef","unresolved":true,"context_lines":[{"line_number":222,"context_line":"                return"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"            # OVN logical switch name is prefixed with neutron-"},{"line_number":225,"context_line":"            ls_name \u003d f\"neutron-{network_id}\""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"            # Find all logical router ports connected to this logical switch"},{"line_number":228,"context_line":"            if not hasattr(ovn_client, \u0027_nb_idl\u0027):"}],"source_content_type":"text/x-python","patch_set":6,"id":"f0e406a5_7e48aafc","line":225,"updated":"2026-01-22 22:18:50.000000000","message":"```suggestion\n            ls_name \u003d ovn_utils.ovn_name(network_id)\n```","commit_id":"319112eee0b53409116078817c0146e399efbc17"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eb509a919831123b9b4efa0afdde345c89119529","unresolved":false,"context_lines":[{"line_number":222,"context_line":"                return"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"            # OVN logical switch name is prefixed with neutron-"},{"line_number":225,"context_line":"            ls_name \u003d f\"neutron-{network_id}\""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"            # Find all logical router ports connected to this logical switch"},{"line_number":228,"context_line":"            if not hasattr(ovn_client, \u0027_nb_idl\u0027):"}],"source_content_type":"text/x-python","patch_set":6,"id":"05171e6b_cd8c6331","line":225,"in_reply_to":"f0e406a5_7e48aafc","updated":"2026-01-22 23:07:47.000000000","message":"Done","commit_id":"319112eee0b53409116078817c0146e399efbc17"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"dd2dd344ceecebf69886ce4fb9c9ea5b9fc053ef","unresolved":true,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        try:"},{"line_number":320,"context_line":"            # OVN logical switch name is prefixed with neutron-"},{"line_number":321,"context_line":"            ls_name \u003d f\"neutron-{network_id}\""},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"            # Localnet port name includes physnet for uniqueness"},{"line_number":324,"context_line":"            port_name \u003d f\"{ls_name}-localnet-{physnet}\""}],"source_content_type":"text/x-python","patch_set":6,"id":"c4ec501c_ad7d5f22","line":321,"updated":"2026-01-22 22:18:50.000000000","message":"```suggestion\n            ls_name \u003d ovn_utils.ovn_name(network_id)\n```","commit_id":"319112eee0b53409116078817c0146e399efbc17"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eb509a919831123b9b4efa0afdde345c89119529","unresolved":false,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        try:"},{"line_number":320,"context_line":"            # OVN logical switch name is prefixed with neutron-"},{"line_number":321,"context_line":"            ls_name \u003d f\"neutron-{network_id}\""},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"            # Localnet port name includes physnet for uniqueness"},{"line_number":324,"context_line":"            port_name \u003d f\"{ls_name}-localnet-{physnet}\""}],"source_content_type":"text/x-python","patch_set":6,"id":"922611ab_8b1943f2","line":321,"in_reply_to":"c4ec501c_ad7d5f22","updated":"2026-01-22 23:07:47.000000000","message":"Done","commit_id":"319112eee0b53409116078817c0146e399efbc17"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"dd2dd344ceecebf69886ce4fb9c9ea5b9fc053ef","unresolved":true,"context_lines":[{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        try:"},{"line_number":392,"context_line":"            # OVN logical switch name is prefixed with neutron-"},{"line_number":393,"context_line":"            ls_name \u003d f\"neutron-{network_id}\""},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"            # Localnet port name includes physnet for uniqueness"},{"line_number":396,"context_line":"            port_name \u003d f\"{ls_name}-localnet-{physnet}\""}],"source_content_type":"text/x-python","patch_set":6,"id":"c22fde37_bec743c2","line":393,"updated":"2026-01-22 22:18:50.000000000","message":"```suggestion\n            ls_name \u003d ovn_utils.ovn_name(network_id)\n```","commit_id":"319112eee0b53409116078817c0146e399efbc17"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eb509a919831123b9b4efa0afdde345c89119529","unresolved":false,"context_lines":[{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        try:"},{"line_number":392,"context_line":"            # OVN logical switch name is prefixed with neutron-"},{"line_number":393,"context_line":"            ls_name \u003d f\"neutron-{network_id}\""},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"            # Localnet port name includes physnet for uniqueness"},{"line_number":396,"context_line":"            port_name \u003d f\"{ls_name}-localnet-{physnet}\""}],"source_content_type":"text/x-python","patch_set":6,"id":"23578e39_c191f3ea","line":393,"in_reply_to":"c22fde37_bec743c2","updated":"2026-01-22 23:07:47.000000000","message":"Done","commit_id":"319112eee0b53409116078817c0146e399efbc17"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"47d0cf8416a58726004b4867ad4c9cfa4491cd58","unresolved":true,"context_lines":[{"line_number":139,"context_line":"                LOG.debug(\"No southbound connection available\")"},{"line_number":140,"context_line":"                return None"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"            # Query chassis from Southbound database"},{"line_number":143,"context_line":"            for ch in ovn_client._sb_idl.tables[\u0027Chassis\u0027].rows.values():"},{"line_number":144,"context_line":"                if ch.name \u003d\u003d local_chassis_name or \\"},{"line_number":145,"context_line":"                   ch.hostname \u003d\u003d local_chassis_name:"},{"line_number":146,"context_line":"                    return ch"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"            LOG.warning(\"Local chassis %s not found in OVN\","},{"line_number":149,"context_line":"                        local_chassis_name)"}],"source_content_type":"text/x-python","patch_set":8,"id":"10c51df2_e9b2abf7","line":146,"range":{"start_line":142,"start_character":0,"end_line":146,"end_character":29},"updated":"2026-01-30 15:42:11.000000000","message":"In a follow up, may want to look into using something in the client that might be able to do this lookup with less overhead to improve performance in large envs with a lot of chassis ...\n\n```\nchassis \u003d ovn_client._sb_idl.lookup(\u0027Chassis\u0027, local_chassis_name, default\u003dNone)\n```\n\nor\n\n```\n# Search by name\ncmd \u003d ovn_client._sb_idl.db_find(\u0027Chassis\u0027, (\u0027name\u0027, \u0027\u003d\u0027, local_chassis_name))\nresult \u003d cmd.execute(check_error\u003dTrue)\nreturn result[0] if result else None\n\n# Or search by hostname\ncmd \u003d ovn_client._sb_idl.db_find(\u0027Chassis\u0027, (\u0027hostname\u0027, \u0027\u003d\u0027, local_chassis_name))\nresult \u003d cmd.execute(check_error\u003dTrue)\nreturn result[0] if result else None\n```","commit_id":"c841d41fc6f49c6c8277767d54c28277af114132"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"51d50717170a7d77fecede7bb5d11c27a7ecec97","unresolved":true,"context_lines":[{"line_number":139,"context_line":"                LOG.debug(\"No southbound connection available\")"},{"line_number":140,"context_line":"                return None"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"            # Query chassis from Southbound database"},{"line_number":143,"context_line":"            for ch in ovn_client._sb_idl.tables[\u0027Chassis\u0027].rows.values():"},{"line_number":144,"context_line":"                if ch.name \u003d\u003d local_chassis_name or \\"},{"line_number":145,"context_line":"                   ch.hostname \u003d\u003d local_chassis_name:"},{"line_number":146,"context_line":"                    return ch"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"            LOG.warning(\"Local chassis %s not found in OVN\","},{"line_number":149,"context_line":"                        local_chassis_name)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fcadd56f_e1ec3c1d","line":146,"range":{"start_line":142,"start_character":0,"end_line":146,"end_character":29},"in_reply_to":"10c51df2_e9b2abf7","updated":"2026-02-04 04:28:11.000000000","message":"Good suggestion.","commit_id":"c841d41fc6f49c6c8277767d54c28277af114132"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6f89592b637a7c2b1ff01d5df31c22975c65bedc","unresolved":true,"context_lines":[{"line_number":139,"context_line":"                LOG.debug(\"No southbound connection available\")"},{"line_number":140,"context_line":"                return None"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"            # Query chassis from Southbound database"},{"line_number":143,"context_line":"            for ch in ovn_client._sb_idl.tables[\u0027Chassis\u0027].rows.values():"},{"line_number":144,"context_line":"                if ch.name \u003d\u003d local_chassis_name or \\"},{"line_number":145,"context_line":"                   ch.hostname \u003d\u003d local_chassis_name:"},{"line_number":146,"context_line":"                    return ch"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"            LOG.warning(\"Local chassis %s not found in OVN\","},{"line_number":149,"context_line":"                        local_chassis_name)"}],"source_content_type":"text/x-python","patch_set":8,"id":"936cb2ab_78eb32b1","line":146,"range":{"start_line":142,"start_character":0,"end_line":146,"end_character":29},"in_reply_to":"fcadd56f_e1ec3c1d","updated":"2026-02-04 13:46:51.000000000","message":"Yeah, I was planning on adopting it and backporting it as a fix later on once we get moving.","commit_id":"c841d41fc6f49c6c8277767d54c28277af114132"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"47d0cf8416a58726004b4867ad4c9cfa4491cd58","unresolved":true,"context_lines":[{"line_number":165,"context_line":"        :param physnet: Physical network name"},{"line_number":166,"context_line":"        :returns: True if any chassis has physnet, False otherwise"},{"line_number":167,"context_line":"        \"\"\""},{"line_number":168,"context_line":"        try:"},{"line_number":169,"context_line":"            if not hasattr(ovn_client, \u0027_sb_idl\u0027):"},{"line_number":170,"context_line":"                LOG.warning(\"No southbound connection available, cannot \""},{"line_number":171,"context_line":"                            \"verify physnet %s exists\", physnet)"},{"line_number":172,"context_line":"                # Return True to allow creation - fail open rather than"},{"line_number":173,"context_line":"                # closed"},{"line_number":174,"context_line":"                return True"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"            # Check all chassis in the cluster"},{"line_number":177,"context_line":"            for chassis in ovn_client._sb_idl.tables[\u0027Chassis\u0027].rows.values():"},{"line_number":178,"context_line":"                # Check bridge mappings in external_ids"},{"line_number":179,"context_line":"                bridge_mappings \u003d chassis.external_ids.get("},{"line_number":180,"context_line":"                    \u0027ovn-bridge-mappings\u0027, \u0027\u0027)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"                # Format is \"physnet1:br-provider,physnet2:br-ex\""},{"line_number":183,"context_line":"                physnets \u003d [mapping.split(\u0027:\u0027)[0].strip()"},{"line_number":184,"context_line":"                            for mapping in bridge_mappings.split(\u0027,\u0027)"},{"line_number":185,"context_line":"                            if \u0027:\u0027 in mapping]"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"                if physnet in physnets:"},{"line_number":188,"context_line":"                    LOG.debug(\"Found physnet %s on chassis %s with bridge \""},{"line_number":189,"context_line":"                              \"mappings: %s\", physnet, chassis.name,"},{"line_number":190,"context_line":"                              bridge_mappings)"},{"line_number":191,"context_line":"                    return True"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"            # No chassis has this physnet - this is an error condition"},{"line_number":194,"context_line":"            LOG.error(\"Physical network %s not found in bridge-mappings \""},{"line_number":195,"context_line":"                      \"on any chassis in the OVN cluster. Check OVN \""},{"line_number":196,"context_line":"                      \"configuration.\", physnet)"},{"line_number":197,"context_line":"            return False"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        except Exception as e:"},{"line_number":200,"context_line":"            LOG.error(\"Error checking chassis bridge mappings: %s. \""},{"line_number":201,"context_line":"                      \"Failing open - allowing localnet port creation.\","},{"line_number":202,"context_line":"                      e)"},{"line_number":203,"context_line":"            # Fail open - let the creation proceed and let OVN handle it"},{"line_number":204,"context_line":"            return True"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def _ensure_router_gateway_chassis(self, ovn_client, network_id):"},{"line_number":207,"context_line":"        \"\"\"Ensure router ports for this network are bound to local chassis."}],"source_content_type":"text/x-python","patch_set":8,"id":"b52c228d_6881fbee","line":204,"range":{"start_line":168,"start_character":0,"end_line":204,"end_character":23},"updated":"2026-01-30 15:42:11.000000000","message":"This can be a follow up.\n\nI think we can use existing `get_chassis_and_physnets`[1] and simplify this?\n\n```\ndef _chassis_can_forward_physnet(self, ovn_client, physnet):\n    chassis_physnets \u003d ovn_client._sb_idl.get_chassis_and_physnets()\n    for physnets in chassis_physnets.values())\n        if physnet in physnets\n            return True\n\n    return False\n```\n\n[1] https://opendev.org/openstack/neutron/src/branch/master/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/impl_idl_ovn.py#L996","commit_id":"c841d41fc6f49c6c8277767d54c28277af114132"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"51d50717170a7d77fecede7bb5d11c27a7ecec97","unresolved":true,"context_lines":[{"line_number":165,"context_line":"        :param physnet: Physical network name"},{"line_number":166,"context_line":"        :returns: True if any chassis has physnet, False otherwise"},{"line_number":167,"context_line":"        \"\"\""},{"line_number":168,"context_line":"        try:"},{"line_number":169,"context_line":"            if not hasattr(ovn_client, \u0027_sb_idl\u0027):"},{"line_number":170,"context_line":"                LOG.warning(\"No southbound connection available, cannot \""},{"line_number":171,"context_line":"                            \"verify physnet %s exists\", physnet)"},{"line_number":172,"context_line":"                # Return True to allow creation - fail open rather than"},{"line_number":173,"context_line":"                # closed"},{"line_number":174,"context_line":"                return True"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"            # Check all chassis in the cluster"},{"line_number":177,"context_line":"            for chassis in ovn_client._sb_idl.tables[\u0027Chassis\u0027].rows.values():"},{"line_number":178,"context_line":"                # Check bridge mappings in external_ids"},{"line_number":179,"context_line":"                bridge_mappings \u003d chassis.external_ids.get("},{"line_number":180,"context_line":"                    \u0027ovn-bridge-mappings\u0027, \u0027\u0027)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"                # Format is \"physnet1:br-provider,physnet2:br-ex\""},{"line_number":183,"context_line":"                physnets \u003d [mapping.split(\u0027:\u0027)[0].strip()"},{"line_number":184,"context_line":"                            for mapping in bridge_mappings.split(\u0027,\u0027)"},{"line_number":185,"context_line":"                            if \u0027:\u0027 in mapping]"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"                if physnet in physnets:"},{"line_number":188,"context_line":"                    LOG.debug(\"Found physnet %s on chassis %s with bridge \""},{"line_number":189,"context_line":"                              \"mappings: %s\", physnet, chassis.name,"},{"line_number":190,"context_line":"                              bridge_mappings)"},{"line_number":191,"context_line":"                    return True"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"            # No chassis has this physnet - this is an error condition"},{"line_number":194,"context_line":"            LOG.error(\"Physical network %s not found in bridge-mappings \""},{"line_number":195,"context_line":"                      \"on any chassis in the OVN cluster. Check OVN \""},{"line_number":196,"context_line":"                      \"configuration.\", physnet)"},{"line_number":197,"context_line":"            return False"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        except Exception as e:"},{"line_number":200,"context_line":"            LOG.error(\"Error checking chassis bridge mappings: %s. \""},{"line_number":201,"context_line":"                      \"Failing open - allowing localnet port creation.\","},{"line_number":202,"context_line":"                      e)"},{"line_number":203,"context_line":"            # Fail open - let the creation proceed and let OVN handle it"},{"line_number":204,"context_line":"            return True"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def _ensure_router_gateway_chassis(self, ovn_client, network_id):"},{"line_number":207,"context_line":"        \"\"\"Ensure router ports for this network are bound to local chassis."}],"source_content_type":"text/x-python","patch_set":8,"id":"4a231663_0a57fe0c","line":204,"range":{"start_line":168,"start_character":0,"end_line":204,"end_character":23},"in_reply_to":"b52c228d_6881fbee","updated":"2026-02-04 04:28:11.000000000","message":"+1","commit_id":"c841d41fc6f49c6c8277767d54c28277af114132"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"47d0cf8416a58726004b4867ad4c9cfa4491cd58","unresolved":true,"context_lines":[{"line_number":419,"context_line":"            # Don\u0027t raise - segment cleanup should continue"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    def update_port_postcommit(self, context):"},{"line_number":422,"context_line":"        vnic_type \u003d context.current[portbindings.VNIC_TYPE]"},{"line_number":423,"context_line":"        if vnic_type not in SUPPORTED_VNIC_TYPES:"},{"line_number":424,"context_line":"            return"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"        vif_type \u003d context.current[portbindings.VIF_TYPE]"},{"line_number":427,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"f879ab8a_0accdc71","line":424,"range":{"start_line":422,"start_character":0,"end_line":424,"end_character":18},"updated":"2026-01-30 15:42:11.000000000","message":"nit, I don\u0027t see vnic_type used beyond this test. We can drop it and do it same as in bind_port?","commit_id":"c841d41fc6f49c6c8277767d54c28277af114132"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f100b04f60cfdfcd928e8f75070a06766a15c41b","unresolved":true,"context_lines":[{"line_number":419,"context_line":"            # Don\u0027t raise - segment cleanup should continue"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    def update_port_postcommit(self, context):"},{"line_number":422,"context_line":"        vnic_type \u003d context.current[portbindings.VNIC_TYPE]"},{"line_number":423,"context_line":"        if vnic_type not in SUPPORTED_VNIC_TYPES:"},{"line_number":424,"context_line":"            return"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"        vif_type \u003d context.current[portbindings.VIF_TYPE]"},{"line_number":427,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"f4efe7e8_379de948","line":424,"range":{"start_line":422,"start_character":0,"end_line":424,"end_character":18},"in_reply_to":"395cf35c_7ad5bfe1","updated":"2026-02-02 14:31:03.000000000","message":"At least, afaik it will always call down this path even if we bail in bind port. I could be wrong though.","commit_id":"c841d41fc6f49c6c8277767d54c28277af114132"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c85e0a678c5d0bd6cdaa13cdb8756a0093ee30a1","unresolved":true,"context_lines":[{"line_number":419,"context_line":"            # Don\u0027t raise - segment cleanup should continue"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    def update_port_postcommit(self, context):"},{"line_number":422,"context_line":"        vnic_type \u003d context.current[portbindings.VNIC_TYPE]"},{"line_number":423,"context_line":"        if vnic_type not in SUPPORTED_VNIC_TYPES:"},{"line_number":424,"context_line":"            return"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"        vif_type \u003d context.current[portbindings.VIF_TYPE]"},{"line_number":427,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"395cf35c_7ad5bfe1","line":424,"range":{"start_line":422,"start_character":0,"end_line":424,"end_character":18},"in_reply_to":"f879ab8a_0accdc71","updated":"2026-01-30 17:23:20.000000000","message":"It is always going to get called regardless so this just escape hatches the plugin out of the flow for non-supported vnic types.","commit_id":"c841d41fc6f49c6c8277767d54c28277af114132"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"47d0cf8416a58726004b4867ad4c9cfa4491cd58","unresolved":true,"context_lines":[{"line_number":506,"context_line":"        if lower_segment:"},{"line_number":507,"context_line":"            # NOTE(TheJulia): This may be overkill logging wise, but it makes"},{"line_number":508,"context_line":"            # it pretty clear logging wise."},{"line_number":509,"context_line":"            LOG.debug(\"A lower segment (%s) is already existed in physical \""},{"line_number":510,"context_line":"                      \"network %s to attach to segmentation id %s.\","},{"line_number":511,"context_line":"                      lower_segment.get(api.SEGMENTATION_ID),"},{"line_number":512,"context_line":"                      physnet,"},{"line_number":513,"context_line":"                      bind_segment.get(api.SEGMENTATION_ID))"}],"source_content_type":"text/x-python","patch_set":8,"id":"3e9555d0_e56b8e08","line":510,"range":{"start_line":509,"start_character":0,"end_line":510,"end_character":68},"updated":"2026-01-30 15:42:11.000000000","message":"s/(%s) is already existed in/(%s) already exist in/","commit_id":"c841d41fc6f49c6c8277767d54c28277af114132"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f100b04f60cfdfcd928e8f75070a06766a15c41b","unresolved":false,"context_lines":[{"line_number":506,"context_line":"        if lower_segment:"},{"line_number":507,"context_line":"            # NOTE(TheJulia): This may be overkill logging wise, but it makes"},{"line_number":508,"context_line":"            # it pretty clear logging wise."},{"line_number":509,"context_line":"            LOG.debug(\"A lower segment (%s) is already existed in physical \""},{"line_number":510,"context_line":"                      \"network %s to attach to segmentation id %s.\","},{"line_number":511,"context_line":"                      lower_segment.get(api.SEGMENTATION_ID),"},{"line_number":512,"context_line":"                      physnet,"},{"line_number":513,"context_line":"                      bind_segment.get(api.SEGMENTATION_ID))"}],"source_content_type":"text/x-python","patch_set":8,"id":"4f8885af_2d9e8311","line":510,"range":{"start_line":509,"start_character":0,"end_line":510,"end_character":68},"in_reply_to":"3e9555d0_e56b8e08","updated":"2026-02-02 14:31:03.000000000","message":"Done","commit_id":"c841d41fc6f49c6c8277767d54c28277af114132"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"51d50717170a7d77fecede7bb5d11c27a7ecec97","unresolved":true,"context_lines":[{"line_number":114,"context_line":"                return cfg.CONF.ovn.ovn_chassis_name"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"            # Fall back to hostname"},{"line_number":117,"context_line":"            import socket"},{"line_number":118,"context_line":"            hostname \u003d socket.gethostname()"},{"line_number":119,"context_line":"            LOG.debug(\"Using hostname as chassis name: %s\", hostname)"},{"line_number":120,"context_line":"            return hostname"}],"source_content_type":"text/x-python","patch_set":9,"id":"f693f8a8_903892c0","line":117,"updated":"2026-02-04 04:28:11.000000000","message":"Do you want a nested import?","commit_id":"77bc846949ef3dd16d634281d2d98958ba146042"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6f89592b637a7c2b1ff01d5df31c22975c65bedc","unresolved":true,"context_lines":[{"line_number":114,"context_line":"                return cfg.CONF.ovn.ovn_chassis_name"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"            # Fall back to hostname"},{"line_number":117,"context_line":"            import socket"},{"line_number":118,"context_line":"            hostname \u003d socket.gethostname()"},{"line_number":119,"context_line":"            LOG.debug(\"Using hostname as chassis name: %s\", hostname)"},{"line_number":120,"context_line":"            return hostname"}],"source_content_type":"text/x-python","patch_set":9,"id":"8a6ec94f_ebf87e42","line":117,"in_reply_to":"f693f8a8_903892c0","updated":"2026-02-04 13:46:51.000000000","message":"no, ugh, claude!","commit_id":"77bc846949ef3dd16d634281d2d98958ba146042"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"51d50717170a7d77fecede7bb5d11c27a7ecec97","unresolved":true,"context_lines":[{"line_number":322,"context_line":"            ls_name \u003d ovn_utils.ovn_name(network_id)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"            # Localnet port name includes physnet for uniqueness"},{"line_number":325,"context_line":"            port_name \u003d f\"{ls_name}-localnet-{physnet}\""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"            # Check if localnet port already exists"},{"line_number":328,"context_line":"            existing_port \u003d ovn_client._nb_idl.lsp_get(port_name).execute("}],"source_content_type":"text/x-python","patch_set":9,"id":"71523d64_732514fa","line":325,"updated":"2026-02-04 04:28:11.000000000","message":"I feel like this should be a helper function at the top.","commit_id":"77bc846949ef3dd16d634281d2d98958ba146042"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"80046695a8947474ff8ecfcb89b80d5e777cc99a","unresolved":false,"context_lines":[{"line_number":322,"context_line":"            ls_name \u003d ovn_utils.ovn_name(network_id)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"            # Localnet port name includes physnet for uniqueness"},{"line_number":325,"context_line":"            port_name \u003d f\"{ls_name}-localnet-{physnet}\""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"            # Check if localnet port already exists"},{"line_number":328,"context_line":"            existing_port \u003d ovn_client._nb_idl.lsp_get(port_name).execute("}],"source_content_type":"text/x-python","patch_set":9,"id":"804e5dcd_b95e8432","line":325,"in_reply_to":"71523d64_732514fa","updated":"2026-02-04 21:09:27.000000000","message":"Done","commit_id":"77bc846949ef3dd16d634281d2d98958ba146042"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"51d50717170a7d77fecede7bb5d11c27a7ecec97","unresolved":true,"context_lines":[{"line_number":393,"context_line":"            ls_name \u003d ovn_utils.ovn_name(network_id)"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"            # Localnet port name includes physnet for uniqueness"},{"line_number":396,"context_line":"            port_name \u003d f\"{ls_name}-localnet-{physnet}\""},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"            # Check if localnet port exists"},{"line_number":399,"context_line":"            existing_port \u003d ovn_client._nb_idl.lsp_get(port_name).execute("}],"source_content_type":"text/x-python","patch_set":9,"id":"7a655def_5c2e58c0","line":396,"updated":"2026-02-04 04:28:11.000000000","message":"Reused here so helper func at the top?","commit_id":"77bc846949ef3dd16d634281d2d98958ba146042"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"80046695a8947474ff8ecfcb89b80d5e777cc99a","unresolved":false,"context_lines":[{"line_number":393,"context_line":"            ls_name \u003d ovn_utils.ovn_name(network_id)"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"            # Localnet port name includes physnet for uniqueness"},{"line_number":396,"context_line":"            port_name \u003d f\"{ls_name}-localnet-{physnet}\""},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"            # Check if localnet port exists"},{"line_number":399,"context_line":"            existing_port \u003d ovn_client._nb_idl.lsp_get(port_name).execute("}],"source_content_type":"text/x-python","patch_set":9,"id":"c635847e_ec4259d7","line":396,"in_reply_to":"7a655def_5c2e58c0","updated":"2026-02-04 21:09:27.000000000","message":"Done","commit_id":"77bc846949ef3dd16d634281d2d98958ba146042"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e68e9e4112bc9ed719048a19ec824e81f8443607","unresolved":true,"context_lines":[{"line_number":297,"context_line":"                                break"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        except Exception as e:"},{"line_number":300,"context_line":"            LOG.error(\"Failed to ensure router gateway chassis for \""},{"line_number":301,"context_line":"                      \"network %s: %s\", network_id, e)"},{"line_number":302,"context_line":"            # Don\u0027t raise - this is an optimization, binding can still work"},{"line_number":303,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"796b9872_ec299bd1","line":300,"updated":"2026-02-04 20:48:12.000000000","message":"Should this be a warning instead of error, since we don\u0027t raise it?","commit_id":"3c34c9268660fab0cb087c552745657f669538f6"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"80046695a8947474ff8ecfcb89b80d5e777cc99a","unresolved":true,"context_lines":[{"line_number":297,"context_line":"                                break"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        except Exception as e:"},{"line_number":300,"context_line":"            LOG.error(\"Failed to ensure router gateway chassis for \""},{"line_number":301,"context_line":"                      \"network %s: %s\", network_id, e)"},{"line_number":302,"context_line":"            # Don\u0027t raise - this is an optimization, binding can still work"},{"line_number":303,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"4303650f_fb403bf0","line":300,"in_reply_to":"796b9872_ec299bd1","updated":"2026-02-04 21:09:27.000000000","message":"Hmm, likely. It could also be that the node is not connected and it fails depending on the ovn state/config as well. Hmm","commit_id":"3c34c9268660fab0cb087c552745657f669538f6"}]}
