)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"068e2ef467bbc3052e76fff1acf9de2fe5b4aaa3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"2d90de3f_b1a78a4b","updated":"2025-09-19 14:42:10.000000000","message":"Just two grammar nits, otherwise looks good","commit_id":"f42aff9ce83ac815100dc42837be5558bf49ac88"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a7ed1a52af79a26b50f71d5a4a6f4764f4df2878","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"87fcb847_01237778","updated":"2025-09-22 12:08:10.000000000","message":"Currently we have \u0027enable_snat\u0027 as parameter of the external_gateway_info. What is the relation between this existing option and that new one? Do we want to keep 2 parameters forever or is there any plan for the future what to do with both of them?","commit_id":"d98edd3e05a44e071ddb78b6fd54d35f7a64d7c3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d2d338408713e31b25ec8907c774913ca36ca2f9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"4c45b632_2df18d8f","in_reply_to":"87fcb847_01237778","updated":"2025-09-22 14:41:45.000000000","message":"Yes, the parameter belongs to the GW API and can be set only using this API. But this parameter, that is unique per router (not per GW) is stored in the router table. That means the GWs read the value from router.enable_snat.\n\nAlso the documentation adds a note [1] about setting several \"enable_snat\" values in a single PUT command. The Neutron code will retrieve the first of the list and update it [2].\n\n[1]https://review.opendev.org/c/openstack/neutron-lib/+/870887/20/api-ref/source/v2/routers.inc#933\n[2]https://github.com/openstack/neutron/blob/10b0973551e8a0d74a34288d49cb786e2f9ab1ab/neutron/db/l3_extra_gws_db.py#L125","commit_id":"d98edd3e05a44e071ddb78b6fd54d35f7a64d7c3"}],"api-ref/source/v2/routers.inc":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"068e2ef467bbc3052e76fff1acf9de2fe5b4aaa3","unresolved":true,"context_lines":[{"line_number":164,"context_line":"Router exposes the \"enable_snat\" flag extension (``router-enable-snat``)"},{"line_number":165,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"The ``router-enable-snat`` extension allows to expose, via API, the router"},{"line_number":168,"context_line":"property flag \"enable_snat\". This flag can be set during the router creation"},{"line_number":169,"context_line":"but can be modified only using the external gateway API commands."},{"line_number":170,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":2,"id":"e0d3f9b3_79fd9f12","line":167,"range":{"start_line":167,"start_character":27,"end_line":167,"end_character":62},"updated":"2025-09-19 14:42:10.000000000","message":"nit: s/extension exposes, via the API,","commit_id":"f42aff9ce83ac815100dc42837be5558bf49ac88"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"cf8a4aed4174c46ea1eb1df7401f36076e54c998","unresolved":false,"context_lines":[{"line_number":164,"context_line":"Router exposes the \"enable_snat\" flag extension (``router-enable-snat``)"},{"line_number":165,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"The ``router-enable-snat`` extension allows to expose, via API, the router"},{"line_number":168,"context_line":"property flag \"enable_snat\". This flag can be set during the router creation"},{"line_number":169,"context_line":"but can be modified only using the external gateway API commands."},{"line_number":170,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":2,"id":"25a80867_8b523394","line":167,"range":{"start_line":167,"start_character":27,"end_line":167,"end_character":62},"in_reply_to":"e0d3f9b3_79fd9f12","updated":"2025-09-22 08:19:32.000000000","message":"Done","commit_id":"f42aff9ce83ac815100dc42837be5558bf49ac88"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"068e2ef467bbc3052e76fff1acf9de2fe5b4aaa3","unresolved":true,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"The ``router-enable-snat`` extension allows to expose, via API, the router"},{"line_number":168,"context_line":"property flag \"enable_snat\". This flag can be set during the router creation"},{"line_number":169,"context_line":"but can be modified only using the external gateway API commands."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"List routers"},{"line_number":172,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"1f306828_4a3729d7","line":169,"range":{"start_line":169,"start_character":4,"end_line":169,"end_character":24},"updated":"2025-09-19 14:42:10.000000000","message":"s/can only be modified","commit_id":"f42aff9ce83ac815100dc42837be5558bf49ac88"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"cf8a4aed4174c46ea1eb1df7401f36076e54c998","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"The ``router-enable-snat`` extension allows to expose, via API, the router"},{"line_number":168,"context_line":"property flag \"enable_snat\". This flag can be set during the router creation"},{"line_number":169,"context_line":"but can be modified only using the external gateway API commands."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"List routers"},{"line_number":172,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-c++src","patch_set":2,"id":"9e7db8fb_caf20656","line":169,"range":{"start_line":169,"start_character":4,"end_line":169,"end_character":24},"in_reply_to":"1f306828_4a3729d7","updated":"2025-09-22 08:19:32.000000000","message":"Done","commit_id":"f42aff9ce83ac815100dc42837be5558bf49ac88"}],"neutron_lib/api/definitions/router_enable_snat.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a7ed1a52af79a26b50f71d5a4a6f4764f4df2878","unresolved":true,"context_lines":[{"line_number":29,"context_line":"COLLECTION_NAME \u003d l3.ROUTERS"},{"line_number":30,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":31,"context_line":"    COLLECTION_NAME: {"},{"line_number":32,"context_line":"        ENABLE_SNAT: {\u0027allow_post\u0027: True,"},{"line_number":33,"context_line":"                      \u0027allow_put\u0027: False,"},{"line_number":34,"context_line":"                      \u0027default\u0027: True,"},{"line_number":35,"context_line":"                      \u0027convert_to\u0027: converters.convert_to_boolean,"}],"source_content_type":"text/x-python","patch_set":3,"id":"f3164856_ee71b484","line":32,"updated":"2025-09-22 12:08:10.000000000","message":"on IRC you said that this is \"read only for the router object\" but here you are proposing to allow sending it in POST so during creation of the router. Which statement is correct then?","commit_id":"d98edd3e05a44e071ddb78b6fd54d35f7a64d7c3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"63d4e841b4ee664d11c5fa65a175432569d0cb0f","unresolved":false,"context_lines":[{"line_number":29,"context_line":"COLLECTION_NAME \u003d l3.ROUTERS"},{"line_number":30,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":31,"context_line":"    COLLECTION_NAME: {"},{"line_number":32,"context_line":"        ENABLE_SNAT: {\u0027allow_post\u0027: True,"},{"line_number":33,"context_line":"                      \u0027allow_put\u0027: False,"},{"line_number":34,"context_line":"                      \u0027default\u0027: True,"},{"line_number":35,"context_line":"                      \u0027convert_to\u0027: converters.convert_to_boolean,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fbb8ff59_fa305654","line":32,"in_reply_to":"80d2bd77_83e7e706","updated":"2025-09-22 14:49:32.000000000","message":"My bad: the command first creates the router and then issues a `update_external_gateways` command [1]. This parameter is read-only from the router point of view API.\n\n[1]https://paste.opendev.org/show/bkfvYyFZ1zcCq31X0CKU/","commit_id":"d98edd3e05a44e071ddb78b6fd54d35f7a64d7c3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d2d338408713e31b25ec8907c774913ca36ca2f9","unresolved":false,"context_lines":[{"line_number":29,"context_line":"COLLECTION_NAME \u003d l3.ROUTERS"},{"line_number":30,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":31,"context_line":"    COLLECTION_NAME: {"},{"line_number":32,"context_line":"        ENABLE_SNAT: {\u0027allow_post\u0027: True,"},{"line_number":33,"context_line":"                      \u0027allow_put\u0027: False,"},{"line_number":34,"context_line":"                      \u0027default\u0027: True,"},{"line_number":35,"context_line":"                      \u0027convert_to\u0027: converters.convert_to_boolean,"}],"source_content_type":"text/x-python","patch_set":3,"id":"80d2bd77_83e7e706","line":32,"in_reply_to":"f3164856_ee71b484","updated":"2025-09-22 14:41:45.000000000","message":"Right. This is possible right now: you can create a router passing a GW information + the enable_snat flag (associated to this GW). But it still belongs to the GW API and not to the base router API. I need to remove that.","commit_id":"d98edd3e05a44e071ddb78b6fd54d35f7a64d7c3"}]}
