)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"9d9fc0370c37398e20031a41d604b6c2db396678","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1078350f_6c24a7fb","updated":"2025-07-14 14:45:47.000000000","message":"-1 for _() comment","commit_id":"4b90cab95e9dbe0d2cb544e7cfdfe8c4aff84e1a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5edb300ae85b1f4397b28650c3414f3389d01a8f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"6dfccfa4_c7e3d89b","updated":"2025-07-14 11:39:10.000000000","message":"Please, change the topic of the patch.\n\nThis fix should be backported.","commit_id":"4b90cab95e9dbe0d2cb544e7cfdfe8c4aff84e1a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9b450845ffe65fc2624cbb1c5d459b2ac3f56d11","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"9b967bdc_bf63992f","updated":"2025-07-18 14:16:05.000000000","message":"recheck neutron-functional","commit_id":"f9d2e2cd877b9faeaef202027bc152c1adb812c2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"36c52992ccd41a4fd31da41a5e3f79c80d9d24af","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f3cd013f_b1a509c9","updated":"2025-07-22 06:04:46.000000000","message":"recheck neutron-ovn-tempest-ipv6-only-ovs-release","commit_id":"50f3c5b04091b453c3e4ad03219acb1535048ee8"}],"neutron/db/allowedaddresspairs_db.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"9d9fc0370c37398e20031a41d604b6c2db396678","unresolved":true,"context_lines":[{"line_number":47,"context_line":"        # TODO(slaweq): use constant from neutron_lib.callbacks.resources once"},{"line_number":48,"context_line":"        # it will be available and released"},{"line_number":49,"context_line":"        registry.publish("},{"line_number":50,"context_line":"            \u0027allowed_address_pair\u0027, events.BEFORE_CREATE, self,"},{"line_number":51,"context_line":"            payload\u003devents.DBEventPayload("},{"line_number":52,"context_line":"                context,"},{"line_number":53,"context_line":"                resource_id\u003dport[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"761c01f9_7af28215","line":50,"updated":"2025-07-14 14:45:47.000000000","message":"neutron-lib 3.21.0 was just released which has ALLOWED_ADDRESS_PAIR constant, but since we are backporting can do that change in a follow-on.","commit_id":"4b90cab95e9dbe0d2cb544e7cfdfe8c4aff84e1a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fcb92e8919b9cb8ecd2f1a1e32bbbdd298619b26","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # TODO(slaweq): use constant from neutron_lib.callbacks.resources once"},{"line_number":48,"context_line":"        # it will be available and released"},{"line_number":49,"context_line":"        registry.publish("},{"line_number":50,"context_line":"            \u0027allowed_address_pair\u0027, events.BEFORE_CREATE, self,"},{"line_number":51,"context_line":"            payload\u003devents.DBEventPayload("},{"line_number":52,"context_line":"                context,"},{"line_number":53,"context_line":"                resource_id\u003dport[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"6f8b628a_65c35707","line":50,"in_reply_to":"761c01f9_7af28215","updated":"2025-07-17 09:12:27.000000000","message":"Done","commit_id":"4b90cab95e9dbe0d2cb544e7cfdfe8c4aff84e1a"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/mech_driver.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9de4146eb26c181fa90edf2202bab339aa70b3e1","unresolved":true,"context_lines":[{"line_number":642,"context_line":"            pair[\u0027ip_address\u0027] for pair in allowed_address_pairs])"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"        distributed_ports \u003d self._plugin.get_ports("},{"line_number":645,"context_line":"            n_context.get_admin_context(),"},{"line_number":646,"context_line":"            filters\u003d{\u0027device_owner\u0027: [const.DEVICE_OWNER_DISTRIBUTED],"},{"line_number":647,"context_line":"                     \u0027network_id\u0027: [network_id]})"},{"line_number":648,"context_line":"        print(\"port_id:\", payload.resource_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"19ec981c_e5937a22","line":645,"range":{"start_line":645,"start_character":12,"end_line":645,"end_character":41},"updated":"2025-07-10 09:49:34.000000000","message":"Use `context.elevated()` instead.","commit_id":"9fb876085aac5436c0921e8d9b26a8e9625e83f3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"615a05b2da3aa50f3e84376084622d405d2b2880","unresolved":true,"context_lines":[{"line_number":642,"context_line":"            pair[\u0027ip_address\u0027] for pair in allowed_address_pairs])"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"        distributed_ports \u003d self._plugin.get_ports("},{"line_number":645,"context_line":"            n_context.get_admin_context(),"},{"line_number":646,"context_line":"            filters\u003d{\u0027device_owner\u0027: [const.DEVICE_OWNER_DISTRIBUTED],"},{"line_number":647,"context_line":"                     \u0027network_id\u0027: [network_id]})"},{"line_number":648,"context_line":"        print(\"port_id:\", payload.resource_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"99af5884_4c4c1bb6","line":645,"range":{"start_line":645,"start_character":12,"end_line":645,"end_character":41},"in_reply_to":"19ec981c_e5937a22","updated":"2025-07-10 12:34:53.000000000","message":"thx","commit_id":"9fb876085aac5436c0921e8d9b26a8e9625e83f3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5edb300ae85b1f4397b28650c3414f3389d01a8f","unresolved":false,"context_lines":[{"line_number":642,"context_line":"            pair[\u0027ip_address\u0027] for pair in allowed_address_pairs])"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"        distributed_ports \u003d self._plugin.get_ports("},{"line_number":645,"context_line":"            n_context.get_admin_context(),"},{"line_number":646,"context_line":"            filters\u003d{\u0027device_owner\u0027: [const.DEVICE_OWNER_DISTRIBUTED],"},{"line_number":647,"context_line":"                     \u0027network_id\u0027: [network_id]})"},{"line_number":648,"context_line":"        print(\"port_id:\", payload.resource_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"00f3b883_2f456ca7","line":645,"range":{"start_line":645,"start_character":12,"end_line":645,"end_character":41},"in_reply_to":"99af5884_4c4c1bb6","updated":"2025-07-14 11:39:10.000000000","message":"Done","commit_id":"9fb876085aac5436c0921e8d9b26a8e9625e83f3"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"9d9fc0370c37398e20031a41d604b6c2db396678","unresolved":true,"context_lines":[{"line_number":659,"context_line":"            if common_ips:"},{"line_number":660,"context_line":"                err_msg \u003d (\"IP addresses \u0027%s\u0027 already used by the \""},{"line_number":661,"context_line":"                           \"\u0027%s\u0027 port(s) in the same network\" % ("},{"line_number":662,"context_line":"                                \";\".join(common_ips),"},{"line_number":663,"context_line":"                                const.DEVICE_OWNER_DISTRIBUTED))"},{"line_number":664,"context_line":"                raise n_exc.InvalidInput(error_message\u003derr_msg)"},{"line_number":665,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a8fd8ef_6cc07186","line":662,"updated":"2025-07-14 14:45:47.000000000","message":"I think this message is supposed to be in _() so i18n does the right thing. See L630 above.","commit_id":"4b90cab95e9dbe0d2cb544e7cfdfe8c4aff84e1a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fcb92e8919b9cb8ecd2f1a1e32bbbdd298619b26","unresolved":false,"context_lines":[{"line_number":659,"context_line":"            if common_ips:"},{"line_number":660,"context_line":"                err_msg \u003d (\"IP addresses \u0027%s\u0027 already used by the \""},{"line_number":661,"context_line":"                           \"\u0027%s\u0027 port(s) in the same network\" % ("},{"line_number":662,"context_line":"                                \";\".join(common_ips),"},{"line_number":663,"context_line":"                                const.DEVICE_OWNER_DISTRIBUTED))"},{"line_number":664,"context_line":"                raise n_exc.InvalidInput(error_message\u003derr_msg)"},{"line_number":665,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"34620641_83bdea96","line":662,"in_reply_to":"3a8fd8ef_6cc07186","updated":"2025-07-17 09:12:27.000000000","message":"Done","commit_id":"4b90cab95e9dbe0d2cb544e7cfdfe8c4aff84e1a"},{"author":{"_account_id":13861,"name":"yatin","email":"ykarel@redhat.com","username":"yatinkarel"},"change_message_id":"91c24410687154ab278229eb2e29c8824f6e6e16","unresolved":true,"context_lines":[{"line_number":654,"context_line":"        for distributed_port in distributed_ports:"},{"line_number":655,"context_line":"            distributed_port_ip_addresses \u003d {"},{"line_number":656,"context_line":"                fixed_ip[\u0027ip_address\u0027] for fixed_ip in"},{"line_number":657,"context_line":"                distributed_port.get(\u0027fixed_ips\u0027, [])}"},{"line_number":658,"context_line":"            common_ips \u003d (port_allowed_address_pairs_ip_addresses \u0026"},{"line_number":659,"context_line":"                          distributed_port_ip_addresses)"},{"line_number":660,"context_line":"            if common_ips:"}],"source_content_type":"text/x-python","patch_set":4,"id":"d1559845_f76bad95","line":657,"updated":"2025-07-21 06:06:38.000000000","message":"Don\u0027t we need to handle the case where allowed address pairs are set in different notation like 192.168.0.2/32 and this matches the distributed port?","commit_id":"f9d2e2cd877b9faeaef202027bc152c1adb812c2"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e886a4b4d5503b235e8669522c8e0b02bfe72fe2","unresolved":false,"context_lines":[{"line_number":654,"context_line":"        for distributed_port in distributed_ports:"},{"line_number":655,"context_line":"            distributed_port_ip_addresses \u003d {"},{"line_number":656,"context_line":"                fixed_ip[\u0027ip_address\u0027] for fixed_ip in"},{"line_number":657,"context_line":"                distributed_port.get(\u0027fixed_ips\u0027, [])}"},{"line_number":658,"context_line":"            common_ips \u003d (port_allowed_address_pairs_ip_addresses \u0026"},{"line_number":659,"context_line":"                          distributed_port_ip_addresses)"},{"line_number":660,"context_line":"            if common_ips:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3167edf8_59c3f8e0","line":657,"in_reply_to":"6d3c72a5_148f703e","updated":"2025-07-21 15:13:44.000000000","message":"Done","commit_id":"f9d2e2cd877b9faeaef202027bc152c1adb812c2"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6d8cf721c84b0d6b92a5fcc0e191ca852c0daab0","unresolved":true,"context_lines":[{"line_number":654,"context_line":"        for distributed_port in distributed_ports:"},{"line_number":655,"context_line":"            distributed_port_ip_addresses \u003d {"},{"line_number":656,"context_line":"                fixed_ip[\u0027ip_address\u0027] for fixed_ip in"},{"line_number":657,"context_line":"                distributed_port.get(\u0027fixed_ips\u0027, [])}"},{"line_number":658,"context_line":"            common_ips \u003d (port_allowed_address_pairs_ip_addresses \u0026"},{"line_number":659,"context_line":"                          distributed_port_ip_addresses)"},{"line_number":660,"context_line":"            if common_ips:"}],"source_content_type":"text/x-python","patch_set":4,"id":"6d3c72a5_148f703e","line":657,"in_reply_to":"d1559845_f76bad95","updated":"2025-07-21 12:58:07.000000000","message":"I think you are right. I will check to confirm it and will modify this code to cover such case too.","commit_id":"f9d2e2cd877b9faeaef202027bc152c1adb812c2"}],"releasenotes/notes/block-metadata-port-IP-address-to-be-used-as-virtual-ip-by-ovn-driver-0d46fed7652fea7a.yaml":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"9d9fc0370c37398e20031a41d604b6c2db396678","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    When ML2/OVN backend is used, usage of the metadata port IP address as a"},{"line_number":5,"context_line":"    virtual IP address is blocked. That means that setting such IP address as"},{"line_number":6,"context_line":"    allowed_address_pair for other port is not allowed and API will return 400"},{"line_number":7,"context_line":"    error in such case."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"9c336d33_0d07c887","line":7,"updated":"2025-07-14 14:45:47.000000000","message":"nit: should add the bug link\n\nFor more information, see bug `2116249 \u003chttps://bugs.launchpad.net/neutron/+bug/2116249\u003e`_.","commit_id":"4b90cab95e9dbe0d2cb544e7cfdfe8c4aff84e1a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fcb92e8919b9cb8ecd2f1a1e32bbbdd298619b26","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    When ML2/OVN backend is used, usage of the metadata port IP address as a"},{"line_number":5,"context_line":"    virtual IP address is blocked. That means that setting such IP address as"},{"line_number":6,"context_line":"    allowed_address_pair for other port is not allowed and API will return 400"},{"line_number":7,"context_line":"    error in such case."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"dcc3ee39_f262bdfc","line":7,"in_reply_to":"9c336d33_0d07c887","updated":"2025-07-17 09:12:27.000000000","message":"Done","commit_id":"4b90cab95e9dbe0d2cb544e7cfdfe8c4aff84e1a"}]}
