)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"b240895294720b3dafcfeac3288cf12b80c5697e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"77dcd80f_3f2a344c","updated":"2023-06-16 08:15:22.000000000","message":"Great start! It looks awesome! I just left a few nits here and there.","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"81510001a420f882890b5148360d8e0e8f0dd17c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"247b2864_4a80371d","updated":"2023-06-21 08:47:37.000000000","message":"some nits and suggestions here and there, but it looks really good. (adding -1 simply since documentation and testing aare not ready)","commit_id":"dc3615568d2101baf725a8551bb7cd4623060097"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"aaa0dd0a8981c7b1edf20784e3727feea1a36369","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1df11116_0d326577","updated":"2023-10-10 06:27:59.000000000","message":"Rebase looks ok, just some nits here and there.\n\nBesides, what we discussed on IRC about adding testing coverage and documentation","commit_id":"f6ae058191432fade1bd4b0f9bac125cacba9ef9"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"d981c73dc5462ca4e133c495a7b2348a47f9d5e9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"4b38cbc6_3b35af31","updated":"2024-05-29 07:23:33.000000000","message":"The L3 EVPM patch got merged, are you planing to work on this patch to be rebased on top of master and add L2 support to?","commit_id":"f6ae058191432fade1bd4b0f9bac125cacba9ef9"},{"author":{"_account_id":35638,"deleted":true},"change_message_id":"932a9ceba9f49f2e8bfd6b641691d314a81d0c32","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"12991143_bd9f6900","in_reply_to":"4b38cbc6_3b35af31","updated":"2024-05-31 12:06:11.000000000","message":"I\u0027m definitely interested to implement this, I will have a look at what was committed in the L3 patch. \nWe\u0027re working on some other projects as well, so my time is limited and if someone else has more time for this thats also fine.","commit_id":"f6ae058191432fade1bd4b0f9bac125cacba9ef9"}],"ovn_bgp_agent/config.py":[{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"b240895294720b3dafcfeac3288cf12b80c5697e","unresolved":true,"context_lines":[{"line_number":134,"context_line":"                    \u0027and it is exposed on a given VNI (Type-2).\u0027"},{"line_number":135,"context_line":"                    \u0027With vrf the routes are exposed in different VRFs/VNIs \u0027"},{"line_number":136,"context_line":"                    \u0027(Type-5).\u0027"},{"line_number":137,"context_line":"                    \u0027With dynamic, a mix between l2vni and vrf is \u0027"},{"line_number":138,"context_line":"                    \u0027used, depending on the information annotated on the \u0027"},{"line_number":139,"context_line":"                    \u0027ports. \u0027"},{"line_number":140,"context_line":"                    \u0027Finally, with ovn, instead of using kernel networking a \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"a5ae0fc8_2a5456cc","line":137,"range":{"start_line":137,"start_character":34,"end_line":137,"end_character":63},"updated":"2023-06-16 08:15:22.000000000","message":"this means, with dynamic we cannot expose on the underlay (as the default today), right?","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"359ad43fe56fbe431539d14db330308665eb4320","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                    \u0027and it is exposed on a given VNI (Type-2).\u0027"},{"line_number":135,"context_line":"                    \u0027With vrf the routes are exposed in different VRFs/VNIs \u0027"},{"line_number":136,"context_line":"                    \u0027(Type-5).\u0027"},{"line_number":137,"context_line":"                    \u0027With dynamic, a mix between l2vni and vrf is \u0027"},{"line_number":138,"context_line":"                    \u0027used, depending on the information annotated on the \u0027"},{"line_number":139,"context_line":"                    \u0027ports. \u0027"},{"line_number":140,"context_line":"                    \u0027Finally, with ovn, instead of using kernel networking a \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"4e98c794_dcb65fc3","line":137,"range":{"start_line":137,"start_character":34,"end_line":137,"end_character":63},"in_reply_to":"66f3bd6d_b2123fe5","updated":"2023-06-19 06:00:49.000000000","message":"I\u0027m not saying this is wrong, just wanted to make sure I was fully getting it. I agree with this","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"},{"author":{"_account_id":35638,"deleted":true},"change_message_id":"fe0ed393f1e15d8c8c2cfd78d34b48546bb0ade3","unresolved":true,"context_lines":[{"line_number":134,"context_line":"                    \u0027and it is exposed on a given VNI (Type-2).\u0027"},{"line_number":135,"context_line":"                    \u0027With vrf the routes are exposed in different VRFs/VNIs \u0027"},{"line_number":136,"context_line":"                    \u0027(Type-5).\u0027"},{"line_number":137,"context_line":"                    \u0027With dynamic, a mix between l2vni and vrf is \u0027"},{"line_number":138,"context_line":"                    \u0027used, depending on the information annotated on the \u0027"},{"line_number":139,"context_line":"                    \u0027ports. \u0027"},{"line_number":140,"context_line":"                    \u0027Finally, with ovn, instead of using kernel networking a \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"66f3bd6d_b2123fe5","line":137,"range":{"start_line":137,"start_character":34,"end_line":137,"end_character":63},"in_reply_to":"a5ae0fc8_2a5456cc","updated":"2023-06-16 17:06:00.000000000","message":"Well, we would have to define in which cases the agent should expose into the underlay. networking-bgpvpn allows the admin/user to define in which cases to expose into l2vni or vrf, but there is no such thing for the underlay. Should the agent expose all remaining ports into the underlay? Is there a usecase for that? I don\u0027t think that someone would want that, but maybe there is some other usecase or wanted behavior that I\u0027m missing.","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"}],"ovn_bgp_agent/drivers/openstack/nb_ovn_bgp_driver.py":[{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"b240895294720b3dafcfeac3288cf12b80c5697e","unresolved":true,"context_lines":[{"line_number":208,"context_line":"                    self.ovn_routing_tables, proxy_cidrs, network):"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"                # Expose the IP now that it is connected"},{"line_number":211,"context_line":"                if CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_UNDERLAY \\"},{"line_number":212,"context_line":"                   or CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_OVN:"},{"line_number":213,"context_line":"                    bgp_utils.announce_ips(port_ips)"},{"line_number":214,"context_line":"                    for ip in port_ips:"},{"line_number":215,"context_line":"                        self._exposed_ips.setdefault("}],"source_content_type":"text/x-python","patch_set":2,"id":"aad72e25_5832d76a","line":212,"range":{"start_line":211,"start_character":1,"end_line":212,"end_character":74},"updated":"2023-06-16 08:15:22.000000000","message":"perhaps better to have this on the bgp_utils instead. Also, the dynamic one (when supporting L3) should actually announce the IPs, right?","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"},{"author":{"_account_id":35638,"deleted":true},"change_message_id":"fe0ed393f1e15d8c8c2cfd78d34b48546bb0ade3","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                    self.ovn_routing_tables, proxy_cidrs, network):"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"                # Expose the IP now that it is connected"},{"line_number":211,"context_line":"                if CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_UNDERLAY \\"},{"line_number":212,"context_line":"                   or CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_OVN:"},{"line_number":213,"context_line":"                    bgp_utils.announce_ips(port_ips)"},{"line_number":214,"context_line":"                    for ip in port_ips:"},{"line_number":215,"context_line":"                        self._exposed_ips.setdefault("}],"source_content_type":"text/x-python","patch_set":2,"id":"a647af1a_a544794c","line":212,"range":{"start_line":211,"start_character":1,"end_line":212,"end_character":74},"in_reply_to":"aad72e25_5832d76a","updated":"2023-06-16 17:06:00.000000000","message":"You\u0027re right. L3 is not part of this change, but once we integrate it, we announce the IP\u0027s on different loopbacks, so it makes sense to centralize all that logic in one place.","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"81510001a420f882890b5148360d8e0e8f0dd17c","unresolved":true,"context_lines":[{"line_number":394,"context_line":"            return"},{"line_number":395,"context_line":"        self.ovn_tenant_ls[tenant_logical_switch] \u003d True"},{"line_number":396,"context_line":"        LOG.debug(\"Adding BGP route for FIP with ip %s\", ip)"},{"line_number":397,"context_line":"        if not self._expose_provider_port([ip], logical_switch,"},{"line_number":398,"context_line":"                                          bridge_device, bridge_vlan,"},{"line_number":399,"context_line":"                                          localnet):"},{"line_number":400,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":6,"id":"f44aa296_c99836c1","line":397,"range":{"start_line":397,"start_character":48,"end_line":397,"end_character":63},"updated":"2023-06-21 08:47:37.000000000","message":"why changing this?","commit_id":"dc3615568d2101baf725a8551bb7cd4623060097"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"088ad3358f043edb8678a1cef29eb71a827099c5","unresolved":true,"context_lines":[{"line_number":394,"context_line":"            return"},{"line_number":395,"context_line":"        self.ovn_tenant_ls[tenant_logical_switch] \u003d True"},{"line_number":396,"context_line":"        LOG.debug(\"Adding BGP route for FIP with ip %s\", ip)"},{"line_number":397,"context_line":"        if not self._expose_provider_port([ip], logical_switch,"},{"line_number":398,"context_line":"                                          bridge_device, bridge_vlan,"},{"line_number":399,"context_line":"                                          localnet):"},{"line_number":400,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":6,"id":"b577bca3_85a43264","line":397,"range":{"start_line":397,"start_character":48,"end_line":397,"end_character":63},"in_reply_to":"809eaa92_ec8ba6ef","updated":"2023-06-22 05:56:21.000000000","message":"actually it was both, no option to retrieved and performance issue (to avoid having to iterate over all the _exposed_ips). Perhaps we need to create yet another dict with exposed_fips or something like that. I\u0027ll think about it. We can use your solution for now. Just wanted to make sure this was not missed","commit_id":"dc3615568d2101baf725a8551bb7cd4623060097"},{"author":{"_account_id":35638,"deleted":true},"change_message_id":"6aa8e9054e248728dbd56c2bf3d4537fdaef60ac","unresolved":true,"context_lines":[{"line_number":394,"context_line":"            return"},{"line_number":395,"context_line":"        self.ovn_tenant_ls[tenant_logical_switch] \u003d True"},{"line_number":396,"context_line":"        LOG.debug(\"Adding BGP route for FIP with ip %s\", ip)"},{"line_number":397,"context_line":"        if not self._expose_provider_port([ip], logical_switch,"},{"line_number":398,"context_line":"                                          bridge_device, bridge_vlan,"},{"line_number":399,"context_line":"                                          localnet):"},{"line_number":400,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":6,"id":"a16bf717_cd4c8553","line":397,"range":{"start_line":397,"start_character":48,"end_line":397,"end_character":63},"in_reply_to":"b577bca3_85a43264","updated":"2023-06-22 07:50:22.000000000","message":"I wondered weather it would make sense to modify the FIP events to listen to the NAT table instead of the LSP table. That would avoid the need to iterate over _exposed_ips in exchange for a additional DB query to grab the LSP object.\nOne downside of this is that this would be required on any node, regardless of the requested-chassis, as the LSP object is needed to clarify this placement.","commit_id":"dc3615568d2101baf725a8551bb7cd4623060097"},{"author":{"_account_id":35638,"deleted":true},"change_message_id":"fa20f0ae61d1746e6cfdab183554f9f63606a9f8","unresolved":true,"context_lines":[{"line_number":394,"context_line":"            return"},{"line_number":395,"context_line":"        self.ovn_tenant_ls[tenant_logical_switch] \u003d True"},{"line_number":396,"context_line":"        LOG.debug(\"Adding BGP route for FIP with ip %s\", ip)"},{"line_number":397,"context_line":"        if not self._expose_provider_port([ip], logical_switch,"},{"line_number":398,"context_line":"                                          bridge_device, bridge_vlan,"},{"line_number":399,"context_line":"                                          localnet):"},{"line_number":400,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":6,"id":"809eaa92_ec8ba6ef","line":397,"range":{"start_line":397,"start_character":48,"end_line":397,"end_character":63},"in_reply_to":"f44aa296_c99836c1","updated":"2023-06-21 10:52:33.000000000","message":"If we want to expose a FIP, we have to expose the external LS of the FIP, not the internal LS. Before this change, this field was only used to save the LS - IP - Bridge Device / VLAN mapping into _exposed_ips, but now this field is also used to grab the EVPN information from the LS object, so we should use the correct LS.\nI can only guess why the internal LS was used to save that mapping, I saw that at the time of withdrawing a FIP there is no NAT object anymore and thus the get_port_external_ip_and_ls() cannot be called in LogicalSwitchPortFIPDeleteEvent. Maybe its also a performance issue.\nIs that assumption correct? I solved this by looping through all entries in _exposed_ips in withdraw_fip to get the correct LS to withdraw from even if there is no NAT entry anymore.","commit_id":"dc3615568d2101baf725a8551bb7cd4623060097"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"aaa0dd0a8981c7b1edf20784e3727feea1a36369","unresolved":true,"context_lines":[{"line_number":425,"context_line":"            constants.OVN_LS_NAME_EXT_ID_KEY)"},{"line_number":426,"context_line":"        if not tenant_logical_switch:"},{"line_number":427,"context_line":"            return"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        for ls_name in self._exposed_ips:"},{"line_number":430,"context_line":"            if ip in self._exposed_ips.get(ls_name, {}):"},{"line_number":431,"context_line":"                fip_info \u003d self._exposed_ips.get(ls_name, {}).get(ip)"},{"line_number":432,"context_line":"                logical_switch \u003d ls_name"},{"line_number":433,"context_line":"        if not fip_info:"},{"line_number":434,"context_line":"            # No information to withdraw the FIP"},{"line_number":435,"context_line":"            return"},{"line_number":436,"context_line":"        bridge_device \u003d fip_info[\u0027bridge_device\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f3f38c7_c34c1c63","line":433,"range":{"start_line":428,"start_character":0,"end_line":433,"end_character":0},"updated":"2023-10-10 06:27:59.000000000","message":"you need to define fip_info \u003d None before the loop in case self._exposed_ips is empty","commit_id":"f6ae058191432fade1bd4b0f9bac125cacba9ef9"}],"ovn_bgp_agent/drivers/openstack/utils/bgp.py":[{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"81510001a420f882890b5148360d8e0e8f0dd17c","unresolved":true,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def announce_ips(port_ips):"},{"line_number":28,"context_line":"    if CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_UNDERLAY \\"},{"line_number":29,"context_line":"        or CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_OVN:"},{"line_number":30,"context_line":"        linux_net.add_ips_to_dev(CONF.bgp_nic, port_ips)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"c8a01b31_cb57ca39","line":29,"range":{"start_line":28,"start_character":1,"end_line":29,"end_character":63},"updated":"2023-06-21 08:47:37.000000000","message":"nit: in openstack it is usually split with (), not with \\. Also, we can do something like:\nif (CONF.exposing_method in [constants.EXPOSE_METHOD_UNDERLAY,\n                             constants.EXPOSE_METHOD_OVN]):\n    linus_net.xxxx","commit_id":"dc3615568d2101baf725a8551bb7cd4623060097"},{"author":{"_account_id":35638,"deleted":true},"change_message_id":"fa20f0ae61d1746e6cfdab183554f9f63606a9f8","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def announce_ips(port_ips):"},{"line_number":28,"context_line":"    if CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_UNDERLAY \\"},{"line_number":29,"context_line":"        or CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_OVN:"},{"line_number":30,"context_line":"        linux_net.add_ips_to_dev(CONF.bgp_nic, port_ips)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"56f1ca38_f9825016","line":29,"range":{"start_line":28,"start_character":1,"end_line":29,"end_character":63},"in_reply_to":"c8a01b31_cb57ca39","updated":"2023-06-21 10:52:33.000000000","message":"Done","commit_id":"dc3615568d2101baf725a8551bb7cd4623060097"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"81510001a420f882890b5148360d8e0e8f0dd17c","unresolved":true,"context_lines":[{"line_number":30,"context_line":"        linux_net.add_ips_to_dev(CONF.bgp_nic, port_ips)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def withdraw_ips(port_ips):"},{"line_number":34,"context_line":"    if CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_UNDERLAY \\"},{"line_number":35,"context_line":"        or CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_OVN:"},{"line_number":36,"context_line":"        linux_net.del_ips_from_dev(CONF.bgp_nic, port_ips)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def ensure_base_bgp_configuration(template\u003dfrr.LEAK_VRF_TEMPLATE):"}],"source_content_type":"text/x-python","patch_set":6,"id":"75d0e8e2_252f6d0d","line":36,"range":{"start_line":33,"start_character":0,"end_line":36,"end_character":58},"updated":"2023-06-21 08:47:37.000000000","message":"same here","commit_id":"dc3615568d2101baf725a8551bb7cd4623060097"},{"author":{"_account_id":35638,"deleted":true},"change_message_id":"fa20f0ae61d1746e6cfdab183554f9f63606a9f8","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        linux_net.add_ips_to_dev(CONF.bgp_nic, port_ips)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def withdraw_ips(port_ips):"},{"line_number":34,"context_line":"    if CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_UNDERLAY \\"},{"line_number":35,"context_line":"        or CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_OVN:"},{"line_number":36,"context_line":"        linux_net.del_ips_from_dev(CONF.bgp_nic, port_ips)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def ensure_base_bgp_configuration(template\u003dfrr.LEAK_VRF_TEMPLATE):"}],"source_content_type":"text/x-python","patch_set":6,"id":"8ea8854d_b15abf29","line":36,"range":{"start_line":33,"start_character":0,"end_line":36,"end_character":58},"in_reply_to":"75d0e8e2_252f6d0d","updated":"2023-06-21 10:52:33.000000000","message":"Done","commit_id":"dc3615568d2101baf725a8551bb7cd4623060097"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"aaa0dd0a8981c7b1edf20784e3727feea1a36369","unresolved":true,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def ensure_base_bgp_configuration(template\u003dfrr.LEAK_VRF_TEMPLATE):"},{"line_number":40,"context_line":"    if CONF.exposing_method not in [constants.EXPOSE_METHOD_UNDERLAY,"},{"line_number":41,"context_line":"                                    constants.EXPOSE_METHOD_OVN]:"},{"line_number":42,"context_line":"        return"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    # Create VRF"},{"line_number":45,"context_line":"    linux_net.ensure_vrf(CONF.bgp_vrf, CONF.bgp_vrf_table_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"794a19b7_ecc74095","line":42,"range":{"start_line":40,"start_character":0,"end_line":42,"end_character":14},"updated":"2023-10-10 06:27:59.000000000","message":"perhaps for the future, worth to leave a comment here why there is no need for base bgp configuration (as I actually had to look for it after a few months without checking the patch)","commit_id":"f6ae058191432fade1bd4b0f9bac125cacba9ef9"}],"ovn_bgp_agent/drivers/openstack/utils/evpn.py":[{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"81510001a420f882890b5148360d8e0e8f0dd17c","unresolved":true,"context_lines":[{"line_number":29,"context_line":"                 \u0027veth_vrf\u0027, \u0027veth_ovs\u0027, \u0027vlan_name\u0027])"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def ensure_evpn_devices(vni):"},{"line_number":33,"context_line":"    \u0027\u0027\u0027Create the needed devices for EVPN connectivity"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    This method creates and associate the needed devices for EVPN"}],"source_content_type":"text/x-python","patch_set":6,"id":"a63fdb8c_98f20424","line":32,"range":{"start_line":32,"start_character":1,"end_line":32,"end_character":29},"updated":"2023-06-21 08:47:37.000000000","message":"perhaps this should take L2/L3 type as parameter to configure EVPN devices differently in that case (and for now only handle the L2 type, where VRF is not created, neither the Lo)","commit_id":"dc3615568d2101baf725a8551bb7cd4623060097"},{"author":{"_account_id":35638,"deleted":true},"change_message_id":"6aa8e9054e248728dbd56c2bf3d4537fdaef60ac","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                 \u0027veth_vrf\u0027, \u0027veth_ovs\u0027, \u0027vlan_name\u0027])"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def ensure_evpn_devices(vni):"},{"line_number":33,"context_line":"    \u0027\u0027\u0027Create the needed devices for EVPN connectivity"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    This method creates and associate the needed devices for EVPN"}],"source_content_type":"text/x-python","patch_set":6,"id":"039e4eb1_21b13c06","line":32,"range":{"start_line":32,"start_character":1,"end_line":32,"end_character":29},"in_reply_to":"71d06e12_1dec4324","updated":"2023-06-22 07:50:22.000000000","message":"Done","commit_id":"dc3615568d2101baf725a8551bb7cd4623060097"},{"author":{"_account_id":35638,"deleted":true},"change_message_id":"fa20f0ae61d1746e6cfdab183554f9f63606a9f8","unresolved":true,"context_lines":[{"line_number":29,"context_line":"                 \u0027veth_vrf\u0027, \u0027veth_ovs\u0027, \u0027vlan_name\u0027])"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def ensure_evpn_devices(vni):"},{"line_number":33,"context_line":"    \u0027\u0027\u0027Create the needed devices for EVPN connectivity"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    This method creates and associate the needed devices for EVPN"}],"source_content_type":"text/x-python","patch_set":6,"id":"cf4b06b0_5ad0f2d9","line":32,"range":{"start_line":32,"start_character":1,"end_line":32,"end_character":29},"in_reply_to":"a63fdb8c_98f20424","updated":"2023-06-21 10:52:33.000000000","message":"As we only implement L2 in this change I would postpone that to the L3 change.","commit_id":"dc3615568d2101baf725a8551bb7cd4623060097"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"088ad3358f043edb8678a1cef29eb71a827099c5","unresolved":true,"context_lines":[{"line_number":29,"context_line":"                 \u0027veth_vrf\u0027, \u0027veth_ovs\u0027, \u0027vlan_name\u0027])"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def ensure_evpn_devices(vni):"},{"line_number":33,"context_line":"    \u0027\u0027\u0027Create the needed devices for EVPN connectivity"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    This method creates and associate the needed devices for EVPN"}],"source_content_type":"text/x-python","patch_set":6,"id":"71d06e12_1dec4324","line":32,"range":{"start_line":32,"start_character":1,"end_line":32,"end_character":29},"in_reply_to":"cf4b06b0_5ad0f2d9","updated":"2023-06-22 05:56:21.000000000","message":"sounds good","commit_id":"dc3615568d2101baf725a8551bb7cd4623060097"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"81510001a420f882890b5148360d8e0e8f0dd17c","unresolved":true,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    This method creates and associate the needed devices for EVPN"},{"line_number":36,"context_line":"    connectivity. It creates:"},{"line_number":37,"context_line":"    - VRF device"},{"line_number":38,"context_line":"    - Linux Bridge device, associated to the VRF"},{"line_number":39,"context_line":"    - VXLAN device, using loopback IP, associate to the bridge"},{"line_number":40,"context_line":"    - Dummy device to expose the IPs, associated to the VRF"}],"source_content_type":"text/x-python","patch_set":6,"id":"94fb1a91_6ef5d365","line":37,"range":{"start_line":37,"start_character":1,"end_line":37,"end_character":16},"updated":"2023-06-21 08:47:37.000000000","message":"it does not create a VRF, right?","commit_id":"dc3615568d2101baf725a8551bb7cd4623060097"},{"author":{"_account_id":35638,"deleted":true},"change_message_id":"fa20f0ae61d1746e6cfdab183554f9f63606a9f8","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    This method creates and associate the needed devices for EVPN"},{"line_number":36,"context_line":"    connectivity. It creates:"},{"line_number":37,"context_line":"    - VRF device"},{"line_number":38,"context_line":"    - Linux Bridge device, associated to the VRF"},{"line_number":39,"context_line":"    - VXLAN device, using loopback IP, associate to the bridge"},{"line_number":40,"context_line":"    - Dummy device to expose the IPs, associated to the VRF"}],"source_content_type":"text/x-python","patch_set":6,"id":"a2cd4d6a_fa3116e3","line":37,"range":{"start_line":37,"start_character":1,"end_line":37,"end_character":16},"in_reply_to":"94fb1a91_6ef5d365","updated":"2023-06-21 10:52:33.000000000","message":"Yeah, I fixed the description.","commit_id":"dc3615568d2101baf725a8551bb7cd4623060097"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"aaa0dd0a8981c7b1edf20784e3727feea1a36369","unresolved":true,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    local_ip \u003d get_evpn_local_ip()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    if not local_ip:"},{"line_number":58,"context_line":"        LOG.error(\"EVPN device must have an IP associated for the \""},{"line_number":59,"context_line":"                  \"VXLAN local ip\")"},{"line_number":60,"context_line":"        return None, None"},{"line_number":61,"context_line":"    linux_net.ensure_vxlan(vxlan_name, vni, local_ip,"},{"line_number":62,"context_line":"                           CONF.evpn_udp_dstport)"},{"line_number":63,"context_line":"    # connect vxlan to bridge"}],"source_content_type":"text/x-python","patch_set":9,"id":"8d4f9c4d_12985827","line":60,"range":{"start_line":57,"start_character":0,"end_line":60,"end_character":25},"updated":"2023-10-10 06:27:59.000000000","message":"we made some improvements to the code lately, perhaps this should raise a (new) custom exception EVPNLocalIPNotFound or something like that, and handle it on the methods calling ensure_evpn_devices","commit_id":"f6ae058191432fade1bd4b0f9bac125cacba9ef9"}],"ovn_bgp_agent/drivers/openstack/utils/frr.py":[{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"b240895294720b3dafcfeac3288cf12b80c5697e","unresolved":true,"context_lines":[{"line_number":187,"context_line":"             action, external_ids)"},{"line_number":188,"context_line":"    if action \u003d\u003d \"add-vrf\":"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        local_ip \u003d CONF.evpn_local_ip"},{"line_number":191,"context_line":"        if not local_ip:"},{"line_number":192,"context_line":"            local_nic \u003d \u0027lo\u0027"},{"line_number":193,"context_line":"            prefixlen_filter \u003d 32  # assuming IPv4"},{"line_number":194,"context_line":"            if CONF.evpn_nic:"},{"line_number":195,"context_line":"                local_nic \u003d CONF.evpn_nic"},{"line_number":196,"context_line":"                prefixlen_filter \u003d False"},{"line_number":197,"context_line":"            # NOTE(ltomasbo): assuming only 1 IP on the device with /32 prefix"},{"line_number":198,"context_line":"            local_ip \u003d linux_net.get_nic_ip(local_nic, prefixlen_filter)[0]"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        vrf_template \u003d Template(ADD_VRF_TEMPLATE)"},{"line_number":201,"context_line":"        vrf_config \u003d vrf_template.render("}],"source_content_type":"text/x-python","patch_set":2,"id":"3bc2049e_9464ae13","line":198,"range":{"start_line":190,"start_character":0,"end_line":198,"end_character":75},"updated":"2023-06-16 08:15:22.000000000","message":"perhaps moving it to a different function: local_ip \u003d get_evpn_local_ip()","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"},{"author":{"_account_id":35638,"deleted":true},"change_message_id":"fe0ed393f1e15d8c8c2cfd78d34b48546bb0ade3","unresolved":false,"context_lines":[{"line_number":187,"context_line":"             action, external_ids)"},{"line_number":188,"context_line":"    if action \u003d\u003d \"add-vrf\":"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        local_ip \u003d CONF.evpn_local_ip"},{"line_number":191,"context_line":"        if not local_ip:"},{"line_number":192,"context_line":"            local_nic \u003d \u0027lo\u0027"},{"line_number":193,"context_line":"            prefixlen_filter \u003d 32  # assuming IPv4"},{"line_number":194,"context_line":"            if CONF.evpn_nic:"},{"line_number":195,"context_line":"                local_nic \u003d CONF.evpn_nic"},{"line_number":196,"context_line":"                prefixlen_filter \u003d False"},{"line_number":197,"context_line":"            # NOTE(ltomasbo): assuming only 1 IP on the device with /32 prefix"},{"line_number":198,"context_line":"            local_ip \u003d linux_net.get_nic_ip(local_nic, prefixlen_filter)[0]"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        vrf_template \u003d Template(ADD_VRF_TEMPLATE)"},{"line_number":201,"context_line":"        vrf_config \u003d vrf_template.render("}],"source_content_type":"text/x-python","patch_set":2,"id":"47ad8267_9e299a59","line":198,"range":{"start_line":190,"start_character":0,"end_line":198,"end_character":75},"in_reply_to":"3bc2049e_9464ae13","updated":"2023-06-16 17:06:00.000000000","message":"Done","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"b240895294720b3dafcfeac3288cf12b80c5697e","unresolved":true,"context_lines":[{"line_number":204,"context_line":"                                                    OVN_EVPN_VNI_EXT_ID_KEY)),"},{"line_number":205,"context_line":"            bgp_as\u003dCONF.bgp_AS,"},{"line_number":206,"context_line":"            vni\u003dexternal_ids.get(constants.OVN_EVPN_VNI_EXT_ID_KEY),"},{"line_number":207,"context_line":"            type\u003dexternal_ids.get(constants.OVN_EVPN_TYPE_EXT_ID_KEY),"},{"line_number":208,"context_line":"            local_ip\u003dlocal_ip,"},{"line_number":209,"context_line":"            route_targets\u003dliteral_eval(external_ids."},{"line_number":210,"context_line":"                                       get(constants."}],"source_content_type":"text/x-python","patch_set":2,"id":"b913e118_1bb92648","line":207,"range":{"start_line":207,"start_character":12,"end_line":207,"end_character":16},"updated":"2023-06-16 08:15:22.000000000","message":"use a different name that does not match the python \"type\"","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"},{"author":{"_account_id":35638,"deleted":true},"change_message_id":"fe0ed393f1e15d8c8c2cfd78d34b48546bb0ade3","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                                                    OVN_EVPN_VNI_EXT_ID_KEY)),"},{"line_number":205,"context_line":"            bgp_as\u003dCONF.bgp_AS,"},{"line_number":206,"context_line":"            vni\u003dexternal_ids.get(constants.OVN_EVPN_VNI_EXT_ID_KEY),"},{"line_number":207,"context_line":"            type\u003dexternal_ids.get(constants.OVN_EVPN_TYPE_EXT_ID_KEY),"},{"line_number":208,"context_line":"            local_ip\u003dlocal_ip,"},{"line_number":209,"context_line":"            route_targets\u003dliteral_eval(external_ids."},{"line_number":210,"context_line":"                                       get(constants."}],"source_content_type":"text/x-python","patch_set":2,"id":"2a4e57f8_b278cd0b","line":207,"range":{"start_line":207,"start_character":12,"end_line":207,"end_character":16},"in_reply_to":"b913e118_1bb92648","updated":"2023-06-16 17:06:00.000000000","message":"Done","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"}],"ovn_bgp_agent/drivers/openstack/utils/wire.py":[{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"b240895294720b3dafcfeac3288cf12b80c5697e","unresolved":true,"context_lines":[{"line_number":38,"context_line":"    if CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_UNDERLAY:"},{"line_number":39,"context_line":"        return _ensure_base_wiring_config_underlay(idl, bridge_mappings,"},{"line_number":40,"context_line":"                                                   routing_tables)"},{"line_number":41,"context_line":"    elif CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_DYNAMIC:"},{"line_number":42,"context_line":"        return _ensure_base_wiring_config_evpn(idl, bridge_mappings,"},{"line_number":43,"context_line":"                                               routing_tables)"},{"line_number":44,"context_line":"    elif CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_L2VNI:"},{"line_number":45,"context_line":"        return _ensure_base_wiring_config_evpn(idl, bridge_mappings,"},{"line_number":46,"context_line":"                                               routing_tables)"},{"line_number":47,"context_line":"    elif CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_VRF:"},{"line_number":48,"context_line":"        return _ensure_base_wiring_config_evpn(idl, bridge_mappings,"},{"line_number":49,"context_line":"                                               routing_tables)"},{"line_number":50,"context_line":"    elif CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_OVN:"},{"line_number":51,"context_line":"        raise NotImplementedError()"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"44cf7553_1c2be72c","line":49,"range":{"start_line":41,"start_character":0,"end_line":49,"end_character":62},"updated":"2023-06-16 08:15:22.000000000","message":"as the same is being used here, perhaps better do it like:\nelif CONF.exposing_method in [DYNAMIC, L2VNI, VRF]:","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"},{"author":{"_account_id":35638,"deleted":true},"change_message_id":"fe0ed393f1e15d8c8c2cfd78d34b48546bb0ade3","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    if CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_UNDERLAY:"},{"line_number":39,"context_line":"        return _ensure_base_wiring_config_underlay(idl, bridge_mappings,"},{"line_number":40,"context_line":"                                                   routing_tables)"},{"line_number":41,"context_line":"    elif CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_DYNAMIC:"},{"line_number":42,"context_line":"        return _ensure_base_wiring_config_evpn(idl, bridge_mappings,"},{"line_number":43,"context_line":"                                               routing_tables)"},{"line_number":44,"context_line":"    elif CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_L2VNI:"},{"line_number":45,"context_line":"        return _ensure_base_wiring_config_evpn(idl, bridge_mappings,"},{"line_number":46,"context_line":"                                               routing_tables)"},{"line_number":47,"context_line":"    elif CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_VRF:"},{"line_number":48,"context_line":"        return _ensure_base_wiring_config_evpn(idl, bridge_mappings,"},{"line_number":49,"context_line":"                                               routing_tables)"},{"line_number":50,"context_line":"    elif CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_OVN:"},{"line_number":51,"context_line":"        raise NotImplementedError()"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f82a755_f1fa53f0","line":49,"range":{"start_line":41,"start_character":0,"end_line":49,"end_character":62},"in_reply_to":"44cf7553_1c2be72c","updated":"2023-06-16 17:06:00.000000000","message":"Done","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"b240895294720b3dafcfeac3288cf12b80c5697e","unresolved":true,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"def wire_provider_port(routing_tables_routes, ovs_flows, port_ips,"},{"line_number":151,"context_line":"                       bridge_device, bridge_vlan, localnet, routing_table,"},{"line_number":152,"context_line":"                       proxy_cidrs, logical_switch, lladdr\u003dNone):"},{"line_number":153,"context_line":"    if CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_UNDERLAY:"},{"line_number":154,"context_line":"        return _wire_provider_port_underlay(routing_tables_routes, ovs_flows,"},{"line_number":155,"context_line":"                                            port_ips, bridge_device,"}],"source_content_type":"text/x-python","patch_set":2,"id":"8c728972_8a109686","line":152,"range":{"start_line":152,"start_character":36,"end_line":152,"end_character":52},"updated":"2023-06-16 08:15:22.000000000","message":"perhaps make it optional as it was not needed before?","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"},{"author":{"_account_id":35638,"deleted":true},"change_message_id":"fe0ed393f1e15d8c8c2cfd78d34b48546bb0ade3","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"def wire_provider_port(routing_tables_routes, ovs_flows, port_ips,"},{"line_number":151,"context_line":"                       bridge_device, bridge_vlan, localnet, routing_table,"},{"line_number":152,"context_line":"                       proxy_cidrs, logical_switch, lladdr\u003dNone):"},{"line_number":153,"context_line":"    if CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_UNDERLAY:"},{"line_number":154,"context_line":"        return _wire_provider_port_underlay(routing_tables_routes, ovs_flows,"},{"line_number":155,"context_line":"                                            port_ips, bridge_device,"}],"source_content_type":"text/x-python","patch_set":2,"id":"6d8abc05_c3f4db06","line":152,"range":{"start_line":152,"start_character":36,"end_line":152,"end_character":52},"in_reply_to":"8c728972_8a109686","updated":"2023-06-16 17:06:00.000000000","message":"Indeed, it has to be optional. This breaks the SB BGP driver in the current patchset. Fixed now.","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"b240895294720b3dafcfeac3288cf12b80c5697e","unresolved":true,"context_lines":[{"line_number":163,"context_line":"                                         routing_table, logical_switch,"},{"line_number":164,"context_line":"                                         lladdr\u003dlladdr)"},{"line_number":165,"context_line":"    elif CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_DYNAMIC:"},{"line_number":166,"context_line":"        if logical_switch.external_ids.get("},{"line_number":167,"context_line":"            constants.OVN_EVPN_TYPE_EXT_ID_KEY) \u003d\u003d \"l2\":"},{"line_number":168,"context_line":"            return _wire_provider_port_l2vni(routing_tables_routes, ovs_flows,"},{"line_number":169,"context_line":"                                             port_ips, bridge_device,"},{"line_number":170,"context_line":"                                             bridge_vlan, localnet,"},{"line_number":171,"context_line":"                                             routing_table, logical_switch,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5c176c2b_771bc19a","line":168,"range":{"start_line":166,"start_character":43,"end_line":168,"end_character":0},"updated":"2023-06-16 08:15:22.000000000","message":"this part only accounts for L2 type, but below you handle both l2 and l3, perhaps worth to split the l3 related stuff in a different patch (this can be split later though)","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"},{"author":{"_account_id":35638,"deleted":true},"change_message_id":"fe0ed393f1e15d8c8c2cfd78d34b48546bb0ade3","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                                         routing_table, logical_switch,"},{"line_number":164,"context_line":"                                         lladdr\u003dlladdr)"},{"line_number":165,"context_line":"    elif CONF.exposing_method \u003d\u003d constants.EXPOSE_METHOD_DYNAMIC:"},{"line_number":166,"context_line":"        if logical_switch.external_ids.get("},{"line_number":167,"context_line":"            constants.OVN_EVPN_TYPE_EXT_ID_KEY) \u003d\u003d \"l2\":"},{"line_number":168,"context_line":"            return _wire_provider_port_l2vni(routing_tables_routes, ovs_flows,"},{"line_number":169,"context_line":"                                             port_ips, bridge_device,"},{"line_number":170,"context_line":"                                             bridge_vlan, localnet,"},{"line_number":171,"context_line":"                                             routing_table, logical_switch,"}],"source_content_type":"text/x-python","patch_set":2,"id":"0d2e1c0d_827bcf88","line":168,"range":{"start_line":166,"start_character":43,"end_line":168,"end_character":0},"in_reply_to":"5c176c2b_771bc19a","updated":"2023-06-16 17:06:00.000000000","message":"Yeah, I will move the evpn code to a dedicated .py and remove the L3 stuff for now.","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"b240895294720b3dafcfeac3288cf12b80c5697e","unresolved":true,"context_lines":[{"line_number":252,"context_line":"            constants.OVN_LS_NAME_EXT_ID_KEY"},{"line_number":253,"context_line":"            ) \u003d\u003d logical_switch.external_ids.get("},{"line_number":254,"context_line":"                constants.OVN_LS_NAME_EXT_ID_KEY):"},{"line_number":255,"context_line":"            LOG.error(\"Network will not be deleted as \\"},{"line_number":256,"context_line":"                      port \" + port.name + \" is on the same network\")"},{"line_number":257,"context_line":"            return"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3179041c_a4c60cb6","line":255,"range":{"start_line":255,"start_character":16,"end_line":255,"end_character":21},"updated":"2023-06-16 08:15:22.000000000","message":"this should be debug instead, right? this is normal process when just deleting one of the IPs, right?","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"},{"author":{"_account_id":35638,"deleted":true},"change_message_id":"fe0ed393f1e15d8c8c2cfd78d34b48546bb0ade3","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            constants.OVN_LS_NAME_EXT_ID_KEY"},{"line_number":253,"context_line":"            ) \u003d\u003d logical_switch.external_ids.get("},{"line_number":254,"context_line":"                constants.OVN_LS_NAME_EXT_ID_KEY):"},{"line_number":255,"context_line":"            LOG.error(\"Network will not be deleted as \\"},{"line_number":256,"context_line":"                      port \" + port.name + \" is on the same network\")"},{"line_number":257,"context_line":"            return"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1ff414b9_1e199111","line":255,"range":{"start_line":255,"start_character":16,"end_line":255,"end_character":21},"in_reply_to":"3179041c_a4c60cb6","updated":"2023-06-16 17:06:00.000000000","message":"Done","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"b240895294720b3dafcfeac3288cf12b80c5697e","unresolved":true,"context_lines":[{"line_number":412,"context_line":"    return True"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"def _ensure_evpn_devices(datapath_bridge, vni, vlan_tag, type):"},{"line_number":416,"context_line":"    \u0027\u0027\u0027Create the needed devices for EVPN connectivity"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    This method creates and associate the needed devices for EVPN"}],"source_content_type":"text/x-python","patch_set":2,"id":"33059220_7238f724","line":415,"range":{"start_line":415,"start_character":1,"end_line":415,"end_character":26},"updated":"2023-06-16 08:15:22.000000000","message":"perhaps worth to create a new utils/evpn.py for these type of methods","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"},{"author":{"_account_id":35638,"deleted":true},"change_message_id":"fe0ed393f1e15d8c8c2cfd78d34b48546bb0ade3","unresolved":false,"context_lines":[{"line_number":412,"context_line":"    return True"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"def _ensure_evpn_devices(datapath_bridge, vni, vlan_tag, type):"},{"line_number":416,"context_line":"    \u0027\u0027\u0027Create the needed devices for EVPN connectivity"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    This method creates and associate the needed devices for EVPN"}],"source_content_type":"text/x-python","patch_set":2,"id":"d3be6a8e_dc37b5bc","line":415,"range":{"start_line":415,"start_character":1,"end_line":415,"end_character":26},"in_reply_to":"33059220_7238f724","updated":"2023-06-16 17:06:00.000000000","message":"Done","commit_id":"43ba65f45bed75561aa28ff5b2667b9896390dfa"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"81510001a420f882890b5148360d8e0e8f0dd17c","unresolved":true,"context_lines":[{"line_number":200,"context_line":"def _unwire_provider_port_l2vni(bridge_device, logical_switch, portsOnChassis):"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    for port in portsOnChassis:"},{"line_number":203,"context_line":"        if port.external_ids.get("},{"line_number":204,"context_line":"            constants.OVN_LS_NAME_EXT_ID_KEY"},{"line_number":205,"context_line":"            ) \u003d\u003d logical_switch.external_ids.get("},{"line_number":206,"context_line":"                \u0027name\u0027):"},{"line_number":207,"context_line":"            LOG.debug(\"Network will not be deleted as \\"},{"line_number":208,"context_line":"                      port \" + port.name + \" is on the same network\")"},{"line_number":209,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":6,"id":"51507277_fa27af79","line":206,"range":{"start_line":203,"start_character":1,"end_line":206,"end_character":24},"updated":"2023-06-21 08:47:37.000000000","message":"perhaps format it as:\nif (port.external_ids.get(constants.OVN_LS_NAME_EXT_ID_KEY) \u003d\u003d\n        logical_switch.external_ids.get(\u0027name\u0027)):\n    LOG.debug(...)","commit_id":"dc3615568d2101baf725a8551bb7cd4623060097"},{"author":{"_account_id":35638,"deleted":true},"change_message_id":"fa20f0ae61d1746e6cfdab183554f9f63606a9f8","unresolved":false,"context_lines":[{"line_number":200,"context_line":"def _unwire_provider_port_l2vni(bridge_device, logical_switch, portsOnChassis):"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    for port in portsOnChassis:"},{"line_number":203,"context_line":"        if port.external_ids.get("},{"line_number":204,"context_line":"            constants.OVN_LS_NAME_EXT_ID_KEY"},{"line_number":205,"context_line":"            ) \u003d\u003d logical_switch.external_ids.get("},{"line_number":206,"context_line":"                \u0027name\u0027):"},{"line_number":207,"context_line":"            LOG.debug(\"Network will not be deleted as \\"},{"line_number":208,"context_line":"                      port \" + port.name + \" is on the same network\")"},{"line_number":209,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":6,"id":"bc0b8060_d808806f","line":206,"range":{"start_line":203,"start_character":1,"end_line":206,"end_character":24},"in_reply_to":"51507277_fa27af79","updated":"2023-06-21 10:52:33.000000000","message":"Done","commit_id":"dc3615568d2101baf725a8551bb7cd4623060097"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"81510001a420f882890b5148360d8e0e8f0dd17c","unresolved":true,"context_lines":[{"line_number":208,"context_line":"                      port \" + port.name + \" is on the same network\")"},{"line_number":209,"context_line":"            return"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    evpn.disconnect_evpn_from_ovn(logical_switch.external_ids.get("},{"line_number":212,"context_line":"        constants.OVN_EVPN_VNI_EXT_ID_KEY),"},{"line_number":213,"context_line":"        bridge_device)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    evpn_info \u003d {\u0027vni\u0027: logical_switch.external_ids.get("},{"line_number":216,"context_line":"        constants.OVN_EVPN_VNI_EXT_ID_KEY)}"},{"line_number":217,"context_line":"    frr.vrf_reconfigure(evpn_info, action\u003d\"del-vrf\")"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    evpn.remove_evpn_devices(logical_switch.external_ids.get("},{"line_number":220,"context_line":"        constants.OVN_EVPN_VNI_EXT_ID_KEY))"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    return True"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"20a32192_441965b2","line":220,"range":{"start_line":211,"start_character":0,"end_line":220,"end_character":43},"updated":"2023-06-21 08:47:37.000000000","message":"instead of having to do the logical_swtich.external_ids.get() 3 times, better to have something like:\nvni \u003d logical_swtich.external_ids.get(...)\nand then use it on the following calls","commit_id":"dc3615568d2101baf725a8551bb7cd4623060097"},{"author":{"_account_id":35638,"deleted":true},"change_message_id":"fa20f0ae61d1746e6cfdab183554f9f63606a9f8","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                      port \" + port.name + \" is on the same network\")"},{"line_number":209,"context_line":"            return"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    evpn.disconnect_evpn_from_ovn(logical_switch.external_ids.get("},{"line_number":212,"context_line":"        constants.OVN_EVPN_VNI_EXT_ID_KEY),"},{"line_number":213,"context_line":"        bridge_device)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    evpn_info \u003d {\u0027vni\u0027: logical_switch.external_ids.get("},{"line_number":216,"context_line":"        constants.OVN_EVPN_VNI_EXT_ID_KEY)}"},{"line_number":217,"context_line":"    frr.vrf_reconfigure(evpn_info, action\u003d\"del-vrf\")"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    evpn.remove_evpn_devices(logical_switch.external_ids.get("},{"line_number":220,"context_line":"        constants.OVN_EVPN_VNI_EXT_ID_KEY))"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    return True"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1e82cb02_ea3ac501","line":220,"range":{"start_line":211,"start_character":0,"end_line":220,"end_character":43},"in_reply_to":"20a32192_441965b2","updated":"2023-06-21 10:52:33.000000000","message":"Done","commit_id":"dc3615568d2101baf725a8551bb7cd4623060097"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"aaa0dd0a8981c7b1edf20784e3727feea1a36369","unresolved":true,"context_lines":[{"line_number":200,"context_line":""},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"def _wire_provider_port_l2vni(bridge_device, bridge_vlan, logical_switch):"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    evpn_dev \u003d evpn.ensure_evpn_devices("},{"line_number":205,"context_line":"        logical_switch.external_ids.get(constants.OVN_EVPN_VNI_EXT_ID_KEY))"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"cd36363c_a700dd16","line":203,"updated":"2023-10-10 06:27:59.000000000","message":"nit: remove empty line","commit_id":"f6ae058191432fade1bd4b0f9bac125cacba9ef9"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"aaa0dd0a8981c7b1edf20784e3727feea1a36369","unresolved":true,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    evpn_dev \u003d evpn.ensure_evpn_devices("},{"line_number":205,"context_line":"        logical_switch.external_ids.get(constants.OVN_EVPN_VNI_EXT_ID_KEY))"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    frr.vrf_reconfigure(logical_switch.external_ids, action\u003d\"add-vrf\")"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    evpn.connect_evpn_to_ovn(evpn_dev.veth_ovs, bridge_device,"},{"line_number":210,"context_line":"                             bridge_vlan)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    return True"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"90451f69_95d2c20a","line":210,"range":{"start_line":206,"start_character":0,"end_line":210,"end_character":41},"updated":"2023-10-10 06:27:59.000000000","message":"probably the wiring option should be the opossite, first connect things, then advertise","commit_id":"f6ae058191432fade1bd4b0f9bac125cacba9ef9"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"aaa0dd0a8981c7b1edf20784e3727feea1a36369","unresolved":true,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    vni \u003d logical_switch.external_ids.get(constants.OVN_EVPN_VNI_EXT_ID_KEY)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    evpn.disconnect_evpn_from_ovn(vni, bridge_device)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    evpn_info \u003d {\u0027vni\u0027: vni}"},{"line_number":229,"context_line":"    frr.vrf_reconfigure(evpn_info, action\u003d\"del-vrf\")"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    evpn.remove_evpn_devices(vni)"},{"line_number":232,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa238a2_a7ec306c","line":229,"range":{"start_line":226,"start_character":0,"end_line":229,"end_character":52},"updated":"2023-10-10 06:27:59.000000000","message":"and for disconnect, the same, first withdraw, then remove the \"wiring\"","commit_id":"f6ae058191432fade1bd4b0f9bac125cacba9ef9"}]}
