)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"37424d1273024639a0f5cf38803bead6b52d103e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"7a069d02_ad9c0c57","updated":"2023-01-03 13:30:18.000000000","message":"Hello team, we still think this patch would make sense to be merged upstream.\n\nCan you reconsider reviewing it again?","commit_id":"a857d6a103edb978d0cc35d14b1d4dd9652a7a12"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"90d4c0ecfdce21a592f27fed3f60dd0155a8db32","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"440c233e_fa33ab7d","updated":"2022-07-08 15:50:03.000000000","message":"Hello,\nCan we move forward with this change?\nThe \u0027network:router_interface_distributed\u0027 is having router.tenant_id. So I think it\u0027s safe to add the same on network:router_centralized_snat.\n","commit_id":"a857d6a103edb978d0cc35d14b1d4dd9652a7a12"}],"neutron/db/l3_dvr_db.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f02b1edf59a9137ffe005c3601843bb8f8e549fc","unresolved":false,"context_lines":[{"line_number":264,"context_line":"    def _add_csnat_router_interface_port("},{"line_number":265,"context_line":"            self, context, router, network_id, subnets, do_pop\u003dTrue):"},{"line_number":266,"context_line":"        \"\"\"Add SNAT interface to the specified router and subnet.\"\"\""},{"line_number":267,"context_line":"        port_data \u003d {\u0027tenant_id\u0027: router.tenant_id,"},{"line_number":268,"context_line":"                     \u0027network_id\u0027: network_id,"},{"line_number":269,"context_line":"                     \u0027fixed_ips\u0027: subnets,"},{"line_number":270,"context_line":"                     \u0027device_id\u0027: router.id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_e2f8f34a","line":267,"updated":"2020-10-12 16:49:02.000000000","message":"This breaks from the reason it\u0027s blank:\n\n# Port has no \u0027tenant-id\u0027, as it is hidden from user\n\nThat was copied from _create_router_gw_port()\n\nQuestion - even though you can see the port, can you delete it without admin privs?  I don\u0027t have a DVR setup running at the moment to test.","commit_id":"06391f55ed8595db679a2d29c429433dc9f9e56a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5972c2c6242615d750c9bdef3caa0f14f6d0def8","unresolved":false,"context_lines":[{"line_number":264,"context_line":"    def _add_csnat_router_interface_port("},{"line_number":265,"context_line":"            self, context, router, network_id, subnets, do_pop\u003dTrue):"},{"line_number":266,"context_line":"        \"\"\"Add SNAT interface to the specified router and subnet.\"\"\""},{"line_number":267,"context_line":"        port_data \u003d {\u0027tenant_id\u0027: router.tenant_id,"},{"line_number":268,"context_line":"                     \u0027network_id\u0027: network_id,"},{"line_number":269,"context_line":"                     \u0027fixed_ips\u0027: subnets,"},{"line_number":270,"context_line":"                     \u0027device_id\u0027: router.id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_75d5b6e5","line":267,"in_reply_to":"9f560f44_2a1bdd1b","updated":"2020-10-13 01:37:02.000000000","message":"The reason is that these ports are supposed to be hidden from the user and are an implementation detail.  That\u0027s also why you can\u0027t delete the port as it would make the router non-functional.\n\nI\u0027m not sure why these two port types are different, that needs to be sorted out.","commit_id":"06391f55ed8595db679a2d29c429433dc9f9e56a"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"fee8b5f6e072a5bc5748d8359114270c5241572b","unresolved":false,"context_lines":[{"line_number":264,"context_line":"    def _add_csnat_router_interface_port("},{"line_number":265,"context_line":"            self, context, router, network_id, subnets, do_pop\u003dTrue):"},{"line_number":266,"context_line":"        \"\"\"Add SNAT interface to the specified router and subnet.\"\"\""},{"line_number":267,"context_line":"        port_data \u003d {\u0027tenant_id\u0027: router.tenant_id,"},{"line_number":268,"context_line":"                     \u0027network_id\u0027: network_id,"},{"line_number":269,"context_line":"                     \u0027fixed_ips\u0027: subnets,"},{"line_number":270,"context_line":"                     \u0027device_id\u0027: router.id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_00db554d","line":267,"in_reply_to":"9f560f44_75d5b6e5","updated":"2020-10-13 09:45:35.000000000","message":"Ack.\nIMHO preventing deletion is good thing, hiding the port is bad.\nI want to let my customers knows that an IP is taken in his pool.","commit_id":"06391f55ed8595db679a2d29c429433dc9f9e56a"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"116f38bb1cc96d0f5c02ed0c7aa03d4a350a2068","unresolved":false,"context_lines":[{"line_number":264,"context_line":"    def _add_csnat_router_interface_port("},{"line_number":265,"context_line":"            self, context, router, network_id, subnets, do_pop\u003dTrue):"},{"line_number":266,"context_line":"        \"\"\"Add SNAT interface to the specified router and subnet.\"\"\""},{"line_number":267,"context_line":"        port_data \u003d {\u0027tenant_id\u0027: router.tenant_id,"},{"line_number":268,"context_line":"                     \u0027network_id\u0027: network_id,"},{"line_number":269,"context_line":"                     \u0027fixed_ips\u0027: subnets,"},{"line_number":270,"context_line":"                     \u0027device_id\u0027: router.id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_2a1bdd1b","line":267,"in_reply_to":"9f560f44_e2f8f34a","updated":"2020-10-12 22:32:57.000000000","message":"I dont understand this reason. Do you know why we specifically set that?\nEven if this was copied, why is it different on network:router_centralized_snat VS network:router_interface_distributed?\n\nAnd no, we cant delete the port without admin privs:\n\nFailed to delete port with name or ID \u00273258ebd9-2be4-4cf9-a110-c619906708ec\u0027: ConflictException: 409: Client Error for url: http://51.89.5.207:9696/v2.0/ports/3258ebd9-2be4-4cf9-a110-c619906708ec, Port 3258ebd9-2be4-4cf9-a110-c619906708ec cannot be deleted directly via the port API: has device owner network:router_centralized_snat.\n1 of 1 ports failed to delete.","commit_id":"06391f55ed8595db679a2d29c429433dc9f9e56a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c01513a8b035ccb0b3a580fdfcef961641b77d5f","unresolved":true,"context_lines":[{"line_number":267,"context_line":"    def _add_csnat_router_interface_port("},{"line_number":268,"context_line":"            self, context, router, network_id, subnets, do_pop\u003dTrue):"},{"line_number":269,"context_line":"        \"\"\"Add SNAT interface to the specified router and subnet.\"\"\""},{"line_number":270,"context_line":"        port_data \u003d {\u0027tenant_id\u0027: router.tenant_id,"},{"line_number":271,"context_line":"                     \u0027network_id\u0027: network_id,"},{"line_number":272,"context_line":"                     \u0027fixed_ips\u0027: subnets,"},{"line_number":273,"context_line":"                     \u0027device_id\u0027: router.id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"43310904_f4eea43f","line":270,"updated":"2021-09-23 13:00:34.000000000","message":"but why this port belongs to the owner of router, and not owner of network? Shouldn\u0027t it maybe be opposite?","commit_id":"a857d6a103edb978d0cc35d14b1d4dd9652a7a12"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"f025e027642bd03e19500c358612bf6830961f2b","unresolved":true,"context_lines":[{"line_number":267,"context_line":"    def _add_csnat_router_interface_port("},{"line_number":268,"context_line":"            self, context, router, network_id, subnets, do_pop\u003dTrue):"},{"line_number":269,"context_line":"        \"\"\"Add SNAT interface to the specified router and subnet.\"\"\""},{"line_number":270,"context_line":"        port_data \u003d {\u0027tenant_id\u0027: router.tenant_id,"},{"line_number":271,"context_line":"                     \u0027network_id\u0027: network_id,"},{"line_number":272,"context_line":"                     \u0027fixed_ips\u0027: subnets,"},{"line_number":273,"context_line":"                     \u0027device_id\u0027: router.id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"544e8045_81f5fa89","line":270,"in_reply_to":"43310904_f4eea43f","updated":"2021-09-27 07:51:56.000000000","message":"I dont know, I wanted to do the same as for DEVICE_OWNER_DVR_INTERFACE, so if you think the tenant should be the network one, then I can change.\nThe thing is that I dont know how to get the network tenant_id...","commit_id":"a857d6a103edb978d0cc35d14b1d4dd9652a7a12"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5fcf75c0a616168b62ffc96d0ed62ed4ad7b62a0","unresolved":true,"context_lines":[{"line_number":267,"context_line":"    def _add_csnat_router_interface_port("},{"line_number":268,"context_line":"            self, context, router, network_id, subnets, do_pop\u003dTrue):"},{"line_number":269,"context_line":"        \"\"\"Add SNAT interface to the specified router and subnet.\"\"\""},{"line_number":270,"context_line":"        port_data \u003d {\u0027tenant_id\u0027: router.tenant_id,"},{"line_number":271,"context_line":"                     \u0027network_id\u0027: network_id,"},{"line_number":272,"context_line":"                     \u0027fixed_ips\u0027: subnets,"},{"line_number":273,"context_line":"                     \u0027device_id\u0027: router.id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"573f4738_948c37ea","line":270,"in_reply_to":"544e8045_81f5fa89","updated":"2022-07-12 15:57:52.000000000","message":"In this case, I would leave this port as is now, without assigning a project_id, same as we do for FIP ports (\"_create_floatingip\") and FIP agent GW ports (\"create_fip_agent_gw_port_if_not_exists\"). Or similar to HA subnet (\"_create_ha_subnet\"), HA network (\"_create_ha_network\") or HA port (\"add_ha_port\")\n\nActually I would revert [1] to keep all auxiliary ports outside any project. Those ports (or resources) are automatically created or deleted by the system, not the user. Those resources could be listed by non-admin users but not handled (delete).\n\n[1]https://review.opendev.org/c/openstack/neutron/+/446878","commit_id":"a857d6a103edb978d0cc35d14b1d4dd9652a7a12"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"b164facd94c22db4bef5bc94f652799c579ebb22","unresolved":true,"context_lines":[{"line_number":267,"context_line":"    def _add_csnat_router_interface_port("},{"line_number":268,"context_line":"            self, context, router, network_id, subnets, do_pop\u003dTrue):"},{"line_number":269,"context_line":"        \"\"\"Add SNAT interface to the specified router and subnet.\"\"\""},{"line_number":270,"context_line":"        port_data \u003d {\u0027tenant_id\u0027: router.tenant_id,"},{"line_number":271,"context_line":"                     \u0027network_id\u0027: network_id,"},{"line_number":272,"context_line":"                     \u0027fixed_ips\u0027: subnets,"},{"line_number":273,"context_line":"                     \u0027device_id\u0027: router.id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"50f69482_50b17fad","line":270,"in_reply_to":"573f4738_948c37ea","updated":"2022-08-05 12:50:58.000000000","message":"The difference with FIP agent gateways and others you mention is that this port is taken from the subnet allowed address pool, just like a DHCP agent port.\n\nMoreover, we are relying on the project_id to monitor the ports assigned to a specific customer, ports without any project_id are really hard to identify.","commit_id":"a857d6a103edb978d0cc35d14b1d4dd9652a7a12"}]}
