)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f5c2765b72e8accbfc118ae8c36951c78f6a4981","unresolved":false,"context_lines":[{"line_number":32,"context_line":"Depends-On: Ibde33bdacba6bd1e9c41cc69d0054bf55e1e6454"},{"line_number":33,"context_line":"Change-Id: I9ae9d193b885364d5a4d90538880d8e9fbc8df74"},{"line_number":34,"context_line":"Co-Author: Thomas Goirand \u003czigo@debian.org\u003e"},{"line_number":35,"context_line":"Partial-Bug: #1667329"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"9f560f44_a3336562","line":35,"updated":"2020-08-11 21:27:33.000000000","message":"Is there anything else needed to close this bug or this is last missing part?","commit_id":"ef70ba6a2800fdf70e1591c0b9c22cb4f85d1c66"}],"doc/source/admin/config-bgp-floating-ip-over-l2-segmented-network.rst":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"06af3776acd5722a089e28ea21d571d9bdd56a59","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"On the OpenStack side, a provider network must be setup, which is using a"},{"line_number":19,"context_line":"different subnet range and vlan ID for each rack. This includes:"},{"line_number":20,"context_line":"- an address scope"},{"line_number":21,"context_line":"- some network segments for that network, which are attached to a named"},{"line_number":22,"context_line":"physical network"},{"line_number":23,"context_line":"- a subnet pool using that address scope"}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_accc0961","line":20,"updated":"2020-08-27 11:20:43.000000000","message":"Use asterisks to make a list: https://storage.gra.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_894/669395/25/check/openstack-tox-docs/89448af/docs/admin/config-bgp-floating-ip-over-l2-segmented-network.html","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"9c8a64037d60c830e1b760b0e9a07f84d8d477cf","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"On the OpenStack side, a provider network must be setup, which is using a"},{"line_number":19,"context_line":"different subnet range and vlan ID for each rack. This includes:"},{"line_number":20,"context_line":"- an address scope"},{"line_number":21,"context_line":"- some network segments for that network, which are attached to a named"},{"line_number":22,"context_line":"physical network"},{"line_number":23,"context_line":"- a subnet pool using that address scope"}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_4c4d6d98","line":20,"in_reply_to":"9f560f44_accc0961","updated":"2020-08-27 11:46:07.000000000","message":"Done","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":32,"context_line":"machines directly."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"On top of all of this, a floating IP subnet without segment is added, which"},{"line_number":35,"context_line":"spawns in all of the racks. This subnet must have the below service types:"},{"line_number":36,"context_line":"- network:routed"},{"line_number":37,"context_line":"- network:floatingip"},{"line_number":38,"context_line":"- network:router_gateway"}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_2a859dad","line":35,"range":{"start_line":35,"start_character":50,"end_line":35,"end_character":53},"updated":"2020-08-28 18:28:00.000000000","message":"s/one of the ?","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":32,"context_line":"machines directly."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"On top of all of this, a floating IP subnet without segment is added, which"},{"line_number":35,"context_line":"spawns in all of the racks. This subnet must have the below service types:"},{"line_number":36,"context_line":"- network:routed"},{"line_number":37,"context_line":"- network:floatingip"},{"line_number":38,"context_line":"- network:router_gateway"}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_ea9f25ff","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":6},"updated":"2020-08-28 18:28:00.000000000","message":"s/spans","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"96eb5836b2cdbc5ae7391b18f8d4450ea011260e","unresolved":false,"context_lines":[{"line_number":32,"context_line":"machines directly."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"On top of all of this, a floating IP subnet without segment is added, which"},{"line_number":35,"context_line":"spawns in all of the racks. This subnet must have the below service types:"},{"line_number":36,"context_line":"- network:routed"},{"line_number":37,"context_line":"- network:floatingip"},{"line_number":38,"context_line":"- network:router_gateway"}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_36f3fae9","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":6},"in_reply_to":"9f560f44_ea9f25ff","updated":"2020-08-31 07:31:15.000000000","message":"Done","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"06af3776acd5722a089e28ea21d571d9bdd56a59","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"On top of all of this, a floating IP subnet without segment is added, which"},{"line_number":35,"context_line":"spawns in all of the racks. This subnet must have the below service types:"},{"line_number":36,"context_line":"- network:routed"},{"line_number":37,"context_line":"- network:floatingip"},{"line_number":38,"context_line":"- network:router_gateway"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_ecd281fc","line":36,"updated":"2020-08-27 11:20:43.000000000","message":"ditto","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"9c8a64037d60c830e1b760b0e9a07f84d8d477cf","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"On top of all of this, a floating IP subnet without segment is added, which"},{"line_number":35,"context_line":"spawns in all of the racks. This subnet must have the below service types:"},{"line_number":36,"context_line":"- network:routed"},{"line_number":37,"context_line":"- network:floatingip"},{"line_number":38,"context_line":"- network:router_gateway"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_2c50f931","line":36,"in_reply_to":"9f560f44_ecd281fc","updated":"2020-08-27 11:46:07.000000000","message":"Done","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":38,"context_line":"- network:router_gateway"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Since the network:routed subnet isn\u0027t bound to a segment, it can be used on all"},{"line_number":41,"context_line":"racks. As the service types network:floatingip and network:router_gateway is"},{"line_number":42,"context_line":"used for the provider network, the subnet can only be used for floating IPs and"},{"line_number":43,"context_line":"router gateways, meaning that the subnet using segments will be used as"},{"line_number":44,"context_line":"floating IP gateways (ie: the next HOP to reach these floating IP / router"}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_8a9029ef","line":41,"range":{"start_line":41,"start_character":74,"end_line":41,"end_character":76},"updated":"2020-08-28 18:28:00.000000000","message":"s/are","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"96eb5836b2cdbc5ae7391b18f8d4450ea011260e","unresolved":false,"context_lines":[{"line_number":38,"context_line":"- network:router_gateway"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Since the network:routed subnet isn\u0027t bound to a segment, it can be used on all"},{"line_number":41,"context_line":"racks. As the service types network:floatingip and network:router_gateway is"},{"line_number":42,"context_line":"used for the provider network, the subnet can only be used for floating IPs and"},{"line_number":43,"context_line":"router gateways, meaning that the subnet using segments will be used as"},{"line_number":44,"context_line":"floating IP gateways (ie: the next HOP to reach these floating IP / router"}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_d62b9e30","line":41,"range":{"start_line":41,"start_character":74,"end_line":41,"end_character":76},"in_reply_to":"9f560f44_8a9029ef","updated":"2020-08-31 07:31:15.000000000","message":"Done","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":63,"context_line":"-------------"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"The neutron-bgp-agent must be installed. Best is to install it twice per rack,"},{"line_number":66,"context_line":"on any machine (it doesn\u0027t mater much where). Then each of these BGP agent will"},{"line_number":67,"context_line":"establish a session with one switch, and advertize all of the BGP"},{"line_number":68,"context_line":"configuration."},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_aac24de7","line":66,"range":{"start_line":66,"start_character":69,"end_line":66,"end_character":74},"updated":"2020-08-28 18:28:00.000000000","message":"s/agents","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"96eb5836b2cdbc5ae7391b18f8d4450ea011260e","unresolved":false,"context_lines":[{"line_number":63,"context_line":"-------------"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"The neutron-bgp-agent must be installed. Best is to install it twice per rack,"},{"line_number":66,"context_line":"on any machine (it doesn\u0027t mater much where). Then each of these BGP agent will"},{"line_number":67,"context_line":"establish a session with one switch, and advertize all of the BGP"},{"line_number":68,"context_line":"configuration."},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_1626b669","line":66,"range":{"start_line":66,"start_character":69,"end_line":66,"end_character":74},"in_reply_to":"9f560f44_aac24de7","updated":"2020-08-31 07:31:15.000000000","message":"Done","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"The neutron-bgp-agent must be installed. Best is to install it twice per rack,"},{"line_number":66,"context_line":"on any machine (it doesn\u0027t mater much where). Then each of these BGP agent will"},{"line_number":67,"context_line":"establish a session with one switch, and advertize all of the BGP"},{"line_number":68,"context_line":"configuration."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_6aa4b54b","line":67,"range":{"start_line":67,"start_character":41,"end_line":67,"end_character":50},"updated":"2020-08-28 18:28:00.000000000","message":"nit: advertise (i know this is a UK thing :)","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"96eb5836b2cdbc5ae7391b18f8d4450ea011260e","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"The neutron-bgp-agent must be installed. Best is to install it twice per rack,"},{"line_number":66,"context_line":"on any machine (it doesn\u0027t mater much where). Then each of these BGP agent will"},{"line_number":67,"context_line":"establish a session with one switch, and advertize all of the BGP"},{"line_number":68,"context_line":"configuration."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_f62a222a","line":67,"range":{"start_line":67,"start_character":41,"end_line":67,"end_character":50},"in_reply_to":"9f560f44_6aa4b54b","updated":"2020-08-31 07:31:15.000000000","message":"Done","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":80,"context_line":"  .. code-block:: console"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"     $ # Create a BGP peer to represent the switch 1,"},{"line_number":83,"context_line":"     $ # which runs FRR on 10.1.0.253 with AS 64601"},{"line_number":84,"context_line":"     $ openstack bgp peer create \\"},{"line_number":85,"context_line":"           --peer-ip 10.1.0.253 \\"},{"line_number":86,"context_line":"           --remote-as 64601 \\"}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_ea6d6503","line":83,"updated":"2020-08-28 18:28:00.000000000","message":"nit: little odd to have \u0027$ #\u0027 but just a nit","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"96eb5836b2cdbc5ae7391b18f8d4450ea011260e","unresolved":false,"context_lines":[{"line_number":80,"context_line":"  .. code-block:: console"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"     $ # Create a BGP peer to represent the switch 1,"},{"line_number":83,"context_line":"     $ # which runs FRR on 10.1.0.253 with AS 64601"},{"line_number":84,"context_line":"     $ openstack bgp peer create \\"},{"line_number":85,"context_line":"           --peer-ip 10.1.0.253 \\"},{"line_number":86,"context_line":"           --remote-as 64601 \\"}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_761612f4","line":83,"in_reply_to":"9f560f44_ea6d6503","updated":"2020-08-31 07:31:15.000000000","message":"Done","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":112,"context_line":"It is possible to repeate this operation for a 2nd machine on the same rack,"},{"line_number":113,"context_line":"if the deployment is using bonding (and then, LACP between both switches),"},{"line_number":114,"context_line":"as per the figure above. It also shall be done on each rack. One way to"},{"line_number":115,"context_line":"deploy is to select two computers in each racks, and install"},{"line_number":116,"context_line":"neutron-dynamic-routing-agent on each of them, so they can \"talk\" to both"},{"line_number":117,"context_line":"switches of the rack."},{"line_number":118,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_8a7e69ac","line":115,"range":{"start_line":115,"start_character":53,"end_line":115,"end_character":60},"updated":"2020-08-28 18:28:00.000000000","message":"s/install the","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":112,"context_line":"It is possible to repeate this operation for a 2nd machine on the same rack,"},{"line_number":113,"context_line":"if the deployment is using bonding (and then, LACP between both switches),"},{"line_number":114,"context_line":"as per the figure above. It also shall be done on each rack. One way to"},{"line_number":115,"context_line":"deploy is to select two computers in each racks, and install"},{"line_number":116,"context_line":"neutron-dynamic-routing-agent on each of them, so they can \"talk\" to both"},{"line_number":117,"context_line":"switches of the rack."},{"line_number":118,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_2a73dde8","line":115,"range":{"start_line":115,"start_character":42,"end_line":115,"end_character":47},"updated":"2020-08-28 18:28:00.000000000","message":"s/rack","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"96eb5836b2cdbc5ae7391b18f8d4450ea011260e","unresolved":false,"context_lines":[{"line_number":112,"context_line":"It is possible to repeate this operation for a 2nd machine on the same rack,"},{"line_number":113,"context_line":"if the deployment is using bonding (and then, LACP between both switches),"},{"line_number":114,"context_line":"as per the figure above. It also shall be done on each rack. One way to"},{"line_number":115,"context_line":"deploy is to select two computers in each racks, and install"},{"line_number":116,"context_line":"neutron-dynamic-routing-agent on each of them, so they can \"talk\" to both"},{"line_number":117,"context_line":"switches of the rack."},{"line_number":118,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_d6d0be2e","line":115,"range":{"start_line":115,"start_character":42,"end_line":115,"end_character":47},"in_reply_to":"9f560f44_2a73dde8","updated":"2020-08-31 07:31:15.000000000","message":"Done","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"96eb5836b2cdbc5ae7391b18f8d4450ea011260e","unresolved":false,"context_lines":[{"line_number":112,"context_line":"It is possible to repeate this operation for a 2nd machine on the same rack,"},{"line_number":113,"context_line":"if the deployment is using bonding (and then, LACP between both switches),"},{"line_number":114,"context_line":"as per the figure above. It also shall be done on each rack. One way to"},{"line_number":115,"context_line":"deploy is to select two computers in each racks, and install"},{"line_number":116,"context_line":"neutron-dynamic-routing-agent on each of them, so they can \"talk\" to both"},{"line_number":117,"context_line":"switches of the rack."},{"line_number":118,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_b6d54a1e","line":115,"range":{"start_line":115,"start_character":53,"end_line":115,"end_character":60},"in_reply_to":"9f560f44_8a7e69ac","updated":"2020-08-31 07:31:15.000000000","message":"Done","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":141,"context_line":"Setting-up the provider network"},{"line_number":142,"context_line":"-------------------------------"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Everything that is in the provider network\u0027s scope will be advertized through"},{"line_number":145,"context_line":"BGP. Here is how to create the network scope:"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"  .. code-block:: console"}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_6a7955c3","line":144,"range":{"start_line":144,"start_character":59,"end_line":144,"end_character":69},"updated":"2020-08-28 18:28:00.000000000","message":":)","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"96eb5836b2cdbc5ae7391b18f8d4450ea011260e","unresolved":false,"context_lines":[{"line_number":141,"context_line":"Setting-up the provider network"},{"line_number":142,"context_line":"-------------------------------"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Everything that is in the provider network\u0027s scope will be advertized through"},{"line_number":145,"context_line":"BGP. Here is how to create the network scope:"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"  .. code-block:: console"}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_f6dfc237","line":144,"range":{"start_line":144,"start_character":59,"end_line":144,"end_character":69},"in_reply_to":"9f560f44_6a7955c3","updated":"2020-08-31 07:31:15.000000000","message":"Done","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"This automatically creates a network AND a segment. Though by default, this"},{"line_number":166,"context_line":"segment has no name, which isn\u0027t convenient. This bame can be changed though:"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"  .. code-block:: console"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_aa508d33","line":166,"range":{"start_line":166,"start_character":50,"end_line":166,"end_character":54},"updated":"2020-08-28 18:28:00.000000000","message":"??","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"96eb5836b2cdbc5ae7391b18f8d4450ea011260e","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"This automatically creates a network AND a segment. Though by default, this"},{"line_number":166,"context_line":"segment has no name, which isn\u0027t convenient. This bame can be changed though:"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"  .. code-block:: console"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_96ee46eb","line":166,"range":{"start_line":166,"start_character":50,"end_line":166,"end_character":54},"in_reply_to":"9f560f44_aa508d33","updated":"2020-08-31 07:31:15.000000000","message":"I meant \"name\", typo. Fixed! :)","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":200,"context_line":"Setting-up the provider subnets for the BGP next HOP routing"},{"line_number":201,"context_line":"------------------------------------------------------------"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"These subnets will be in use in defferent racks, depending on what physical"},{"line_number":204,"context_line":"network is in use in the machines. In order to use the address scope, subnet"},{"line_number":205,"context_line":"pools must be used. Here is how to create the subnet pool with the two ranges"},{"line_number":206,"context_line":"to use later when creating the subnets:"}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_2fb3af4f","line":203,"range":{"start_line":203,"start_character":32,"end_line":203,"end_character":41},"updated":"2020-08-28 18:28:00.000000000","message":"s/different","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"96eb5836b2cdbc5ae7391b18f8d4450ea011260e","unresolved":false,"context_lines":[{"line_number":200,"context_line":"Setting-up the provider subnets for the BGP next HOP routing"},{"line_number":201,"context_line":"------------------------------------------------------------"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"These subnets will be in use in defferent racks, depending on what physical"},{"line_number":204,"context_line":"network is in use in the machines. In order to use the address scope, subnet"},{"line_number":205,"context_line":"pools must be used. Here is how to create the subnet pool with the two ranges"},{"line_number":206,"context_line":"to use later when creating the subnets:"}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_76ebb2db","line":203,"range":{"start_line":203,"start_character":32,"end_line":203,"end_character":41},"in_reply_to":"9f560f44_2fb3af4f","updated":"2020-08-31 07:31:15.000000000","message":"Done","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"  .. code-block:: console"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"     $ # Create the subnet for the pysnet-rack-1, using the segment-rack-1, and"},{"line_number":226,"context_line":"     $ # the subnet_service_type network:floatingip_agent_gateway"},{"line_number":227,"context_line":"     $ openstack subnet create \\"},{"line_number":228,"context_line":"           --service-type \u0027network:floatingip_agent_gateway\u0027 \\"}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_6f864768","line":225,"range":{"start_line":225,"start_character":35,"end_line":225,"end_character":41},"updated":"2020-08-28 18:28:00.000000000","message":"s/physnet ?","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"96eb5836b2cdbc5ae7391b18f8d4450ea011260e","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"  .. code-block:: console"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"     $ # Create the subnet for the pysnet-rack-1, using the segment-rack-1, and"},{"line_number":226,"context_line":"     $ # the subnet_service_type network:floatingip_agent_gateway"},{"line_number":227,"context_line":"     $ openstack subnet create \\"},{"line_number":228,"context_line":"           --service-type \u0027network:floatingip_agent_gateway\u0027 \\"}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_b6beead1","line":225,"range":{"start_line":225,"start_character":35,"end_line":225,"end_character":41},"in_reply_to":"9f560f44_6f864768","updated":"2020-08-31 07:31:15.000000000","message":"Done","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":254,"context_line":"Adding a subnet for VM floating IPs and router gateways"},{"line_number":255,"context_line":"-------------------------------------------------------"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"This is to be repeated each time a new subnet must be created for floaring IPs"},{"line_number":258,"context_line":"and router gateways. First, the range is added in the subnet pool, then the"},{"line_number":259,"context_line":"subnet itself is created:"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_0f950b89","line":257,"range":{"start_line":257,"start_character":66,"end_line":257,"end_character":74},"updated":"2020-08-28 18:28:00.000000000","message":"s/floating","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":265,"context_line":"           --pool-prefix 85.125.24.0/24 \\"},{"line_number":266,"context_line":"           provider-subnet-pool"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"     $ # Create the floagin IP subnet"},{"line_number":269,"context_line":"     $ openstack subnet create vm-fip \\"},{"line_number":270,"context_line":"           --service-type \u0027network:routed\u0027 \\"},{"line_number":271,"context_line":"           --service-type \u0027network:floatingip\u0027 \\"}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_2f8c4f7e","line":268,"range":{"start_line":268,"start_character":20,"end_line":268,"end_character":27},"updated":"2020-08-28 18:28:00.000000000","message":"s/floating","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":281,"context_line":"Setting-up BGP advertizing"},{"line_number":282,"context_line":"--------------------------"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"The provider network needs to be added to each BGP speakers. This means each"},{"line_number":285,"context_line":"time a new rack is setup, the provider network must be added to the 2 BGP"},{"line_number":286,"context_line":"speakers of that rack."},{"line_number":287,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_0fda2b78","line":284,"range":{"start_line":284,"start_character":51,"end_line":284,"end_character":59},"updated":"2020-08-28 18:28:00.000000000","message":"s/speaker or \"each of the BGP speakers\"","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"96eb5836b2cdbc5ae7391b18f8d4450ea011260e","unresolved":false,"context_lines":[{"line_number":281,"context_line":"Setting-up BGP advertizing"},{"line_number":282,"context_line":"--------------------------"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"The provider network needs to be added to each BGP speakers. This means each"},{"line_number":285,"context_line":"time a new rack is setup, the provider network must be added to the 2 BGP"},{"line_number":286,"context_line":"speakers of that rack."},{"line_number":287,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_d69efe67","line":284,"range":{"start_line":284,"start_character":51,"end_line":284,"end_character":59},"in_reply_to":"9f560f44_0fda2b78","updated":"2020-08-31 07:31:15.000000000","message":"Done","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":330,"context_line":"     $ openstack router add subnet \\"},{"line_number":331,"context_line":"           tenant-router tenant-subnet-1"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"     $ # Set the router\u0027s defaut gateway. This will use one public IP."},{"line_number":334,"context_line":"     $ openstack router set \\"},{"line_number":335,"context_line":"           --external-gateway provider-network tenant-router"},{"line_number":336,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_efd6d753","line":333,"range":{"start_line":333,"start_character":26,"end_line":333,"end_character":32},"updated":"2020-08-28 18:28:00.000000000","message":"s/default","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"96eb5836b2cdbc5ae7391b18f8d4450ea011260e","unresolved":false,"context_lines":[{"line_number":330,"context_line":"     $ openstack router add subnet \\"},{"line_number":331,"context_line":"           tenant-router tenant-subnet-1"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"     $ # Set the router\u0027s defaut gateway. This will use one public IP."},{"line_number":334,"context_line":"     $ openstack router set \\"},{"line_number":335,"context_line":"           --external-gateway provider-network tenant-router"},{"line_number":336,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_16a9968f","line":333,"range":{"start_line":333,"start_character":26,"end_line":333,"end_character":32},"in_reply_to":"9f560f44_efd6d753","updated":"2020-08-31 07:31:15.000000000","message":"Done","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":345,"context_line":"     $ openstack floating ip create provider-network"},{"line_number":346,"context_line":"     $ openstack server add floating ip test-server-1 85.125.24.17"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"Checkings"},{"line_number":349,"context_line":"---------"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"If everything goes well, the floating IPs are advertized over BGP through the"}],"source_content_type":"text/x-rst","patch_set":25,"id":"9f560f44_6fd48748","line":348,"range":{"start_line":348,"start_character":0,"end_line":348,"end_character":9},"updated":"2020-08-28 18:28:00.000000000","message":"maybe \"Verification\" ?","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3b7012ce9b3211af7b3327bf51d3d89f9a6ebac1","unresolved":false,"context_lines":[{"line_number":311,"context_line":"nice to have. Typically, the customer network will not be advertized through"},{"line_number":312,"context_line":"BGP (but this can be done if needed)."},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"  .. code-block:: console"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"     # Create the tenant private network"},{"line_number":317,"context_line":"     $ openstack network create tenant-network"}],"source_content_type":"text/x-rst","patch_set":28,"id":"9f560f44_45498889","line":314,"updated":"2020-09-01 00:25:34.000000000","message":"docs: Could not lex literal_block as \"console\". Highlighting skipped.","commit_id":"74ee297d005c6a493690868257d3e51e6de46231"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"1b7988528cd6d4dc57bbbdd4b09099d89f89cce8","unresolved":false,"context_lines":[{"line_number":311,"context_line":"nice to have. Typically, the customer network will not be advertized through"},{"line_number":312,"context_line":"BGP (but this can be done if needed)."},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"  .. code-block:: console"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"     # Create the tenant private network"},{"line_number":317,"context_line":"     $ openstack network create tenant-network"}],"source_content_type":"text/x-rst","patch_set":28,"id":"9f560f44_bc4ec993","line":314,"updated":"2020-08-31 09:55:43.000000000","message":"docs: Could not lex literal_block as \"console\". Highlighting skipped.","commit_id":"74ee297d005c6a493690868257d3e51e6de46231"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0b624a26f5d12b3e154c1afa55976828044e3166","unresolved":false,"context_lines":[{"line_number":311,"context_line":"nice to have. Typically, the customer network will not be advertized through"},{"line_number":312,"context_line":"BGP (but this can be done if needed)."},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"  .. code-block:: console"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"     # Create the tenant private network"},{"line_number":317,"context_line":"     $ openstack network create tenant-network"}],"source_content_type":"text/x-rst","patch_set":28,"id":"9f560f44_cb4acc59","line":314,"updated":"2020-08-31 18:05:48.000000000","message":"docs: Could not lex literal_block as \"console\". Highlighting skipped.","commit_id":"74ee297d005c6a493690868257d3e51e6de46231"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6bbd7ed29dc94242e04e4f73554f478dbb41913e","unresolved":true,"context_lines":[{"line_number":8,"context_line":"Everything outside the switches of the rack will be routed using BGP. To"},{"line_number":9,"context_line":"perform the BGP announcement, neutron-dynamic-routing is leveraged."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"To acheive this, on each rack, servers are setup with a different management"},{"line_number":12,"context_line":"network using a vlan ID per rack (light green and orange network below)."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":29,"id":"aa36cb93_38e87f17","line":11,"range":{"start_line":11,"start_character":3,"end_line":11,"end_character":10},"updated":"2020-12-11 08:27:44.000000000","message":"nitty nit: achieve","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"55b2aa62246cad9019ff34349841278d0456946c","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Everything outside the switches of the rack will be routed using BGP. To"},{"line_number":9,"context_line":"perform the BGP announcement, neutron-dynamic-routing is leveraged."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"To acheive this, on each rack, servers are setup with a different management"},{"line_number":12,"context_line":"network using a vlan ID per rack (light green and orange network below)."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":29,"id":"6f0ed3a6_ccef08ec","line":11,"range":{"start_line":11,"start_character":3,"end_line":11,"end_character":10},"in_reply_to":"aa36cb93_38e87f17","updated":"2020-12-15 19:46:24.000000000","message":"Done","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"a9daa83dca760ee135fbf1f609079a82311f1eb0","unresolved":true,"context_lines":[{"line_number":9,"context_line":"perform the BGP announcement, neutron-dynamic-routing is leveraged."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"To acheive this, on each rack, servers are setup with a different management"},{"line_number":12,"context_line":"network using a vlan ID per rack (light green and orange network below)."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":".. image:: figures/bgp-floating-ip-over-l2-segmented-network.png"}],"source_content_type":"text/x-rst","patch_set":29,"id":"b3df4223_4a91a28f","line":12,"updated":"2020-12-14 14:07:32.000000000","message":"Why having differents vlan per rack?\nIf the vlan between compute and rack switchs would be only local (not configured accross racks), then it would be possible to have only 1 vlan for this?\nIf yes, it would simplify a lot your documentation, because you would only have to create one provider network, and some of the commands that needs to be done each time you deploy a new rack would not be necessary?","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"55b2aa62246cad9019ff34349841278d0456946c","unresolved":true,"context_lines":[{"line_number":9,"context_line":"perform the BGP announcement, neutron-dynamic-routing is leveraged."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"To acheive this, on each rack, servers are setup with a different management"},{"line_number":12,"context_line":"network using a vlan ID per rack (light green and orange network below)."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":".. image:: figures/bgp-floating-ip-over-l2-segmented-network.png"}],"source_content_type":"text/x-rst","patch_set":29,"id":"f7acf582_966ff48d","line":12,"in_reply_to":"b3df4223_4a91a28f","updated":"2020-12-15 19:46:24.000000000","message":"Each time a new rack is deployed, a new \"infrastructure\" range (ie: the IPs for next HOP) must be created, so it wont simplify. However, for clarification, I\u0027ve just added a note saying it\u0027s possible to use the same VLAN ID for all racks.","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"6c907ccb10595777d52c990504d112fe51163473","unresolved":false,"context_lines":[{"line_number":9,"context_line":"perform the BGP announcement, neutron-dynamic-routing is leveraged."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"To acheive this, on each rack, servers are setup with a different management"},{"line_number":12,"context_line":"network using a vlan ID per rack (light green and orange network below)."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":".. image:: figures/bgp-floating-ip-over-l2-segmented-network.png"}],"source_content_type":"text/x-rst","patch_set":29,"id":"2a0c65ba_cd87c04e","line":12,"in_reply_to":"f7acf582_966ff48d","updated":"2020-12-17 08:08:22.000000000","message":"Done","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4c2a193fd668a3e25c9bda11f15d7c22d65cccfd","unresolved":true,"context_lines":[{"line_number":34,"context_line":"\"network:floatingip_agent_gateway\", so that they cannot be used by virtual"},{"line_number":35,"context_line":"machines directly."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"On top of all of this, a floating IP subnet without segment is added, which"},{"line_number":38,"context_line":"spans in all of the racks. This subnet must have the below service types:"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"* network:routed"}],"source_content_type":"text/x-rst","patch_set":29,"id":"edddaadc_8fa01c1b","line":37,"range":{"start_line":37,"start_character":52,"end_line":37,"end_character":59},"updated":"2020-12-14 15:33:39.000000000","message":"nit: a segment ?","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"55b2aa62246cad9019ff34349841278d0456946c","unresolved":false,"context_lines":[{"line_number":34,"context_line":"\"network:floatingip_agent_gateway\", so that they cannot be used by virtual"},{"line_number":35,"context_line":"machines directly."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"On top of all of this, a floating IP subnet without segment is added, which"},{"line_number":38,"context_line":"spans in all of the racks. This subnet must have the below service types:"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"* network:routed"}],"source_content_type":"text/x-rst","patch_set":29,"id":"52beacfd_09c67d96","line":37,"range":{"start_line":37,"start_character":52,"end_line":37,"end_character":59},"in_reply_to":"edddaadc_8fa01c1b","updated":"2020-12-15 19:46:24.000000000","message":"Done","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4c2a193fd668a3e25c9bda11f15d7c22d65cccfd","unresolved":true,"context_lines":[{"line_number":54,"context_line":"Configuring the Neutron API side"},{"line_number":55,"context_line":"--------------------------------"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"On the controller side (ie: API and RPC server), neutron-dynamic-routing-common"},{"line_number":58,"context_line":"and python3-neutron-dynamic-routing must be installed. On top of that,"},{"line_number":59,"context_line":"\"segments\" and \"bgp\" must be added to the list of plugins in service_plugins."},{"line_number":60,"context_line":"For example in neutron.conf:"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-rst","patch_set":29,"id":"ee14168a_5ff9847c","line":58,"range":{"start_line":57,"start_character":49,"end_line":58,"end_character":35},"updated":"2020-12-14 15:33:39.000000000","message":"nit: don\u0027t know if this should be more generic and just mention neutron dynamic routing packages must be installed, in case they are delivered differently in some distro, but just a nit.","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"55b2aa62246cad9019ff34349841278d0456946c","unresolved":false,"context_lines":[{"line_number":54,"context_line":"Configuring the Neutron API side"},{"line_number":55,"context_line":"--------------------------------"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"On the controller side (ie: API and RPC server), neutron-dynamic-routing-common"},{"line_number":58,"context_line":"and python3-neutron-dynamic-routing must be installed. On top of that,"},{"line_number":59,"context_line":"\"segments\" and \"bgp\" must be added to the list of plugins in service_plugins."},{"line_number":60,"context_line":"For example in neutron.conf:"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-rst","patch_set":29,"id":"f57c1401_4fc6a830","line":58,"range":{"start_line":57,"start_character":49,"end_line":58,"end_character":35},"in_reply_to":"ee14168a_5ff9847c","updated":"2020-12-15 19:46:24.000000000","message":"Done","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4c2a193fd668a3e25c9bda11f15d7c22d65cccfd","unresolved":true,"context_lines":[{"line_number":115,"context_line":"           --no-advertise-tenant-networks mycloud-compute-1.example.com"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"It is possible to repeate this operation for a 2nd machine on the same rack,"},{"line_number":119,"context_line":"if the deployment is using bonding (and then, LACP between both switches),"},{"line_number":120,"context_line":"as per the figure above. It also shall be done on each rack. One way to"},{"line_number":121,"context_line":"deploy is to select two computers in each rack, and install the"}],"source_content_type":"text/x-rst","patch_set":29,"id":"03b65e66_41a83ea6","line":118,"range":{"start_line":118,"start_character":18,"end_line":118,"end_character":25},"updated":"2020-12-14 15:33:39.000000000","message":"s/repeat","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"55b2aa62246cad9019ff34349841278d0456946c","unresolved":false,"context_lines":[{"line_number":115,"context_line":"           --no-advertise-tenant-networks mycloud-compute-1.example.com"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"It is possible to repeate this operation for a 2nd machine on the same rack,"},{"line_number":119,"context_line":"if the deployment is using bonding (and then, LACP between both switches),"},{"line_number":120,"context_line":"as per the figure above. It also shall be done on each rack. One way to"},{"line_number":121,"context_line":"deploy is to select two computers in each rack, and install the"}],"source_content_type":"text/x-rst","patch_set":29,"id":"068f35f7_94d033f6","line":118,"range":{"start_line":118,"start_character":18,"end_line":118,"end_character":25},"in_reply_to":"03b65e66_41a83ea6","updated":"2020-12-15 19:46:24.000000000","message":"Done","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4c2a193fd668a3e25c9bda11f15d7c22d65cccfd","unresolved":true,"context_lines":[{"line_number":118,"context_line":"It is possible to repeate this operation for a 2nd machine on the same rack,"},{"line_number":119,"context_line":"if the deployment is using bonding (and then, LACP between both switches),"},{"line_number":120,"context_line":"as per the figure above. It also shall be done on each rack. One way to"},{"line_number":121,"context_line":"deploy is to select two computers in each rack, and install the"},{"line_number":122,"context_line":"neutron-dynamic-routing-agent on each of them, so they can \"talk\" to both"},{"line_number":123,"context_line":"switches of the rack."},{"line_number":124,"context_line":""}],"source_content_type":"text/x-rst","patch_set":29,"id":"40583e7e_f83c5d2d","line":121,"range":{"start_line":121,"start_character":24,"end_line":121,"end_character":33},"updated":"2020-12-14 15:33:39.000000000","message":"nit: Didn\u0027t know if the intention was more at \"compute nodes\" here?","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"55b2aa62246cad9019ff34349841278d0456946c","unresolved":false,"context_lines":[{"line_number":118,"context_line":"It is possible to repeate this operation for a 2nd machine on the same rack,"},{"line_number":119,"context_line":"if the deployment is using bonding (and then, LACP between both switches),"},{"line_number":120,"context_line":"as per the figure above. It also shall be done on each rack. One way to"},{"line_number":121,"context_line":"deploy is to select two computers in each rack, and install the"},{"line_number":122,"context_line":"neutron-dynamic-routing-agent on each of them, so they can \"talk\" to both"},{"line_number":123,"context_line":"switches of the rack."},{"line_number":124,"context_line":""}],"source_content_type":"text/x-rst","patch_set":29,"id":"20228176_84f30332","line":121,"range":{"start_line":121,"start_character":24,"end_line":121,"end_character":33},"in_reply_to":"40583e7e_f83c5d2d","updated":"2020-12-15 19:46:24.000000000","message":"Done","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6bbd7ed29dc94242e04e4f73554f478dbb41913e","unresolved":true,"context_lines":[{"line_number":120,"context_line":"as per the figure above. It also shall be done on each rack. One way to"},{"line_number":121,"context_line":"deploy is to select two computers in each rack, and install the"},{"line_number":122,"context_line":"neutron-dynamic-routing-agent on each of them, so they can \"talk\" to both"},{"line_number":123,"context_line":"switches of the rack."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Setting-up physical network names"}],"source_content_type":"text/x-rst","patch_set":29,"id":"646c9b8f_02d922b2","line":123,"updated":"2020-12-11 08:27:44.000000000","message":"You are saying that it can be done on 2 machines in the rack. Will it be any issue if someone would configure it on more hosts in one rack? Should we warn users to not do that or it won\u0027t hurt?","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"55b2aa62246cad9019ff34349841278d0456946c","unresolved":false,"context_lines":[{"line_number":120,"context_line":"as per the figure above. It also shall be done on each rack. One way to"},{"line_number":121,"context_line":"deploy is to select two computers in each rack, and install the"},{"line_number":122,"context_line":"neutron-dynamic-routing-agent on each of them, so they can \"talk\" to both"},{"line_number":123,"context_line":"switches of the rack."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Setting-up physical network names"}],"source_content_type":"text/x-rst","patch_set":29,"id":"3c27151a_decb8004","line":123,"in_reply_to":"646c9b8f_02d922b2","updated":"2020-12-15 19:46:24.000000000","message":"Done","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6bbd7ed29dc94242e04e4f73554f478dbb41913e","unresolved":true,"context_lines":[{"line_number":137,"context_line":"     flat_networks \u003d physnet-rack1"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"     [ml2_type_vlan]"},{"line_number":140,"context_line":"     network_vlan_ranges \u003d physnet-rack1"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Once this is done, the provider network can be created, using physnet-rack1"}],"source_content_type":"text/x-rst","patch_set":29,"id":"c576caee_90a34abd","line":140,"updated":"2020-12-11 08:27:44.000000000","message":"isn\u0027t this setting \"per neutron server\"?","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"55b2aa62246cad9019ff34349841278d0456946c","unresolved":true,"context_lines":[{"line_number":137,"context_line":"     flat_networks \u003d physnet-rack1"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"     [ml2_type_vlan]"},{"line_number":140,"context_line":"     network_vlan_ranges \u003d physnet-rack1"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Once this is done, the provider network can be created, using physnet-rack1"}],"source_content_type":"text/x-rst","patch_set":29,"id":"7af4556b_bba9c547","line":140,"in_reply_to":"5282454a_61ec284d","updated":"2020-12-15 19:46:24.000000000","message":"This really is a per-node, depending on the rack, configuration. If a network node is in rack b4, then here we should write \"b4\" or \"physnet-b4\" (it doesn\u0027t mater, as long as it matches what one writes as physnet when creating the segment).\n\nThere\u0027s nothing that has to be configured in the neutron-server (ie: neutron-api or neutron-rpc-server) side that depends on the physical network names.","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"6c907ccb10595777d52c990504d112fe51163473","unresolved":true,"context_lines":[{"line_number":137,"context_line":"     flat_networks \u003d physnet-rack1"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"     [ml2_type_vlan]"},{"line_number":140,"context_line":"     network_vlan_ranges \u003d physnet-rack1"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Once this is done, the provider network can be created, using physnet-rack1"}],"source_content_type":"text/x-rst","patch_set":29,"id":"a9e74416_f81953ec","line":140,"in_reply_to":"7af4556b_bba9c547","updated":"2020-12-17 08:08:22.000000000","message":"I am confused.\nIIRC the plugin is supposed to be configured on server side, not on agent side.\nWhat needs to be configured on agent side is the mechanism driver (/etc/neutron/plugins/ml2/openvswitch_agent.ini).\n\nSo I would expect a config on server side (plugin) with all physical networks:\nnetwork_vlan_ranges \u003d physnet-rack1,physnet-rack2\n\nAnd a config on agent side with *only* the necessary bridge mapping:\nbridge_mappings \u003d physnet-rack1:br-ex\n\nor something similar.\n\nWould you mind double check this config on your side, or let me know if I am completely wrong?","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"b813213a174c8c035b2b0c276e292811ffa7ca65","unresolved":false,"context_lines":[{"line_number":137,"context_line":"     flat_networks \u003d physnet-rack1"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"     [ml2_type_vlan]"},{"line_number":140,"context_line":"     network_vlan_ranges \u003d physnet-rack1"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Once this is done, the provider network can be created, using physnet-rack1"}],"source_content_type":"text/x-rst","patch_set":29,"id":"0f48b16d_7303dca0","line":140,"in_reply_to":"82ed9720_2a08066f","updated":"2020-12-17 09:12:29.000000000","message":"Done","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5f91ec76ed2120a9b9714f1682681b05cc92d5fd","unresolved":true,"context_lines":[{"line_number":137,"context_line":"     flat_networks \u003d physnet-rack1"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"     [ml2_type_vlan]"},{"line_number":140,"context_line":"     network_vlan_ranges \u003d physnet-rack1"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Once this is done, the provider network can be created, using physnet-rack1"}],"source_content_type":"text/x-rst","patch_set":29,"id":"82ed9720_2a08066f","line":140,"in_reply_to":"a9e74416_f81953ec","updated":"2020-12-17 08:49:59.000000000","message":"I know that You can configure here various ranges for various physical networks. I just wanted to highligh that this setting should be configured on the node where neutron-server is run as only neutron server is using \"network_vlan_ranges\" config option really.","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"a9daa83dca760ee135fbf1f609079a82311f1eb0","unresolved":true,"context_lines":[{"line_number":137,"context_line":"     flat_networks \u003d physnet-rack1"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"     [ml2_type_vlan]"},{"line_number":140,"context_line":"     network_vlan_ranges \u003d physnet-rack1"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Once this is done, the provider network can be created, using physnet-rack1"}],"source_content_type":"text/x-rst","patch_set":29,"id":"5282454a_61ec284d","line":140,"in_reply_to":"c576caee_90a34abd","updated":"2020-12-14 14:07:32.000000000","message":"agree, this configuration should be done on neutron API server side, not network node.","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4c2a193fd668a3e25c9bda11f15d7c22d65cccfd","unresolved":true,"context_lines":[{"line_number":234,"context_line":"           --service-type \u0027network:floatingip_agent_gateway\u0027 \\"},{"line_number":235,"context_line":"           --subnet-pool provider-subnet-pool \\"},{"line_number":236,"context_line":"           --subnet-range 10.1.0.0/24 \\"},{"line_number":237,"context_line":"           --allocation-pool start\u003d10.1.0.4,end\u003d10.1.0.252 \\"},{"line_number":238,"context_line":"           --gateway 10.1.0.1 \\"},{"line_number":239,"context_line":"           --network provider-network \\"},{"line_number":240,"context_line":"           --network-segment segment-rack1 \\"}],"source_content_type":"text/x-rst","patch_set":29,"id":"712c3723_cbebdefd","line":237,"range":{"start_line":237,"start_character":42,"end_line":237,"end_character":43},"updated":"2020-12-14 15:33:39.000000000","message":"This doesn\u0027t match the comment as .3 is also reserved","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"55b2aa62246cad9019ff34349841278d0456946c","unresolved":false,"context_lines":[{"line_number":234,"context_line":"           --service-type \u0027network:floatingip_agent_gateway\u0027 \\"},{"line_number":235,"context_line":"           --subnet-pool provider-subnet-pool \\"},{"line_number":236,"context_line":"           --subnet-range 10.1.0.0/24 \\"},{"line_number":237,"context_line":"           --allocation-pool start\u003d10.1.0.4,end\u003d10.1.0.252 \\"},{"line_number":238,"context_line":"           --gateway 10.1.0.1 \\"},{"line_number":239,"context_line":"           --network provider-network \\"},{"line_number":240,"context_line":"           --network-segment segment-rack1 \\"}],"source_content_type":"text/x-rst","patch_set":29,"id":"a8a53033_e272c321","line":237,"range":{"start_line":237,"start_character":42,"end_line":237,"end_character":43},"in_reply_to":"712c3723_cbebdefd","updated":"2020-12-15 19:46:24.000000000","message":"Done","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4c2a193fd668a3e25c9bda11f15d7c22d65cccfd","unresolved":true,"context_lines":[{"line_number":245,"context_line":"           --service-type \u0027network:floatingip_agent_gateway\u0027 \\"},{"line_number":246,"context_line":"           --subnet-pool provider-subnet-pool \\"},{"line_number":247,"context_line":"           --subnet-range 10.2.0.0/24 \\"},{"line_number":248,"context_line":"           --allocation-pool start\u003d10.2.0.4,end\u003d10.2.0.252 \\"},{"line_number":249,"context_line":"           --gateway 10.2.0.1 \\"},{"line_number":250,"context_line":"           --network provider-network \\"},{"line_number":251,"context_line":"           --network-segment segment-rack2 \\"}],"source_content_type":"text/x-rst","patch_set":29,"id":"9b07cb7e_6926731d","line":248,"range":{"start_line":248,"start_character":42,"end_line":248,"end_character":43},"updated":"2020-12-14 15:33:39.000000000","message":"same","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"55b2aa62246cad9019ff34349841278d0456946c","unresolved":false,"context_lines":[{"line_number":245,"context_line":"           --service-type \u0027network:floatingip_agent_gateway\u0027 \\"},{"line_number":246,"context_line":"           --subnet-pool provider-subnet-pool \\"},{"line_number":247,"context_line":"           --subnet-range 10.2.0.0/24 \\"},{"line_number":248,"context_line":"           --allocation-pool start\u003d10.2.0.4,end\u003d10.2.0.252 \\"},{"line_number":249,"context_line":"           --gateway 10.2.0.1 \\"},{"line_number":250,"context_line":"           --network provider-network \\"},{"line_number":251,"context_line":"           --network-segment segment-rack2 \\"}],"source_content_type":"text/x-rst","patch_set":29,"id":"96cd944f_2c2aa5a7","line":248,"range":{"start_line":248,"start_character":42,"end_line":248,"end_character":43},"in_reply_to":"9b07cb7e_6926731d","updated":"2020-12-15 19:46:24.000000000","message":"Done","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4c2a193fd668a3e25c9bda11f15d7c22d65cccfd","unresolved":true,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"     $ # Add a new prefix in the subnet pool for the floating IPs:"},{"line_number":270,"context_line":"     $ openstack subnet pool set \\"},{"line_number":271,"context_line":"           --pool-prefix 85.125.24.0/24 \\"},{"line_number":272,"context_line":"           provider-subnet-pool"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"     $ # Create the floatin IP subnet"}],"source_content_type":"text/x-rst","patch_set":29,"id":"7c5ff6fb_124f266c","line":271,"range":{"start_line":271,"start_character":25,"end_line":271,"end_character":36},"updated":"2020-12-14 15:33:39.000000000","message":"This looks like real IP address space (85-125-24-0.static.upcbusiness.at), should maybe use another RFC 1918 space.","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"b813213a174c8c035b2b0c276e292811ffa7ca65","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"     $ # Add a new prefix in the subnet pool for the floating IPs:"},{"line_number":270,"context_line":"     $ openstack subnet pool set \\"},{"line_number":271,"context_line":"           --pool-prefix 85.125.24.0/24 \\"},{"line_number":272,"context_line":"           provider-subnet-pool"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"     $ # Create the floatin IP subnet"}],"source_content_type":"text/x-rst","patch_set":29,"id":"09147146_b9832a3b","line":271,"range":{"start_line":271,"start_character":25,"end_line":271,"end_character":36},"in_reply_to":"5e88b668_3e6ee8c3","updated":"2020-12-17 09:12:29.000000000","message":"Done","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"55b2aa62246cad9019ff34349841278d0456946c","unresolved":true,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"     $ # Add a new prefix in the subnet pool for the floating IPs:"},{"line_number":270,"context_line":"     $ openstack subnet pool set \\"},{"line_number":271,"context_line":"           --pool-prefix 85.125.24.0/24 \\"},{"line_number":272,"context_line":"           provider-subnet-pool"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"     $ # Create the floatin IP subnet"}],"source_content_type":"text/x-rst","patch_set":29,"id":"5e88b668_3e6ee8c3","line":271,"range":{"start_line":271,"start_character":25,"end_line":271,"end_character":36},"in_reply_to":"7c5ff6fb_124f266c","updated":"2020-12-15 19:46:24.000000000","message":"Ok, I used 203.0.113.0/24 which is defined by RFC 5737 (see: https://tools.ietf.org/html/rfc5737).","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4c2a193fd668a3e25c9bda11f15d7c22d65cccfd","unresolved":true,"context_lines":[{"line_number":271,"context_line":"           --pool-prefix 85.125.24.0/24 \\"},{"line_number":272,"context_line":"           provider-subnet-pool"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"     $ # Create the floatin IP subnet"},{"line_number":275,"context_line":"     $ openstack subnet create vm-fip \\"},{"line_number":276,"context_line":"           --service-type \u0027network:routed\u0027 \\"},{"line_number":277,"context_line":"           --service-type \u0027network:floatingip\u0027 \\"}],"source_content_type":"text/x-rst","patch_set":29,"id":"f3e2f79c_9b7de580","line":274,"range":{"start_line":274,"start_character":20,"end_line":274,"end_character":27},"updated":"2020-12-14 15:33:39.000000000","message":"s/floating","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"55b2aa62246cad9019ff34349841278d0456946c","unresolved":false,"context_lines":[{"line_number":271,"context_line":"           --pool-prefix 85.125.24.0/24 \\"},{"line_number":272,"context_line":"           provider-subnet-pool"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"     $ # Create the floatin IP subnet"},{"line_number":275,"context_line":"     $ openstack subnet create vm-fip \\"},{"line_number":276,"context_line":"           --service-type \u0027network:routed\u0027 \\"},{"line_number":277,"context_line":"           --service-type \u0027network:floatingip\u0027 \\"}],"source_content_type":"text/x-rst","patch_set":29,"id":"f196115e_4bd5ed82","line":274,"range":{"start_line":274,"start_character":20,"end_line":274,"end_character":27},"in_reply_to":"f3e2f79c_9b7de580","updated":"2020-12-15 19:46:24.000000000","message":"Done","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6f5077a14886a680b3389dd12489ab2d6c863727","unresolved":true,"context_lines":[{"line_number":349,"context_line":""},{"line_number":350,"context_line":"     $ # Eventually, add a floating IP"},{"line_number":351,"context_line":"     $ openstack floating ip create provider-network"},{"line_number":352,"context_line":"     $ openstack server add floating ip test-server-1 85.125.24.17"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"Verification"},{"line_number":355,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":29,"id":"11481482_d36f89ee","line":352,"range":{"start_line":352,"start_character":54,"end_line":352,"end_character":66},"updated":"2020-12-11 10:19:41.000000000","message":"This is the one created in the previous line, I guess.","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"55b2aa62246cad9019ff34349841278d0456946c","unresolved":true,"context_lines":[{"line_number":349,"context_line":""},{"line_number":350,"context_line":"     $ # Eventually, add a floating IP"},{"line_number":351,"context_line":"     $ openstack floating ip create provider-network"},{"line_number":352,"context_line":"     $ openstack server add floating ip test-server-1 85.125.24.17"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"Verification"},{"line_number":355,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":29,"id":"ddce4c43_6f727530","line":352,"range":{"start_line":352,"start_character":54,"end_line":352,"end_character":66},"in_reply_to":"11481482_d36f89ee","updated":"2020-12-15 19:46:24.000000000","message":"Yes. Added the output of \"floating ip create\" to make this more explicit.","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"b813213a174c8c035b2b0c276e292811ffa7ca65","unresolved":false,"context_lines":[{"line_number":349,"context_line":""},{"line_number":350,"context_line":"     $ # Eventually, add a floating IP"},{"line_number":351,"context_line":"     $ openstack floating ip create provider-network"},{"line_number":352,"context_line":"     $ openstack server add floating ip test-server-1 85.125.24.17"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"Verification"},{"line_number":355,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":29,"id":"c4c49c3b_7e1cb291","line":352,"range":{"start_line":352,"start_character":54,"end_line":352,"end_character":66},"in_reply_to":"ddce4c43_6f727530","updated":"2020-12-17 09:12:29.000000000","message":"Done","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6f5077a14886a680b3389dd12489ab2d6c863727","unresolved":true,"context_lines":[{"line_number":355,"context_line":"------------"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"If everything goes well, the floating IPs are advertized over BGP through the"},{"line_number":358,"context_line":"provider network:"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"  .. code-block:: console"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-rst","patch_set":29,"id":"83c42c82_0c0cbab8","line":358,"range":{"start_line":358,"start_character":16,"end_line":358,"end_character":17},"updated":"2020-12-11 10:19:41.000000000","message":"So the BGP is in charge of routing the FIPs through the provider network segment CIDRs (10.1.0.0/24, 10.2.0.0/24), right?\n\nWhat are those IPs? 10.1.0.48, 10.1.0.65, 10.2.0.23 and 10.2.0.35.","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"55b2aa62246cad9019ff34349841278d0456946c","unresolved":true,"context_lines":[{"line_number":355,"context_line":"------------"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"If everything goes well, the floating IPs are advertized over BGP through the"},{"line_number":358,"context_line":"provider network:"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"  .. code-block:: console"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-rst","patch_set":29,"id":"afa9560e_72992d39","line":358,"range":{"start_line":358,"start_character":16,"end_line":358,"end_character":17},"in_reply_to":"83c42c82_0c0cbab8","updated":"2020-12-15 19:46:24.000000000","message":"Right. I\u0027ve now explained better how it works.","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"b813213a174c8c035b2b0c276e292811ffa7ca65","unresolved":false,"context_lines":[{"line_number":355,"context_line":"------------"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"If everything goes well, the floating IPs are advertized over BGP through the"},{"line_number":358,"context_line":"provider network:"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"  .. code-block:: console"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-rst","patch_set":29,"id":"f55f85df_bd2a1811","line":358,"range":{"start_line":358,"start_character":16,"end_line":358,"end_character":17},"in_reply_to":"afa9560e_72992d39","updated":"2020-12-17 09:12:29.000000000","message":"Done","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"e2d4dd8d69224399c6e9f698a3016b3fae98317f","unresolved":true,"context_lines":[{"line_number":8,"context_line":"Everything outside the switches of the rack will be routed using BGP. To"},{"line_number":9,"context_line":"perform the BGP announcement, neutron-dynamic-routing is leveraged."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"To achieve this, on each rack, servers are setup with a different management"},{"line_number":12,"context_line":"network using a vlan ID per rack (light green and orange network below)."},{"line_number":13,"context_line":"Note that a unique vlan ID per rack isn\u0027t mandatory, it\u0027s also possible to"},{"line_number":14,"context_line":"use the same vlan ID on all racks. The point here is only to isolate L2"},{"line_number":15,"context_line":"segments (typically, routing between the switch of each racks will be done"}],"source_content_type":"text/x-rst","patch_set":32,"id":"cce555d0_6c7643ed","line":12,"range":{"start_line":11,"start_character":54,"end_line":12,"end_character":32},"updated":"2020-12-17 09:03:42.000000000","message":"Did you mean the VMs under same router should be limitted to one rack? If not, the router connected (set external gateway action) to the provider-network will be created not only in rack1 but also in rack2. Then I can imagine some issues:\n1. if switches of rack2 (switch 3 and 4 in the picture) also enable the segmentations of rack1, the broadcast domain will still get larger. It is the problem current Neutron is facing.\n2. if rack2 not enable the rack1\u0027s segmentations, then the nova needs to limit the VM scheduling scope. Otherwise, the floating IP traffic can not work.\n3. different neutron-bgp-speaker on different should create different peer for each rack, but in the details below, it does not.","commit_id":"01bba25351d85acc383254a738fbdfea7483bbdd"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"d2c6cb0d10c27813e435237adf2f8969e62fd652","unresolved":true,"context_lines":[{"line_number":8,"context_line":"Everything outside the switches of the rack will be routed using BGP. To"},{"line_number":9,"context_line":"perform the BGP announcement, neutron-dynamic-routing is leveraged."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"To achieve this, on each rack, servers are setup with a different management"},{"line_number":12,"context_line":"network using a vlan ID per rack (light green and orange network below)."},{"line_number":13,"context_line":"Note that a unique vlan ID per rack isn\u0027t mandatory, it\u0027s also possible to"},{"line_number":14,"context_line":"use the same vlan ID on all racks. The point here is only to isolate L2"},{"line_number":15,"context_line":"segments (typically, routing between the switch of each racks will be done"}],"source_content_type":"text/x-rst","patch_set":32,"id":"3fca26e6_0cecc0d7","line":12,"range":{"start_line":11,"start_character":54,"end_line":12,"end_character":32},"in_reply_to":"cce555d0_6c7643ed","updated":"2020-12-17 13:58:41.000000000","message":"A note for Nova scheduling: that should work, but there\u0027s issues with it, a spec was accepted but as I know not yet finished: https://review.opendev.org/c/openstack/nova-specs/+/733703","commit_id":"01bba25351d85acc383254a738fbdfea7483bbdd"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"e2d4dd8d69224399c6e9f698a3016b3fae98317f","unresolved":true,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"To achieve this, on each rack, servers are setup with a different management"},{"line_number":12,"context_line":"network using a vlan ID per rack (light green and orange network below)."},{"line_number":13,"context_line":"Note that a unique vlan ID per rack isn\u0027t mandatory, it\u0027s also possible to"},{"line_number":14,"context_line":"use the same vlan ID on all racks. The point here is only to isolate L2"},{"line_number":15,"context_line":"segments (typically, routing between the switch of each racks will be done"},{"line_number":16,"context_line":"over BGP, without L2 connectivity)."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-rst","patch_set":32,"id":"66ca2baa_6d09efd4","line":14,"range":{"start_line":13,"start_character":10,"end_line":14,"end_character":34},"updated":"2020-12-17 09:03:42.000000000","message":"Then the broadcast domain is still getting larger? Seems it will run back to the neutron current behavior, one large network with single segmentation for all floating IPv4.","commit_id":"01bba25351d85acc383254a738fbdfea7483bbdd"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5f91ec76ed2120a9b9714f1682681b05cc92d5fd","unresolved":true,"context_lines":[{"line_number":401,"context_line":"  .. code-block:: ini"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"     # configure a route instead of a neighbor with the same ip/mask"},{"line_number":404,"context_line":"     #route.route_preferred_over_neigh \u003d FALSE"},{"line_number":405,"context_line":"     route.route_preferred_over_neigh \u003d TRUE"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"and then simply restart switchd:"}],"source_content_type":"text/x-rst","patch_set":32,"id":"d3b0e550_c53223bb","line":404,"updated":"2020-12-17 08:49:59.000000000","message":"do You want this commented line here?","commit_id":"01bba25351d85acc383254a738fbdfea7483bbdd"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"b813213a174c8c035b2b0c276e292811ffa7ca65","unresolved":true,"context_lines":[{"line_number":401,"context_line":"  .. code-block:: ini"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"     # configure a route instead of a neighbor with the same ip/mask"},{"line_number":404,"context_line":"     #route.route_preferred_over_neigh \u003d FALSE"},{"line_number":405,"context_line":"     route.route_preferred_over_neigh \u003d TRUE"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"and then simply restart switchd:"}],"source_content_type":"text/x-rst","patch_set":32,"id":"9755bcb3_7ee3e68a","line":404,"in_reply_to":"d3b0e550_c53223bb","updated":"2020-12-17 09:12:29.000000000","message":"I do, as this is the default value. That\u0027s kind of a standard to show things like that.","commit_id":"01bba25351d85acc383254a738fbdfea7483bbdd"}],"neutron/db/ipam_backend_mixin.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"2f77338431ec33f0aa455ecb7f67d440cbf1c83d","unresolved":false,"context_lines":[{"line_number":319,"context_line":"                          old_segment_id\u003dNone):"},{"line_number":320,"context_line":"        # TODO(tidwellr) Create and use a constant for the service type"},{"line_number":321,"context_line":"        segments \u003d subnet_obj.Subnet.get_subnet_segment_ids("},{"line_number":322,"context_line":"            context, network_id, filtered_service_type\u003d\u0027network:routed\u0027)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        associated_segments \u003d set(segments)"},{"line_number":325,"context_line":"        if None in associated_segments and len(associated_segments) \u003e 1:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_1d4aa726","line":322,"range":{"start_line":322,"start_character":33,"end_line":322,"end_character":54},"updated":"2019-07-25 12:27:04.000000000","message":"nit: Perhaps this is only my problem but could this param be something like out_filetered_service_type or similar, to make sure that those segments will be fetched that don\u0027t have \u0027network:routed\u0027 service_type.","commit_id":"d069054b32adbf0f20da602ae5678e41448dec26"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"f6caac740339e82672888919f278fd48b2ac019f","unresolved":false,"context_lines":[{"line_number":319,"context_line":"                          old_segment_id\u003dNone):"},{"line_number":320,"context_line":"        # TODO(tidwellr) Create and use a constant for the service type"},{"line_number":321,"context_line":"        segments \u003d subnet_obj.Subnet.get_subnet_segment_ids("},{"line_number":322,"context_line":"            context, network_id, filtered_service_type\u003d\u0027network:routed\u0027)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        associated_segments \u003d set(segments)"},{"line_number":325,"context_line":"        if None in associated_segments and len(associated_segments) \u003e 1:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_a34b3085","line":322,"range":{"start_line":322,"start_character":33,"end_line":322,"end_character":54},"in_reply_to":"7faddb67_1d4aa726","updated":"2019-07-25 14:28:48.000000000","message":"Agreed. Renaming this to something like ignored_service_type (or similar) would be a little more clear.","commit_id":"d069054b32adbf0f20da602ae5678e41448dec26"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"3a7e0e84fc38307167b4d5f631a71527b1090df8","unresolved":false,"context_lines":[{"line_number":319,"context_line":"                          old_segment_id\u003dNone):"},{"line_number":320,"context_line":"        # TODO(tidwellr) Create and use a constant for the service type"},{"line_number":321,"context_line":"        segments \u003d subnet_obj.Subnet.get_subnet_segment_ids("},{"line_number":322,"context_line":"            context, network_id, filtered_service_type\u003d\u0027network:routed\u0027)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        associated_segments \u003d set(segments)"},{"line_number":325,"context_line":"        if None in associated_segments and len(associated_segments) \u003e 1:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_f267e8b6","line":322,"range":{"start_line":322,"start_character":33,"end_line":322,"end_character":54},"in_reply_to":"7faddb67_1d4aa726","updated":"2020-07-17 09:18:41.000000000","message":"Done","commit_id":"d069054b32adbf0f20da602ae5678e41448dec26"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"3a7e0e84fc38307167b4d5f631a71527b1090df8","unresolved":false,"context_lines":[{"line_number":319,"context_line":"                          old_segment_id\u003dNone):"},{"line_number":320,"context_line":"        # TODO(tidwellr) Create and use a constant for the service type"},{"line_number":321,"context_line":"        segments \u003d subnet_obj.Subnet.get_subnet_segment_ids("},{"line_number":322,"context_line":"            context, network_id, filtered_service_type\u003d\u0027network:routed\u0027)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        associated_segments \u003d set(segments)"},{"line_number":325,"context_line":"        if None in associated_segments and len(associated_segments) \u003e 1:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_b26d709b","line":322,"range":{"start_line":322,"start_character":33,"end_line":322,"end_character":54},"in_reply_to":"7faddb67_a34b3085","updated":"2020-07-17 09:18:41.000000000","message":"Done","commit_id":"d069054b32adbf0f20da602ae5678e41448dec26"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"ce9799d9a6671c1b0c06cafb61ae566b6e5ca52c","unresolved":false,"context_lines":[{"line_number":364,"context_line":"            to_create_subnet_id \u003d None"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        segments \u003d subnet_obj.Subnet.get_subnet_segment_ids("},{"line_number":367,"context_line":"                    context, network_id, ignored_service_type\u003d\u0027network:routed\u0027"},{"line_number":368,"context_line":"                    to_create_subnet_id\u003dto_create_subnet_id)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        associated_segments \u003d set(segments)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_454b4883","line":367,"range":{"start_line":367,"start_character":77,"end_line":367,"end_character":78},"updated":"2020-07-28 15:30:01.000000000","message":"missing comma","commit_id":"cd295222350465945fe085480a38c7a8ce4062b3"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"84da71a648fec48de2b460cc572c3b17cea53258","unresolved":false,"context_lines":[{"line_number":364,"context_line":"            to_create_subnet_id \u003d None"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        segments \u003d subnet_obj.Subnet.get_subnet_segment_ids("},{"line_number":367,"context_line":"                    context, network_id, ignored_service_type\u003d\u0027network:routed\u0027"},{"line_number":368,"context_line":"                    to_create_subnet_id\u003dto_create_subnet_id)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        associated_segments \u003d set(segments)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_62659045","line":367,"range":{"start_line":367,"start_character":77,"end_line":367,"end_character":78},"in_reply_to":"9f560f44_454b4883","updated":"2020-07-29 11:19:53.000000000","message":"Done","commit_id":"cd295222350465945fe085480a38c7a8ce4062b3"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6406fe036018ca91a1b936c2d8795cec2a925080","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        segments \u003d subnet_obj.Subnet.get_subnet_segment_ids("},{"line_number":367,"context_line":"                    context, network_id, ignored_service_type\u003d\u0027network:routed\u0027"},{"line_number":368,"context_line":"                    to_create_subnet_id\u003dto_create_subnet_id)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        associated_segments \u003d set(segments)"},{"line_number":371,"context_line":"        if None in associated_segments and len(associated_segments) \u003e 1:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_816d559a","line":368,"updated":"2020-07-28 14:22:04.000000000","message":"pep8: E999 SyntaxError: invalid syntax","commit_id":"cd295222350465945fe085480a38c7a8ce4062b3"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"84da71a648fec48de2b460cc572c3b17cea53258","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        segments \u003d subnet_obj.Subnet.get_subnet_segment_ids("},{"line_number":367,"context_line":"                    context, network_id, ignored_service_type\u003d\u0027network:routed\u0027"},{"line_number":368,"context_line":"                    to_create_subnet_id\u003dto_create_subnet_id)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        associated_segments \u003d set(segments)"},{"line_number":371,"context_line":"        if None in associated_segments and len(associated_segments) \u003e 1:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_c25c5c80","line":368,"in_reply_to":"9f560f44_816d559a","updated":"2020-07-29 11:19:53.000000000","message":"Done","commit_id":"cd295222350465945fe085480a38c7a8ce4062b3"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3a37ed0f4327eb440ce7c131eba229a824815e20","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015 OpenStack Foundation."},{"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":13,"id":"9f560f44_3bd563ba","line":1,"updated":"2020-07-30 19:26:56.000000000","message":"pep8: E902 IndentationError: unindent does not match any outer indentation level","commit_id":"746a7e51973d6e451393c3e270475aa46e3a1e1c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3a37ed0f4327eb440ce7c131eba229a824815e20","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        # (zigo) If we\u0027re creating a network:routed subnet, then the created"},{"line_number":359,"context_line":"        # subnet should be removed from the segment list, otherwise its segment"},{"line_number":360,"context_line":"        # ID will be returned as None."},{"line_number":361,"context_line":"        if action\u003d\u0027create\u0027 and requested_service_types"},{"line_number":362,"context_line":"                and \u0027network:routed\u0027 in requested_service_types:"},{"line_number":363,"context_line":"            to_create_subnet_id \u003d subnet_id"},{"line_number":364,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f560f44_9bdbcfeb","line":361,"updated":"2020-07-30 19:26:56.000000000","message":"pep8: E225 missing whitespace around operator","commit_id":"746a7e51973d6e451393c3e270475aa46e3a1e1c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3a37ed0f4327eb440ce7c131eba229a824815e20","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        # subnet should be removed from the segment list, otherwise its segment"},{"line_number":360,"context_line":"        # ID will be returned as None."},{"line_number":361,"context_line":"        if action\u003d\u0027create\u0027 and requested_service_types"},{"line_number":362,"context_line":"                and \u0027network:routed\u0027 in requested_service_types:"},{"line_number":363,"context_line":"            to_create_subnet_id \u003d subnet_id"},{"line_number":364,"context_line":"        else:"},{"line_number":365,"context_line":"            to_create_subnet_id \u003d None"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f560f44_7bd6bbc5","line":362,"updated":"2020-07-30 19:26:56.000000000","message":"pep8: E113 unexpected indentation","commit_id":"746a7e51973d6e451393c3e270475aa46e3a1e1c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0ba23bbf05ee7ff1bba2c0f96f5a978eafc2cdc8","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        # (zigo) If we\u0027re creating a network:routed subnet, then the created"},{"line_number":359,"context_line":"        # subnet should be removed from the segment list, otherwise its segment"},{"line_number":360,"context_line":"        # ID will be returned as None."},{"line_number":361,"context_line":"        if (action\u003d\u003d\u0027create\u0027 and requested_service_types"},{"line_number":362,"context_line":"                and (\u0027network:routed\u0027 in requested_service_types)):"},{"line_number":363,"context_line":"            to_create_subnet_id \u003d subnet_id"},{"line_number":364,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":14,"id":"9f560f44_736a52b3","line":361,"updated":"2020-07-31 12:23:57.000000000","message":"pep8: E225 missing whitespace around operator","commit_id":"1e228ff8f20c148d3f648fbdd28accf387b1a5e8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0ba23bbf05ee7ff1bba2c0f96f5a978eafc2cdc8","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        # subnet should be removed from the segment list, otherwise its segment"},{"line_number":360,"context_line":"        # ID will be returned as None."},{"line_number":361,"context_line":"        if (action\u003d\u003d\u0027create\u0027 and requested_service_types"},{"line_number":362,"context_line":"                and (\u0027network:routed\u0027 in requested_service_types)):"},{"line_number":363,"context_line":"            to_create_subnet_id \u003d subnet_id"},{"line_number":364,"context_line":"        else:"},{"line_number":365,"context_line":"            to_create_subnet_id \u003d None"}],"source_content_type":"text/x-python","patch_set":14,"id":"9f560f44_53658ee0","line":362,"updated":"2020-07-31 12:23:57.000000000","message":"pep8: W503 line break before binary operator","commit_id":"1e228ff8f20c148d3f648fbdd28accf387b1a5e8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f5c2765b72e8accbfc118ae8c36951c78f6a4981","unresolved":false,"context_lines":[{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        # (zigo) If we\u0027re creating a network:routed subnet, then the created"},{"line_number":361,"context_line":"        # subnet should be removed from the segment list, otherwise its segment"},{"line_number":362,"context_line":"        # ID will be returned as None."},{"line_number":363,"context_line":"        if (action \u003d\u003d \u0027create\u0027 and requested_service_types and"},{"line_number":364,"context_line":"                (\u0027network:routed\u0027 in requested_service_types)):"},{"line_number":365,"context_line":"            to_create_subnet_id \u003d subnet_id"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_e3cefd59","line":362,"updated":"2020-08-11 21:27:33.000000000","message":"neutron-lib 2.5.0 is already released and if You rebase this patch on top of https://review.opendev.org/#/c/745310/2 then this todo will not be needed anymore","commit_id":"ef70ba6a2800fdf70e1591c0b9c22cb4f85d1c66"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"4329d88028b4507b8275cc34f03d7619877abd67","unresolved":false,"context_lines":[{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        # (zigo) If we\u0027re creating a network:routed subnet, then the created"},{"line_number":361,"context_line":"        # subnet should be removed from the segment list, otherwise its segment"},{"line_number":362,"context_line":"        # ID will be returned as None."},{"line_number":363,"context_line":"        if (action \u003d\u003d \u0027create\u0027 and requested_service_types and"},{"line_number":364,"context_line":"                (\u0027network:routed\u0027 in requested_service_types)):"},{"line_number":365,"context_line":"            to_create_subnet_id \u003d subnet_id"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_44134167","line":362,"in_reply_to":"9f560f44_e3cefd59","updated":"2020-08-15 12:41:54.000000000","message":"Done","commit_id":"ef70ba6a2800fdf70e1591c0b9c22cb4f85d1c66"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"e8a5aa6e89d57ac46a9aacd065f08af8ade0f1dc","unresolved":false,"context_lines":[{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        # (zigo) If we\u0027re creating a network:routed subnet, then the created"},{"line_number":361,"context_line":"        # subnet should be removed from the segment list, otherwise its segment"},{"line_number":362,"context_line":"        # ID will be returned as None."},{"line_number":363,"context_line":"        if (action \u003d\u003d \u0027create\u0027 and requested_service_types and"},{"line_number":364,"context_line":"                (\u0027network:routed\u0027 in requested_service_types)):"},{"line_number":365,"context_line":"            to_create_subnet_id \u003d subnet_id"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_6f9e47b9","line":362,"in_reply_to":"9f560f44_e3cefd59","updated":"2020-08-12 13:37:22.000000000","message":"It was not when I wrote this patch.\n\nAlso, please allow me to fix this in a next patch, so I can more easily backport this one (to Ussuri, in the Debian packages) without having to import a new neutron-lib patch.","commit_id":"ef70ba6a2800fdf70e1591c0b9c22cb4f85d1c66"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"06af3776acd5722a089e28ea21d571d9bdd56a59","unresolved":false,"context_lines":[{"line_number":352,"context_line":"    def _validate_segment(self, context, network_id, segment_id, action\u003dNone,"},{"line_number":353,"context_line":"                          old_segment_id\u003dNone, requested_service_types\u003dNone,"},{"line_number":354,"context_line":"                          subnet_id\u003dNone):"},{"line_number":355,"context_line":"        # (zigo) If we\u0027re creating a network:routed subnet (here written as:"},{"line_number":356,"context_line":"        # const.DEVICE_OWNER_ROUTED), then the created subnet must be removed"},{"line_number":357,"context_line":"        # from the segment list, otherwise its segment ID will be returned as"},{"line_number":358,"context_line":"        # None, and SubnetsNotAllAssociatedWithSegments will be raised."}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_6c35d144","line":355,"updated":"2020-08-27 11:20:43.000000000","message":"This should be:\n\n# NOTE(zigo): ...","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"9c8a64037d60c830e1b760b0e9a07f84d8d477cf","unresolved":false,"context_lines":[{"line_number":352,"context_line":"    def _validate_segment(self, context, network_id, segment_id, action\u003dNone,"},{"line_number":353,"context_line":"                          old_segment_id\u003dNone, requested_service_types\u003dNone,"},{"line_number":354,"context_line":"                          subnet_id\u003dNone):"},{"line_number":355,"context_line":"        # (zigo) If we\u0027re creating a network:routed subnet (here written as:"},{"line_number":356,"context_line":"        # const.DEVICE_OWNER_ROUTED), then the created subnet must be removed"},{"line_number":357,"context_line":"        # from the segment list, otherwise its segment ID will be returned as"},{"line_number":358,"context_line":"        # None, and SubnetsNotAllAssociatedWithSegments will be raised."}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_ac5b6951","line":355,"in_reply_to":"9f560f44_6c35d144","updated":"2020-08-27 11:46:07.000000000","message":"Done","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6f5077a14886a680b3389dd12489ab2d6c863727","unresolved":true,"context_lines":[{"line_number":358,"context_line":"        # returned as None, and SubnetsNotAllAssociatedWithSegments will be"},{"line_number":359,"context_line":"        # raised."},{"line_number":360,"context_line":"        if (action \u003d\u003d \u0027create\u0027 and requested_service_types and"},{"line_number":361,"context_line":"                (const.DEVICE_OWNER_ROUTED in requested_service_types)):"},{"line_number":362,"context_line":"            to_create_subnet_id \u003d subnet_id"},{"line_number":363,"context_line":"        else:"},{"line_number":364,"context_line":"            to_create_subnet_id \u003d None"}],"source_content_type":"text/x-python","patch_set":29,"id":"437a77ea_0c351ccd","line":361,"range":{"start_line":361,"start_character":16,"end_line":361,"end_character":17},"updated":"2020-12-11 10:19:41.000000000","message":"unneeded parentheses","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"55b2aa62246cad9019ff34349841278d0456946c","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        # returned as None, and SubnetsNotAllAssociatedWithSegments will be"},{"line_number":359,"context_line":"        # raised."},{"line_number":360,"context_line":"        if (action \u003d\u003d \u0027create\u0027 and requested_service_types and"},{"line_number":361,"context_line":"                (const.DEVICE_OWNER_ROUTED in requested_service_types)):"},{"line_number":362,"context_line":"            to_create_subnet_id \u003d subnet_id"},{"line_number":363,"context_line":"        else:"},{"line_number":364,"context_line":"            to_create_subnet_id \u003d None"}],"source_content_type":"text/x-python","patch_set":29,"id":"bd5aca2e_e93b8f31","line":361,"range":{"start_line":361,"start_character":16,"end_line":361,"end_character":17},"in_reply_to":"437a77ea_0c351ccd","updated":"2020-12-15 19:46:24.000000000","message":"Done","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"2497ea63a664390bc7ca0d6d5bbee86820b8f32b","unresolved":true,"context_lines":[{"line_number":359,"context_line":"        # raised."},{"line_number":360,"context_line":"        if (action \u003d\u003d \u0027create\u0027 and requested_service_types and"},{"line_number":361,"context_line":"                (const.DEVICE_OWNER_ROUTED in requested_service_types)):"},{"line_number":362,"context_line":"            to_create_subnet_id \u003d subnet_id"},{"line_number":363,"context_line":"        else:"},{"line_number":364,"context_line":"            to_create_subnet_id \u003d None"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        segments \u003d subnet_obj.Subnet.get_subnet_segment_ids("},{"line_number":367,"context_line":"                    context, network_id,"}],"source_content_type":"text/x-python","patch_set":29,"id":"fda455ca_15e38793","line":364,"range":{"start_line":362,"start_character":0,"end_line":364,"end_character":38},"updated":"2020-12-11 10:55:27.000000000","message":"Isn\u0027t ignored_service_type enough to tell to not fetch subnet with network:routed?\n\nI read again the comments in get_subnet_segment_ids so I understand now, just keep for others if step to the same hole","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"55b2aa62246cad9019ff34349841278d0456946c","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        # raised."},{"line_number":360,"context_line":"        if (action \u003d\u003d \u0027create\u0027 and requested_service_types and"},{"line_number":361,"context_line":"                (const.DEVICE_OWNER_ROUTED in requested_service_types)):"},{"line_number":362,"context_line":"            to_create_subnet_id \u003d subnet_id"},{"line_number":363,"context_line":"        else:"},{"line_number":364,"context_line":"            to_create_subnet_id \u003d None"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        segments \u003d subnet_obj.Subnet.get_subnet_segment_ids("},{"line_number":367,"context_line":"                    context, network_id,"}],"source_content_type":"text/x-python","patch_set":29,"id":"77bda6a5_27785e56","line":364,"range":{"start_line":362,"start_character":0,"end_line":364,"end_character":38},"in_reply_to":"fda455ca_15e38793","updated":"2020-12-15 19:46:24.000000000","message":"Done","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6f5077a14886a680b3389dd12489ab2d6c863727","unresolved":true,"context_lines":[{"line_number":584,"context_line":""},{"line_number":585,"context_line":"        subnet_id \u003d subnet_args.get(\u0027id\u0027)"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"        segment_id \u003d subnet_args.get(\u0027segment_id\u0027)"},{"line_number":588,"context_line":"        if segment_id:"},{"line_number":589,"context_line":"            # TODO(slaweq): integrate check if segment exists in"},{"line_number":590,"context_line":"            # self._validate_segment() method"}],"source_content_type":"text/x-python","patch_set":29,"id":"d4549a7d_7ed353f2","line":587,"updated":"2020-12-11 10:19:41.000000000","message":"Maybe I don\u0027t understand this correctly. The goal of this patch is to be able to deploy a subnet with service type \"network:routed\" in a router network. For this, we need this subnet not to be associated to any segment.\n\nWhy don\u0027t we remove the segement ID from the subnet here?","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"55b2aa62246cad9019ff34349841278d0456946c","unresolved":false,"context_lines":[{"line_number":584,"context_line":""},{"line_number":585,"context_line":"        subnet_id \u003d subnet_args.get(\u0027id\u0027)"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"        segment_id \u003d subnet_args.get(\u0027segment_id\u0027)"},{"line_number":588,"context_line":"        if segment_id:"},{"line_number":589,"context_line":"            # TODO(slaweq): integrate check if segment exists in"},{"line_number":590,"context_line":"            # self._validate_segment() method"}],"source_content_type":"text/x-python","patch_set":29,"id":"8e10a357_2f9de736","line":587,"in_reply_to":"cec45236_d7a9a322","updated":"2020-12-15 19:46:24.000000000","message":"Ack","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"37a5c66856981f18cc70c80985a15c831adfc4b8","unresolved":true,"context_lines":[{"line_number":584,"context_line":""},{"line_number":585,"context_line":"        subnet_id \u003d subnet_args.get(\u0027id\u0027)"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"        segment_id \u003d subnet_args.get(\u0027segment_id\u0027)"},{"line_number":588,"context_line":"        if segment_id:"},{"line_number":589,"context_line":"            # TODO(slaweq): integrate check if segment exists in"},{"line_number":590,"context_line":"            # self._validate_segment() method"}],"source_content_type":"text/x-python","patch_set":29,"id":"cec45236_d7a9a322","line":587,"in_reply_to":"d4549a7d_7ed353f2","updated":"2020-12-11 10:56:36.000000000","message":"Talked to Thomas in IRC. \"_validate_segment\" is not only validating this segment for this subnet but the whole network. That\u0027s why we need to implement \"get_subnet_segment_ids\" and in case the subnet is being created, remove it from the search.","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4c2a193fd668a3e25c9bda11f15d7c22d65cccfd","unresolved":true,"context_lines":[{"line_number":601,"context_line":"        self._validate_segment(context, network[\u0027id\u0027], segment_id,"},{"line_number":602,"context_line":"                               action\u003d\u0027create\u0027,"},{"line_number":603,"context_line":"                               requested_service_types\u003dservice_types,"},{"line_number":604,"context_line":"                               subnet_id\u003dsubnet_id)"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        # NOTE(changzhi) Store DNS nameservers with order into DB one"},{"line_number":607,"context_line":"        # by one when create subnet with DNS nameservers"}],"source_content_type":"text/x-python","patch_set":29,"id":"7f2a5c94_e3348231","line":604,"range":{"start_line":604,"start_character":41,"end_line":604,"end_character":50},"updated":"2020-12-14 15:33:39.000000000","message":"can\u0027t this just be subnet.id as on L613?  then no need for L585","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"55b2aa62246cad9019ff34349841278d0456946c","unresolved":true,"context_lines":[{"line_number":601,"context_line":"        self._validate_segment(context, network[\u0027id\u0027], segment_id,"},{"line_number":602,"context_line":"                               action\u003d\u0027create\u0027,"},{"line_number":603,"context_line":"                               requested_service_types\u003dservice_types,"},{"line_number":604,"context_line":"                               subnet_id\u003dsubnet_id)"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        # NOTE(changzhi) Store DNS nameservers with order into DB one"},{"line_number":607,"context_line":"        # by one when create subnet with DNS nameservers"}],"source_content_type":"text/x-python","patch_set":29,"id":"e0b78c46_1968fe61","line":604,"range":{"start_line":604,"start_character":41,"end_line":604,"end_character":50},"in_reply_to":"7f2a5c94_e3348231","updated":"2020-12-15 19:46:24.000000000","message":"I don\u0027t think so, as it could be None.","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"}],"neutron/objects/subnet.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"01fac393db991eba7698bb890f9b252cb2b05208","unresolved":false,"context_lines":[{"line_number":422,"context_line":"            filter_subquery \u003d context.session.query("},{"line_number":423,"context_line":"                service_type_model.subnet_id)"},{"line_number":424,"context_line":"            filter_subquery \u003d filter_subquery.filter("},{"line_number":425,"context_line":"                cls.db_model.network_id \u003d\u003d network_id)"},{"line_number":426,"context_line":"            filter_subquery \u003d filter_subquery.filter("},{"line_number":427,"context_line":"                service_type_model.subnet_id \u003d\u003d cls.db_model.id)"},{"line_number":428,"context_line":"            filter_subquery \u003d filter_subquery.filter("}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_5b5cfe7b","line":425,"range":{"start_line":425,"start_character":16,"end_line":425,"end_character":54},"updated":"2020-07-16 16:04:28.000000000","message":"this filter is not needed because of the next one in L427","commit_id":"d069054b32adbf0f20da602ae5678e41448dec26"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"01fac393db991eba7698bb890f9b252cb2b05208","unresolved":false,"context_lines":[{"line_number":427,"context_line":"                service_type_model.subnet_id \u003d\u003d cls.db_model.id)"},{"line_number":428,"context_line":"            filter_subquery \u003d filter_subquery.filter("},{"line_number":429,"context_line":"                service_type_model.service_type \u003d\u003d filtered_service_type)"},{"line_number":430,"context_line":"            query \u003d query.filter(cls.db_model.id.notin_(filter_subquery))"},{"line_number":431,"context_line":"        return [segment_id for (segment_id,) in query.all()]"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_9b685621","line":430,"updated":"2020-07-16 16:04:28.000000000","message":"IMO, the query done in [1] is faster (and more elegant, if that means something)\n\n[1]https://review.opendev.org/#/c/741429/2/neutron/objects/subnet.py","commit_id":"d069054b32adbf0f20da602ae5678e41448dec26"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"01fac393db991eba7698bb890f9b252cb2b05208","unresolved":false,"context_lines":[{"line_number":428,"context_line":"            filter_subquery \u003d filter_subquery.filter("},{"line_number":429,"context_line":"                service_type_model.service_type \u003d\u003d filtered_service_type)"},{"line_number":430,"context_line":"            query \u003d query.filter(cls.db_model.id.notin_(filter_subquery))"},{"line_number":431,"context_line":"        return [segment_id for (segment_id,) in query.all()]"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_db6e4e2a","line":431,"updated":"2020-07-16 16:04:28.000000000","message":"as commented in [1], you should filter the None values","commit_id":"d069054b32adbf0f20da602ae5678e41448dec26"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"22dad2647e11727ec0f76754b8e95fb1c0277f19","unresolved":false,"context_lines":[{"line_number":495,"context_line":"        query \u003d context.session.query(cls.db_model.segment_id)"},{"line_number":496,"context_line":"        query \u003d query.filter(cls.db_model.network_id \u003d\u003d network_id)"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        # (zigo): Subnet who hold the type network:routed should be removed"},{"line_number":499,"context_line":"        # from the segment list, as they can be part of a segmented network"},{"line_number":500,"context_line":"        # but they don\u0027t have a segment ID themselves."},{"line_number":501,"context_line":"        if ignored_service_type:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_dada6fe7","line":498,"updated":"2020-07-30 08:42:22.000000000","message":"I had the impression, according to the spec [1], that a subnet with \"service_type\"\u003d\"network:routed\" had no segment associated. This is not what I see in L503 filter. Am I wrong?\n\n\n[1]https://review.opendev.org/#/c/486450/16/specs/train/routed-networks-floating-ips.rst@54","commit_id":"fb7719d2746ddbb1c73258c0fc8140a80ec50254"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"4b9fe30c076bf58fcef69cb5ca2848842c70f01d","unresolved":false,"context_lines":[{"line_number":495,"context_line":"        query \u003d context.session.query(cls.db_model.segment_id)"},{"line_number":496,"context_line":"        query \u003d query.filter(cls.db_model.network_id \u003d\u003d network_id)"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        # (zigo): Subnet who hold the type network:routed should be removed"},{"line_number":499,"context_line":"        # from the segment list, as they can be part of a segmented network"},{"line_number":500,"context_line":"        # but they don\u0027t have a segment ID themselves."},{"line_number":501,"context_line":"        if ignored_service_type:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_4bbcd3db","line":498,"in_reply_to":"9f560f44_dada6fe7","updated":"2020-07-30 11:52:02.000000000","message":"That is correct. My comment must be a little bit missleading. What\u0027s going on is that on a same network, one should provision subnet with segments for the L2 connectivity, and on top of that, a subnet of the type network:routed which has no segment. The challenge is that in this piece of code that we\u0027re commenting, the subnet_service_types object isn\u0027t filled with any value at the time of subnet creation. This is why I\u0027m fighting like hell for the query to still be accepted, and why it the subnet in creation should be filtered if it has the type network:routed. I\u0027m not sure if what I\u0027m writing is clear enough, if not, please let me know.","commit_id":"fb7719d2746ddbb1c73258c0fc8140a80ec50254"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"22dad2647e11727ec0f76754b8e95fb1c0277f19","unresolved":false,"context_lines":[{"line_number":510,"context_line":"        # above. So we just filter out the subnet to create completely"},{"line_number":511,"context_line":"        # from the result set."},{"line_number":512,"context_line":"        if to_create_subnet_id:"},{"line_number":513,"context_line":"            query \u003d query.filter(cls.db_model.id !\u003d to_create_subnet_id)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        return [segment_id for (segment_id,) in query.all()]"},{"line_number":516,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_faf8134a","line":513,"updated":"2020-07-30 08:42:22.000000000","message":"But this filtering should be done when the subnet is being created AND it\u0027s going to have this specific service_type","commit_id":"fb7719d2746ddbb1c73258c0fc8140a80ec50254"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"4b9fe30c076bf58fcef69cb5ca2848842c70f01d","unresolved":false,"context_lines":[{"line_number":510,"context_line":"        # above. So we just filter out the subnet to create completely"},{"line_number":511,"context_line":"        # from the result set."},{"line_number":512,"context_line":"        if to_create_subnet_id:"},{"line_number":513,"context_line":"            query \u003d query.filter(cls.db_model.id !\u003d to_create_subnet_id)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        return [segment_id for (segment_id,) in query.all()]"},{"line_number":516,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_cb946347","line":513,"in_reply_to":"9f560f44_faf8134a","updated":"2020-07-30 11:52:02.000000000","message":"Right, which is what I\u0027m attempting to do in the calling function. I\u0027m trying to get _validate_sgement() to not fill to_create_segment_id if it\u0027s creating a new subnet with type network:routed. However, in my tests, I haven\u0027t seen any action\u003d\u0027create\u0027, so something must be wrong somewhere...","commit_id":"fb7719d2746ddbb1c73258c0fc8140a80ec50254"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"06af3776acd5722a089e28ea21d571d9bdd56a59","unresolved":false,"context_lines":[{"line_number":495,"context_line":"        query \u003d context.session.query(cls.db_model.segment_id)"},{"line_number":496,"context_line":"        query \u003d query.filter(cls.db_model.network_id \u003d\u003d network_id)"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        # (zigo): Subnet who hold the type network:routed should be removed"},{"line_number":499,"context_line":"        # from the segment list, as they can be part of a segmented network"},{"line_number":500,"context_line":"        # but they don\u0027t have a segment ID themselves."},{"line_number":501,"context_line":"        if ignored_service_type:"}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_ac51a964","line":498,"range":{"start_line":498,"start_character":9,"end_line":498,"end_character":16},"updated":"2020-08-27 11:20:43.000000000","message":"# NOTE(zigo): ...","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"06af3776acd5722a089e28ea21d571d9bdd56a59","unresolved":false,"context_lines":[{"line_number":495,"context_line":"        query \u003d context.session.query(cls.db_model.segment_id)"},{"line_number":496,"context_line":"        query \u003d query.filter(cls.db_model.network_id \u003d\u003d network_id)"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        # (zigo): Subnet who hold the type network:routed should be removed"},{"line_number":499,"context_line":"        # from the segment list, as they can be part of a segmented network"},{"line_number":500,"context_line":"        # but they don\u0027t have a segment ID themselves."},{"line_number":501,"context_line":"        if ignored_service_type:"}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_4cc8cd20","line":498,"range":{"start_line":498,"start_character":43,"end_line":498,"end_character":57},"updated":"2020-08-27 11:20:43.000000000","message":"This something specific to the feature you are implementing, but this method should be generic. The service type could be any.","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"9c8a64037d60c830e1b760b0e9a07f84d8d477cf","unresolved":false,"context_lines":[{"line_number":495,"context_line":"        query \u003d context.session.query(cls.db_model.segment_id)"},{"line_number":496,"context_line":"        query \u003d query.filter(cls.db_model.network_id \u003d\u003d network_id)"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        # (zigo): Subnet who hold the type network:routed should be removed"},{"line_number":499,"context_line":"        # from the segment list, as they can be part of a segmented network"},{"line_number":500,"context_line":"        # but they don\u0027t have a segment ID themselves."},{"line_number":501,"context_line":"        if ignored_service_type:"}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_4c1bad7f","line":498,"range":{"start_line":498,"start_character":43,"end_line":498,"end_character":57},"in_reply_to":"9f560f44_4cc8cd20","updated":"2020-08-27 11:46:07.000000000","message":"Replaced network:routed by ignored_service_type","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        # (zigo): Subnet who hold the type network:routed should be removed"},{"line_number":499,"context_line":"        # from the segment list, as they can be part of a segmented network"},{"line_number":500,"context_line":"        # but they don\u0027t have a segment ID themselves."},{"line_number":501,"context_line":"        if ignored_service_type:"},{"line_number":502,"context_line":"            service_type_model \u003d SubnetServiceType.db_model"},{"line_number":503,"context_line":"            query \u003d query.filter(~exists().where(and_("}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_4a057145","line":500,"updated":"2020-08-28 18:28:00.000000000","message":"nit: the above comment refers to \u0027network:routed\u0027 but below is filtering based on a variable, not it specifically.","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"06af3776acd5722a089e28ea21d571d9bdd56a59","unresolved":false,"context_lines":[{"line_number":502,"context_line":"            service_type_model \u003d SubnetServiceType.db_model"},{"line_number":503,"context_line":"            query \u003d query.filter(~exists().where(and_("},{"line_number":504,"context_line":"                     cls.db_model.id \u003d\u003d service_type_model.subnet_id,"},{"line_number":505,"context_line":"                     service_type_model.service_type \u003d\u003d ignored_service_type)))"},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"        # (zigo): When a subnet is created, at this point in the code,"},{"line_number":508,"context_line":"        # its service_types aren\u0027t populated in the subnet_service_types"}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_2ccbd91d","line":505,"updated":"2020-08-27 11:20:43.000000000","message":"+1, nice filter","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"06af3776acd5722a089e28ea21d571d9bdd56a59","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        if to_create_subnet_id:"},{"line_number":513,"context_line":"            query \u003d query.filter(cls.db_model.id !\u003d to_create_subnet_id)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        return [segment_id for (segment_id,) in query.all()]"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"@base.NeutronObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_2cf4795a","line":515,"updated":"2020-08-27 11:20:43.000000000","message":"As commented before: you need to add DB unit tests to check this method:\n- With/without ignore service_type\n- With/without to_create_subnet_id","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"9c8a64037d60c830e1b760b0e9a07f84d8d477cf","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        if to_create_subnet_id:"},{"line_number":513,"context_line":"            query \u003d query.filter(cls.db_model.id !\u003d to_create_subnet_id)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        return [segment_id for (segment_id,) in query.all()]"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"@base.NeutronObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_57005601","line":515,"in_reply_to":"9f560f44_2cf4795a","updated":"2020-08-27 11:46:07.000000000","message":"I\u0027m not sure what unit test that means, I thought it was already covered by the unit tests adding segmented subnets. Please be more specific.","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6bbd7ed29dc94242e04e4f73554f478dbb41913e","unresolved":true,"context_lines":[{"line_number":491,"context_line":"    @classmethod"},{"line_number":492,"context_line":"    def get_subnet_segment_ids(cls, context, network_id,"},{"line_number":493,"context_line":"                               ignored_service_type\u003dNone,"},{"line_number":494,"context_line":"                               to_create_subnet_id\u003dNone):"},{"line_number":495,"context_line":"        query \u003d context.session.query(cls.db_model.segment_id)"},{"line_number":496,"context_line":"        query \u003d query.filter(cls.db_model.network_id \u003d\u003d network_id)"},{"line_number":497,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"518baaab_720545dc","line":494,"range":{"start_line":494,"start_character":31,"end_line":494,"end_character":50},"updated":"2020-12-11 08:27:44.000000000","message":"why not simply \"subnet_id\"?","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"b813213a174c8c035b2b0c276e292811ffa7ca65","unresolved":false,"context_lines":[{"line_number":491,"context_line":"    @classmethod"},{"line_number":492,"context_line":"    def get_subnet_segment_ids(cls, context, network_id,"},{"line_number":493,"context_line":"                               ignored_service_type\u003dNone,"},{"line_number":494,"context_line":"                               to_create_subnet_id\u003dNone):"},{"line_number":495,"context_line":"        query \u003d context.session.query(cls.db_model.segment_id)"},{"line_number":496,"context_line":"        query \u003d query.filter(cls.db_model.network_id \u003d\u003d network_id)"},{"line_number":497,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"4fbb1c7a_ba7e563f","line":494,"range":{"start_line":494,"start_character":31,"end_line":494,"end_character":50},"in_reply_to":"1e7b994d_b41e27cb","updated":"2020-12-17 09:12:29.000000000","message":"Done","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5f91ec76ed2120a9b9714f1682681b05cc92d5fd","unresolved":true,"context_lines":[{"line_number":491,"context_line":"    @classmethod"},{"line_number":492,"context_line":"    def get_subnet_segment_ids(cls, context, network_id,"},{"line_number":493,"context_line":"                               ignored_service_type\u003dNone,"},{"line_number":494,"context_line":"                               to_create_subnet_id\u003dNone):"},{"line_number":495,"context_line":"        query \u003d context.session.query(cls.db_model.segment_id)"},{"line_number":496,"context_line":"        query \u003d query.filter(cls.db_model.network_id \u003d\u003d network_id)"},{"line_number":497,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"1e7b994d_b41e27cb","line":494,"range":{"start_line":494,"start_character":31,"end_line":494,"end_character":50},"in_reply_to":"237696a3_251b7026","updated":"2020-12-17 08:49:59.000000000","message":"are You going to change that?","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6f5077a14886a680b3389dd12489ab2d6c863727","unresolved":true,"context_lines":[{"line_number":491,"context_line":"    @classmethod"},{"line_number":492,"context_line":"    def get_subnet_segment_ids(cls, context, network_id,"},{"line_number":493,"context_line":"                               ignored_service_type\u003dNone,"},{"line_number":494,"context_line":"                               to_create_subnet_id\u003dNone):"},{"line_number":495,"context_line":"        query \u003d context.session.query(cls.db_model.segment_id)"},{"line_number":496,"context_line":"        query \u003d query.filter(cls.db_model.network_id \u003d\u003d network_id)"},{"line_number":497,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"237696a3_251b7026","line":494,"range":{"start_line":494,"start_character":31,"end_line":494,"end_character":50},"in_reply_to":"518baaab_720545dc","updated":"2020-12-11 10:19:41.000000000","message":"+1","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"}],"neutron/tests/unit/extensions/test_segment.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3a37ed0f4327eb440ce7c131eba229a824815e20","unresolved":false,"context_lines":[{"line_number":506,"context_line":"            with self.subnet(network\u003dnetwork):"},{"line_number":507,"context_line":"                net \u003d network[\u0027network\u0027]"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        segment \u003d self._test_create_segment(network_id\u003dnet[\u0027id\u0027],"},{"line_number":510,"context_line":"                                            segmentation_id\u003d200)"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"        res \u003d self._create_subnet(self.fmt,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f560f44_5bd2d7d3","line":509,"updated":"2020-07-30 19:26:56.000000000","message":"pep8: F841 local variable \u0027segment\u0027 is assigned to but never used","commit_id":"746a7e51973d6e451393c3e270475aa46e3a1e1c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0ba23bbf05ee7ff1bba2c0f96f5a978eafc2cdc8","unresolved":false,"context_lines":[{"line_number":506,"context_line":"            with self.subnet(network\u003dnetwork):"},{"line_number":507,"context_line":"                net \u003d network[\u0027network\u0027]"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        segment \u003d self._test_create_segment(network_id\u003dnet[\u0027id\u0027],"},{"line_number":510,"context_line":"                                            segmentation_id\u003d200)"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"        res \u003d self._create_subnet(self.fmt,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9f560f44_1374b698","line":509,"updated":"2020-07-31 12:23:57.000000000","message":"pep8: F841 local variable \u0027segment\u0027 is assigned to but never used","commit_id":"1e228ff8f20c148d3f648fbdd28accf387b1a5e8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"8ae2974c7ebd3c5055aff2a19da18b2fe3952bd4","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    __native_sorting_support \u003d True"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    supported_extension_aliases \u003d [seg_apidef.ALIAS, portbindings.ALIAS,"},{"line_number":133,"context_line":"                                   ipalloc_apidef.ALIAS]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def get_plugin_description(self):"},{"line_number":136,"context_line":"        return \"Network Segments\""}],"source_content_type":"text/x-python","patch_set":15,"id":"9f560f44_86486f5c","line":133,"updated":"2020-08-03 10:30:25.000000000","message":"in real world \"subnet-service-types\" extension is supported directly by ML2 Plugin (see https://opendev.org/openstack/neutron/src/branch/master/neutron/plugins/ml2/plugin.py#L202) but as in those UT this \"fake\" plugin is used, You need to add this API extension to the list of supported extensions here. Than it should works fine for You (I tested it manually on my local env)","commit_id":"da40111ff6a7d70627fd8384b21d7d4908eabde4"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f5c2765b72e8accbfc118ae8c36951c78f6a4981","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        # (zigo) Instead of \u0027network:routed\u0027 we can use"},{"line_number":517,"context_line":"        # const.DEVICE_OWNER_ROUTED whenever neutron-lib is released with"},{"line_number":518,"context_line":"        # Ibde33bdacba6bd1e9c41cc69d0054bf55e1e6454 included, and neutron"},{"line_number":519,"context_line":"        # version depends on it."},{"line_number":520,"context_line":"        res \u003d self._create_subnet(self.fmt,"},{"line_number":521,"context_line":"                                 net_id\u003dnet[\u0027id\u0027],"},{"line_number":522,"context_line":"                                 tenant_id\u003dnet[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_e3f71d8c","line":519,"updated":"2020-08-11 21:27:33.000000000","message":"same comment as in other file - neutron-lib 2.5.0 is already released","commit_id":"ef70ba6a2800fdf70e1591c0b9c22cb4f85d1c66"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"4329d88028b4507b8275cc34f03d7619877abd67","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        # (zigo) Instead of \u0027network:routed\u0027 we can use"},{"line_number":517,"context_line":"        # const.DEVICE_OWNER_ROUTED whenever neutron-lib is released with"},{"line_number":518,"context_line":"        # Ibde33bdacba6bd1e9c41cc69d0054bf55e1e6454 included, and neutron"},{"line_number":519,"context_line":"        # version depends on it."},{"line_number":520,"context_line":"        res \u003d self._create_subnet(self.fmt,"},{"line_number":521,"context_line":"                                 net_id\u003dnet[\u0027id\u0027],"},{"line_number":522,"context_line":"                                 tenant_id\u003dnet[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_2418cd7f","line":519,"in_reply_to":"9f560f44_e3f71d8c","updated":"2020-08-15 12:41:54.000000000","message":"Done","commit_id":"ef70ba6a2800fdf70e1591c0b9c22cb4f85d1c66"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"e8a5aa6e89d57ac46a9aacd065f08af8ade0f1dc","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        # (zigo) Instead of \u0027network:routed\u0027 we can use"},{"line_number":517,"context_line":"        # const.DEVICE_OWNER_ROUTED whenever neutron-lib is released with"},{"line_number":518,"context_line":"        # Ibde33bdacba6bd1e9c41cc69d0054bf55e1e6454 included, and neutron"},{"line_number":519,"context_line":"        # version depends on it."},{"line_number":520,"context_line":"        res \u003d self._create_subnet(self.fmt,"},{"line_number":521,"context_line":"                                 net_id\u003dnet[\u0027id\u0027],"},{"line_number":522,"context_line":"                                 tenant_id\u003dnet[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_0fad0bea","line":519,"in_reply_to":"9f560f44_e3f71d8c","updated":"2020-08-12 13:37:22.000000000","message":"Same here, I prefer to fix this in a subsequent patch, so that Neutron-lib 2.5.0 isn\u0027t needed for a backport of this patch (which I will add to the Debian packages of Ussuri).","commit_id":"ef70ba6a2800fdf70e1591c0b9c22cb4f85d1c66"}],"releasenotes/notes/network-routed-subnets-cf4874d97ddacd77.yaml":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new subnet of type network:routed has been added. If such a subnet is"},{"line_number":5,"context_line":"    used, the IPs of that subnet will be advertized with BGP over a provider"},{"line_number":6,"context_line":"    network, which itself can use segments. This basically achieves a"},{"line_number":7,"context_line":"    BGP-to-the-rack feature, where the L2 connectivity can be confined to a"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"9f560f44_2a00fd33","line":4,"range":{"start_line":4,"start_character":25,"end_line":4,"end_character":39},"updated":"2020-08-28 18:28:00.000000000","message":"s/``network:routed`` so it\u0027s bold in the release note","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"96eb5836b2cdbc5ae7391b18f8d4450ea011260e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new subnet of type network:routed has been added. If such a subnet is"},{"line_number":5,"context_line":"    used, the IPs of that subnet will be advertized with BGP over a provider"},{"line_number":6,"context_line":"    network, which itself can use segments. This basically achieves a"},{"line_number":7,"context_line":"    BGP-to-the-rack feature, where the L2 connectivity can be confined to a"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"9f560f44_36781a2a","line":4,"range":{"start_line":4,"start_character":25,"end_line":4,"end_character":39},"in_reply_to":"9f560f44_2a00fd33","updated":"2020-08-31 07:31:15.000000000","message":"Done","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c73ac228bda3a96ea05a24bda9c9ecde45eb8054","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    BGP-to-the-rack feature, where the L2 connectivity can be confined to a"},{"line_number":8,"context_line":"    rack only, and all external routing is done by the switches, using BGP."},{"line_number":9,"context_line":"    In this mode, it is still possible to use VXLAN connectivity between the"},{"line_number":10,"context_line":"    comupute nodes, and only floating IPs and router gateways are using BGP"},{"line_number":11,"context_line":"    routing."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":25,"id":"9f560f44_6af6755f","line":10,"range":{"start_line":10,"start_character":4,"end_line":10,"end_character":12},"updated":"2020-08-28 18:28:00.000000000","message":"s/compute","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"96eb5836b2cdbc5ae7391b18f8d4450ea011260e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    BGP-to-the-rack feature, where the L2 connectivity can be confined to a"},{"line_number":8,"context_line":"    rack only, and all external routing is done by the switches, using BGP."},{"line_number":9,"context_line":"    In this mode, it is still possible to use VXLAN connectivity between the"},{"line_number":10,"context_line":"    comupute nodes, and only floating IPs and router gateways are using BGP"},{"line_number":11,"context_line":"    routing."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":25,"id":"9f560f44_9675a635","line":10,"range":{"start_line":10,"start_character":4,"end_line":10,"end_character":12},"in_reply_to":"9f560f44_6af6755f","updated":"2020-08-31 07:31:15.000000000","message":"Done","commit_id":"b9c5a3ec74619f2def68e142ed063372eaee8624"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4c2a193fd668a3e25c9bda11f15d7c22d65cccfd","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":29,"id":"9cd46d96_0a66a35c","line":13,"updated":"2020-12-14 15:33:39.000000000","message":"super nit: extra blank lines\n\nmight not show-up in the release note, just can\u0027t verify since the zuul logs are gone","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"55b2aa62246cad9019ff34349841278d0456946c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"177d832f_a23e7845","line":13,"in_reply_to":"9cd46d96_0a66a35c","updated":"2020-12-15 19:46:24.000000000","message":"Done","commit_id":"6e472d205f5b54fcd847015c5117cbc07adeb82d"}]}
