)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"20baf335575f27249c81d819a681349b58754673","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"eed9a71e_0553d070","updated":"2023-08-24 07:00:21.000000000","message":"Could you please rebase it?","commit_id":"b18c78d5f28382931c7d9b27de2aaf8aeb31efae"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"47b91665ef27e269b5427107199e7c21c1309ebf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"4d93b53c_974c72b2","updated":"2024-01-17 19:25:46.000000000","message":"Just wanted to get a review in well before all the neutron code merges.","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"351f8046c9b981418707fe50053da3b3c19c0a67","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"1f7d14b4_a4479b41","updated":"2024-02-27 20:05:45.000000000","message":"I wouldn\u0027t hold this over a typo, just +1 until the neutron code merges","commit_id":"4c1c7d819317f8620cdb5197d34f76e95f55a588"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"503824462e213a2dbdc0a49836fed4004a8aa094","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"bf9c7bec_000076c9","updated":"2024-02-28 16:51:08.000000000","message":"+1 until neutron code merges","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"9e56373f7df508c74b9f7706befbdbcde7318527","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"7d34f429_26ca194e","updated":"2024-02-29 12:29:16.000000000","message":"As I see the SDK patch was released in 3.0.0","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"246345ce8864d61af1ab7eb8fb0aad47974975f9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"25f25089_43183b94","updated":"2024-02-29 12:25:26.000000000","message":"Do we have to wait for some Neutron change to be merged first? As I see all relevant patches are already merged","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8f0971dc29bfdb4c7ac78e2c41017d95953cd8fd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1f1459d1_56fa5e21","updated":"2024-03-01 16:06:41.000000000","message":"Soft -1 due to a question around a potential bug/optimisation opportunity. I think my comment about splitting this into two patches would be good if you do need to respin this, but I wouldn\u0027t bother otherwise.","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"d9e77845f5a1ebb6e276a78ccfbf82791b3ba46b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"b825b273_308d3972","updated":"2024-03-05 15:15:38.000000000","message":"Thank you for taking the time to review, @stephenfin, new patch series on its way.","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c7532ec6668490f9afb557eedd36b4337f9dca00","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"ce9cd6dc_0f1481ce","updated":"2024-02-29 15:01:27.000000000","message":"True Lajos, this can merge","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"a79674ba3f75811628e9ba375f59f947ac86373e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"fa3c1503_534e21a8","updated":"2024-03-07 16:22:43.000000000","message":"@stephenfin I\u0027d love it if you weighed in with your opinion on the updated series","commit_id":"16c695045c5618a733574fd2a5558d672a2df553"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"c0e057aa2d437de516160b75013ecaa3c83a011d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"e740e6bd_3d980376","updated":"2024-03-26 12:44:53.000000000","message":"The relevant SDK patch was release in 3.0.0: https://review.opendev.org/c/openstack/openstacksdk/+/887952","commit_id":"16c695045c5618a733574fd2a5558d672a2df553"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bc874c74111070937385d38e5ea381a81cd5c265","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"0beca3a6_d43a1790","updated":"2024-04-05 14:27:01.000000000","message":"Would still have preferred this split up, but the 9..10 diff isn\u0027t too big so we can move on as-is","commit_id":"16c695045c5618a733574fd2a5558d672a2df553"}],"openstackclient/network/v2/router.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"42ca8699dc7cf137b3b7690fc99e7b661643b194","unresolved":true,"context_lines":[{"line_number":908,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"},{"line_number":909,"context_line":"            optional_keys\u003d[\u0027subnet\u0027, \u0027ip-address\u0027, \u0027network\u0027, \u0027index\u0027],"},{"line_number":910,"context_line":"            help\u003d_("},{"line_number":911,"context_line":"                \"Desired IP and/or subnet (name or ID) on external gateway: \""},{"line_number":912,"context_line":"                \"subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e,network\u003d\u003cnetwork\u003e,\""},{"line_number":913,"context_line":"                \"index\u003d\u003cindex\u003e (repeat this option to set multiple fixed IP\""},{"line_number":914,"context_line":"                \" addresses. When using multiple gateways, specifying a\""},{"line_number":915,"context_line":"                \" network name or id is mandatory. An index may optionally\""},{"line_number":916,"context_line":"                \" be used to differentiate between fixed IP assignments for\""},{"line_number":917,"context_line":"                \" different gateway ports added to the same network. Indexing\""},{"line_number":918,"context_line":"                \" has per-network significance. If not specified, an index \""},{"line_number":919,"context_line":"                \" is assumed to be equal to 0).\""},{"line_number":920,"context_line":"            ),"},{"line_number":921,"context_line":"        )"},{"line_number":922,"context_line":"        snat_group \u003d parser.add_mutually_exclusive_group()"}],"source_content_type":"text/x-python","patch_set":3,"id":"84d8be0f_239e143e","line":919,"range":{"start_line":911,"start_character":0,"end_line":919,"end_character":47},"updated":"2023-08-24 11:37:18.000000000","message":"Perhaps I misunderstand something but I miss the enable_default_route_bfd \u0026 enable_default_route_ecmp, see:\nhttps://docs.openstack.org/api-ref/network/v2/index.html?expanded\u003dupdate-router-detail#id231","commit_id":"b18c78d5f28382931c7d9b27de2aaf8aeb31efae"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"67180e2036f2d87636e55dcc6a4600cc848492f4","unresolved":false,"context_lines":[{"line_number":908,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"},{"line_number":909,"context_line":"            optional_keys\u003d[\u0027subnet\u0027, \u0027ip-address\u0027, \u0027network\u0027, \u0027index\u0027],"},{"line_number":910,"context_line":"            help\u003d_("},{"line_number":911,"context_line":"                \"Desired IP and/or subnet (name or ID) on external gateway: \""},{"line_number":912,"context_line":"                \"subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e,network\u003d\u003cnetwork\u003e,\""},{"line_number":913,"context_line":"                \"index\u003d\u003cindex\u003e (repeat this option to set multiple fixed IP\""},{"line_number":914,"context_line":"                \" addresses. When using multiple gateways, specifying a\""},{"line_number":915,"context_line":"                \" network name or id is mandatory. An index may optionally\""},{"line_number":916,"context_line":"                \" be used to differentiate between fixed IP assignments for\""},{"line_number":917,"context_line":"                \" different gateway ports added to the same network. Indexing\""},{"line_number":918,"context_line":"                \" has per-network significance. If not specified, an index \""},{"line_number":919,"context_line":"                \" is assumed to be equal to 0).\""},{"line_number":920,"context_line":"            ),"},{"line_number":921,"context_line":"        )"},{"line_number":922,"context_line":"        snat_group \u003d parser.add_mutually_exclusive_group()"}],"source_content_type":"text/x-python","patch_set":3,"id":"2a0bcd57_d8c8c313","line":919,"range":{"start_line":911,"start_character":0,"end_line":919,"end_character":47},"in_reply_to":"84d8be0f_239e143e","updated":"2023-10-25 21:46:30.000000000","message":"Indeed, I\u0027ll make this change into a series and add that in the next commit.","commit_id":"b18c78d5f28382931c7d9b27de2aaf8aeb31efae"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"42ca8699dc7cf137b3b7690fc99e7b661643b194","unresolved":true,"context_lines":[{"line_number":1232,"context_line":"                obj,"},{"line_number":1233,"context_line":"                body\u003d{\u0027router\u0027: {\u0027external_gateways\u0027: external_gateways}},"},{"line_number":1234,"context_line":"            )"},{"line_number":1235,"context_line":""},{"line_number":1236,"context_line":""},{"line_number":1237,"context_line":"class RemoveGatewayFromRouter(command.ShowOne):"},{"line_number":1238,"context_line":"    _description \u003d _(\"Remove router gateway\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"9b5ff056_4a88e6eb","line":1235,"updated":"2023-08-24 11:37:18.000000000","message":"somewhere here I got an exception:\n$ openstack router add gateway router1 foo --debug\n....\ncannot unpack non-iterable NoneType object\nTraceback (most recent call last):\n  File \"/usr/local/lib/python3.10/dist-packages/cliff/app.py\", line 410, in run_subcommand\n    result \u003d cmd.run(parsed_args)\n  File \"/usr/local/lib/python3.10/dist-packages/osc_lib/command/command.py\", line 39, in run\n    return super(Command, self).run(parsed_args)\n  File \"/usr/local/lib/python3.10/dist-packages/cliff/display.py\", line 117, in run\n    column_names, data \u003d self.take_action(parsed_args)\nTypeError: cannot unpack non-iterable NoneType object\nclean_up AddGatewayToRouter: cannot unpack non-iterable NoneType object\nEND return value: 1","commit_id":"b18c78d5f28382931c7d9b27de2aaf8aeb31efae"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"67180e2036f2d87636e55dcc6a4600cc848492f4","unresolved":false,"context_lines":[{"line_number":1232,"context_line":"                obj,"},{"line_number":1233,"context_line":"                body\u003d{\u0027router\u0027: {\u0027external_gateways\u0027: external_gateways}},"},{"line_number":1234,"context_line":"            )"},{"line_number":1235,"context_line":""},{"line_number":1236,"context_line":""},{"line_number":1237,"context_line":"class RemoveGatewayFromRouter(command.ShowOne):"},{"line_number":1238,"context_line":"    _description \u003d _(\"Remove router gateway\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"0fc4510b_d95fc941","line":1235,"in_reply_to":"9b5ff056_4a88e6eb","updated":"2023-10-25 21:46:30.000000000","message":"Yes, this was very unfortunate, and this was clearly not tested farther than unit tests (of all the variants of testing you can do, unit tests has the least value IMHO, and this is an example of that).\n\nThe reason for the server side error is that the client actually posts `body` as part of the body in the request.\n\nI\u0027ll update this patch and the SDK counterpart so that it posts the expected data. Some additional validation on the server side is probably also in order.","commit_id":"b18c78d5f28382931c7d9b27de2aaf8aeb31efae"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"47b91665ef27e269b5427107199e7c21c1309ebf","unresolved":true,"context_lines":[{"line_number":180,"context_line":"                        raise exceptions.CommandError(msg)"},{"line_number":181,"context_line":"                    elif gw_index \u003c 0:"},{"line_number":182,"context_line":"                        raise exceptions.CommandError("},{"line_number":183,"context_line":"                            \u0027Gateway Indexes must be non-negative values\u0027"},{"line_number":184,"context_line":"                        )"},{"line_number":185,"context_line":"                if ip_spec.get(\u0027subnet\u0027, False):"},{"line_number":186,"context_line":"                    subnet_name_id \u003d ip_spec.pop(\u0027subnet\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"e3f79f56_8370f5b4","line":183,"range":{"start_line":183,"start_character":37,"end_line":183,"end_character":44},"updated":"2024-01-17 19:25:46.000000000","message":"nit: s/indexes","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"5101a39d63e36f505c7101a125287a2aa784b869","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                        raise exceptions.CommandError(msg)"},{"line_number":181,"context_line":"                    elif gw_index \u003c 0:"},{"line_number":182,"context_line":"                        raise exceptions.CommandError("},{"line_number":183,"context_line":"                            \u0027Gateway Indexes must be non-negative values\u0027"},{"line_number":184,"context_line":"                        )"},{"line_number":185,"context_line":"                if ip_spec.get(\u0027subnet\u0027, False):"},{"line_number":186,"context_line":"                    subnet_name_id \u003d ip_spec.pop(\u0027subnet\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a38fecb_a8483513","line":183,"range":{"start_line":183,"start_character":37,"end_line":183,"end_character":44},"in_reply_to":"e3f79f56_8370f5b4","updated":"2024-01-31 20:16:19.000000000","message":"Done","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"47b91665ef27e269b5427107199e7c21c1309ebf","unresolved":true,"context_lines":[{"line_number":484,"context_line":"                \"subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e,network\u003d\u003cnetwork\u003e, \""},{"line_number":485,"context_line":"                \"index\u003d\u003cindex\u003e (repeat this option to set multiple fixed IP \""},{"line_number":486,"context_line":"                \"addresses. When using multiple gateways, specifying a \""},{"line_number":487,"context_line":"                \"network name or id is mandatory. An index may optionally \""},{"line_number":488,"context_line":"                \"be used to differentiate between fixed IP assignments for \""},{"line_number":489,"context_line":"                \"different gateway ports added to the same network. Indexing \""},{"line_number":490,"context_line":"                \"has per-network significance. If not specified, an index \""}],"source_content_type":"text/x-python","patch_set":6,"id":"68244469_e0949c8e","line":487,"range":{"start_line":487,"start_character":33,"end_line":487,"end_character":35},"updated":"2024-01-17 19:25:46.000000000","message":"nit: s/ID","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"5101a39d63e36f505c7101a125287a2aa784b869","unresolved":false,"context_lines":[{"line_number":484,"context_line":"                \"subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e,network\u003d\u003cnetwork\u003e, \""},{"line_number":485,"context_line":"                \"index\u003d\u003cindex\u003e (repeat this option to set multiple fixed IP \""},{"line_number":486,"context_line":"                \"addresses. When using multiple gateways, specifying a \""},{"line_number":487,"context_line":"                \"network name or id is mandatory. An index may optionally \""},{"line_number":488,"context_line":"                \"be used to differentiate between fixed IP assignments for \""},{"line_number":489,"context_line":"                \"different gateway ports added to the same network. Indexing \""},{"line_number":490,"context_line":"                \"has per-network significance. If not specified, an index \""}],"source_content_type":"text/x-python","patch_set":6,"id":"69da7c42_4e7fe8c5","line":487,"range":{"start_line":487,"start_character":33,"end_line":487,"end_character":35},"in_reply_to":"68244469_e0949c8e","updated":"2024-01-31 20:16:19.000000000","message":"Done","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"47b91665ef27e269b5427107199e7c21c1309ebf","unresolved":true,"context_lines":[{"line_number":488,"context_line":"                \"be used to differentiate between fixed IP assignments for \""},{"line_number":489,"context_line":"                \"different gateway ports added to the same network. Indexing \""},{"line_number":490,"context_line":"                \"has per-network significance. If not specified, an index \""},{"line_number":491,"context_line":"                \" is assumed to be equal to 0).\""},{"line_number":492,"context_line":"            ),"},{"line_number":493,"context_line":"        )"},{"line_number":494,"context_line":"        snat_group \u003d parser.add_mutually_exclusive_group()"}],"source_content_type":"text/x-python","patch_set":6,"id":"8fd5659e_af58abc7","line":491,"range":{"start_line":491,"start_character":17,"end_line":491,"end_character":18},"updated":"2024-01-17 19:25:46.000000000","message":"nit: extra blank space","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"5101a39d63e36f505c7101a125287a2aa784b869","unresolved":false,"context_lines":[{"line_number":488,"context_line":"                \"be used to differentiate between fixed IP assignments for \""},{"line_number":489,"context_line":"                \"different gateway ports added to the same network. Indexing \""},{"line_number":490,"context_line":"                \"has per-network significance. If not specified, an index \""},{"line_number":491,"context_line":"                \" is assumed to be equal to 0).\""},{"line_number":492,"context_line":"            ),"},{"line_number":493,"context_line":"        )"},{"line_number":494,"context_line":"        snat_group \u003d parser.add_mutually_exclusive_group()"}],"source_content_type":"text/x-python","patch_set":6,"id":"c8be6332_8c7f1f5e","line":491,"range":{"start_line":491,"start_character":17,"end_line":491,"end_character":18},"in_reply_to":"8fd5659e_af58abc7","updated":"2024-01-31 20:16:19.000000000","message":"Done","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"47b91665ef27e269b5427107199e7c21c1309ebf","unresolved":true,"context_lines":[{"line_number":907,"context_line":"            action\u003d\u0027append\u0027,"},{"line_number":908,"context_line":"            help\u003d_("},{"line_number":909,"context_line":"                \"External Network used as router\u0027s gateway (name or ID). \""},{"line_number":910,"context_line":"                \" (repeat this option to set multiple gateways per router\""},{"line_number":911,"context_line":"                \" if the L3 service plugin in use supports it).\""},{"line_number":912,"context_line":"            ),"},{"line_number":913,"context_line":"            dest\u003d\u0027external_gateways\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f1c74b0_534c68a9","line":910,"range":{"start_line":910,"start_character":17,"end_line":910,"end_character":18},"updated":"2024-01-17 19:25:46.000000000","message":"nit: extra blank space\n\nAnd I\u0027ll just mention that most of the help text in this file puts the blank spaces at the end of line, but here and some places below in this change it\u0027s at the front. Should make it consistent.","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"5101a39d63e36f505c7101a125287a2aa784b869","unresolved":false,"context_lines":[{"line_number":907,"context_line":"            action\u003d\u0027append\u0027,"},{"line_number":908,"context_line":"            help\u003d_("},{"line_number":909,"context_line":"                \"External Network used as router\u0027s gateway (name or ID). \""},{"line_number":910,"context_line":"                \" (repeat this option to set multiple gateways per router\""},{"line_number":911,"context_line":"                \" if the L3 service plugin in use supports it).\""},{"line_number":912,"context_line":"            ),"},{"line_number":913,"context_line":"            dest\u003d\u0027external_gateways\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fbfb593_635c42df","line":910,"range":{"start_line":910,"start_character":17,"end_line":910,"end_character":18},"in_reply_to":"1f1c74b0_534c68a9","updated":"2024-01-31 20:16:19.000000000","message":"Done","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"47b91665ef27e269b5427107199e7c21c1309ebf","unresolved":true,"context_lines":[{"line_number":923,"context_line":"                \"subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e,network\u003d\u003cnetwork\u003e,\""},{"line_number":924,"context_line":"                \"index\u003d\u003cindex\u003e (repeat this option to set multiple fixed IP\""},{"line_number":925,"context_line":"                \" addresses. When using multiple gateways, specifying a\""},{"line_number":926,"context_line":"                \" network name or id is mandatory. An index may optionally\""},{"line_number":927,"context_line":"                \" be used to differentiate between fixed IP assignments for\""},{"line_number":928,"context_line":"                \" different gateway ports added to the same network. Indexing\""},{"line_number":929,"context_line":"                \" has per-network significance. If not specified, an index \""}],"source_content_type":"text/x-python","patch_set":6,"id":"203592d2_c37c1219","line":926,"range":{"start_line":926,"start_character":34,"end_line":926,"end_character":36},"updated":"2024-01-17 19:25:46.000000000","message":"s/ID","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"5101a39d63e36f505c7101a125287a2aa784b869","unresolved":false,"context_lines":[{"line_number":923,"context_line":"                \"subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e,network\u003d\u003cnetwork\u003e,\""},{"line_number":924,"context_line":"                \"index\u003d\u003cindex\u003e (repeat this option to set multiple fixed IP\""},{"line_number":925,"context_line":"                \" addresses. When using multiple gateways, specifying a\""},{"line_number":926,"context_line":"                \" network name or id is mandatory. An index may optionally\""},{"line_number":927,"context_line":"                \" be used to differentiate between fixed IP assignments for\""},{"line_number":928,"context_line":"                \" different gateway ports added to the same network. Indexing\""},{"line_number":929,"context_line":"                \" has per-network significance. If not specified, an index \""}],"source_content_type":"text/x-python","patch_set":6,"id":"ab0c8d89_232e668c","line":926,"range":{"start_line":926,"start_character":34,"end_line":926,"end_character":36},"in_reply_to":"203592d2_c37c1219","updated":"2024-01-31 20:16:19.000000000","message":"Done","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"47b91665ef27e269b5427107199e7c21c1309ebf","unresolved":true,"context_lines":[{"line_number":927,"context_line":"                \" be used to differentiate between fixed IP assignments for\""},{"line_number":928,"context_line":"                \" different gateway ports added to the same network. Indexing\""},{"line_number":929,"context_line":"                \" has per-network significance. If not specified, an index \""},{"line_number":930,"context_line":"                \" is assumed to be equal to 0).\""},{"line_number":931,"context_line":"            ),"},{"line_number":932,"context_line":"        )"},{"line_number":933,"context_line":"        snat_group \u003d parser.add_mutually_exclusive_group()"}],"source_content_type":"text/x-python","patch_set":6,"id":"0fa04726_4b1d87dc","line":930,"range":{"start_line":930,"start_character":17,"end_line":930,"end_character":18},"updated":"2024-01-17 19:25:46.000000000","message":"nit: extra blank space","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"5101a39d63e36f505c7101a125287a2aa784b869","unresolved":false,"context_lines":[{"line_number":927,"context_line":"                \" be used to differentiate between fixed IP assignments for\""},{"line_number":928,"context_line":"                \" different gateway ports added to the same network. Indexing\""},{"line_number":929,"context_line":"                \" has per-network significance. If not specified, an index \""},{"line_number":930,"context_line":"                \" is assumed to be equal to 0).\""},{"line_number":931,"context_line":"            ),"},{"line_number":932,"context_line":"        )"},{"line_number":933,"context_line":"        snat_group \u003d parser.add_mutually_exclusive_group()"}],"source_content_type":"text/x-python","patch_set":6,"id":"d17d8fbe_eb07e2c9","line":930,"range":{"start_line":930,"start_character":17,"end_line":930,"end_character":18},"in_reply_to":"0fa04726_4b1d87dc","updated":"2024-01-31 20:16:19.000000000","message":"Done","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"47b91665ef27e269b5427107199e7c21c1309ebf","unresolved":true,"context_lines":[{"line_number":1212,"context_line":"            metavar\u003d\u0027subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e,\u0027"},{"line_number":1213,"context_line":"            \u0027network\u003d\u003cnetwork\u003e\u0027,"},{"line_number":1214,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"},{"line_number":1215,"context_line":"            optional_keys\u003d[\u0027subnet\u0027, \u0027ip-address\u0027],"},{"line_number":1216,"context_line":"            help\u003d_("},{"line_number":1217,"context_line":"                \"Desired IP and/or subnet (name or ID) on external gateway: \""},{"line_number":1218,"context_line":"                \"subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e\""}],"source_content_type":"text/x-python","patch_set":6,"id":"cc9ec6b7_608abf38","line":1215,"updated":"2024-01-17 19:25:46.000000000","message":"Looks like this is missing \u0027network\u0027 as is the help text below","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"5101a39d63e36f505c7101a125287a2aa784b869","unresolved":false,"context_lines":[{"line_number":1212,"context_line":"            metavar\u003d\u0027subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e,\u0027"},{"line_number":1213,"context_line":"            \u0027network\u003d\u003cnetwork\u003e\u0027,"},{"line_number":1214,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"},{"line_number":1215,"context_line":"            optional_keys\u003d[\u0027subnet\u0027, \u0027ip-address\u0027],"},{"line_number":1216,"context_line":"            help\u003d_("},{"line_number":1217,"context_line":"                \"Desired IP and/or subnet (name or ID) on external gateway: \""},{"line_number":1218,"context_line":"                \"subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e\""}],"source_content_type":"text/x-python","patch_set":6,"id":"38f473a5_0a385fd7","line":1215,"in_reply_to":"cc9ec6b7_608abf38","updated":"2024-01-31 20:16:19.000000000","message":"Done","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"47b91665ef27e269b5427107199e7c21c1309ebf","unresolved":true,"context_lines":[{"line_number":1266,"context_line":"        parser.add_argument("},{"line_number":1267,"context_line":"            metavar\u003d\"\u003cnetwork\u003e\","},{"line_number":1268,"context_line":"            help\u003d_("},{"line_number":1269,"context_line":"                \"External Network to a attach a router gateway to (name or \""},{"line_number":1270,"context_line":"                \"ID).\""},{"line_number":1271,"context_line":"            ),"},{"line_number":1272,"context_line":"            dest\u003d\u0027external_gateways\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"58aa6f72_acf6e91f","line":1269,"range":{"start_line":1269,"start_character":37,"end_line":1269,"end_character":65},"updated":"2024-01-17 19:25:46.000000000","message":"s/to remove a router gateway from","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"5101a39d63e36f505c7101a125287a2aa784b869","unresolved":false,"context_lines":[{"line_number":1266,"context_line":"        parser.add_argument("},{"line_number":1267,"context_line":"            metavar\u003d\"\u003cnetwork\u003e\","},{"line_number":1268,"context_line":"            help\u003d_("},{"line_number":1269,"context_line":"                \"External Network to a attach a router gateway to (name or \""},{"line_number":1270,"context_line":"                \"ID).\""},{"line_number":1271,"context_line":"            ),"},{"line_number":1272,"context_line":"            dest\u003d\u0027external_gateways\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9611e188_f1f4fa5b","line":1269,"range":{"start_line":1269,"start_character":37,"end_line":1269,"end_character":65},"in_reply_to":"58aa6f72_acf6e91f","updated":"2024-01-31 20:16:19.000000000","message":"Done","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"47b91665ef27e269b5427107199e7c21c1309ebf","unresolved":true,"context_lines":[{"line_number":1276,"context_line":"        )"},{"line_number":1277,"context_line":"        parser.add_argument("},{"line_number":1278,"context_line":"            \u0027--fixed-ip\u0027,"},{"line_number":1279,"context_line":"            metavar\u003d\u0027subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e\u0027,"},{"line_number":1280,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"},{"line_number":1281,"context_line":"            optional_keys\u003d[\u0027subnet\u0027, \u0027ip-address\u0027],"},{"line_number":1282,"context_line":"            help\u003d_("}],"source_content_type":"text/x-python","patch_set":6,"id":"bd59f336_762ac573","line":1279,"updated":"2024-01-17 19:25:46.000000000","message":"So here we don\u0027t support \u0027network\u0027 as in the add code? Is it really just meant to be its own argument?","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"5101a39d63e36f505c7101a125287a2aa784b869","unresolved":false,"context_lines":[{"line_number":1276,"context_line":"        )"},{"line_number":1277,"context_line":"        parser.add_argument("},{"line_number":1278,"context_line":"            \u0027--fixed-ip\u0027,"},{"line_number":1279,"context_line":"            metavar\u003d\u0027subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e\u0027,"},{"line_number":1280,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"},{"line_number":1281,"context_line":"            optional_keys\u003d[\u0027subnet\u0027, \u0027ip-address\u0027],"},{"line_number":1282,"context_line":"            help\u003d_("}],"source_content_type":"text/x-python","patch_set":6,"id":"6c4dd36f_bc5c6a30","line":1279,"in_reply_to":"bd59f336_762ac573","updated":"2024-01-31 20:16:19.000000000","message":"Hum, I seem to remember something about it only being required when adding because when removing we can perform an exact match with what is in the database.","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"47b91665ef27e269b5427107199e7c21c1309ebf","unresolved":true,"context_lines":[{"line_number":1281,"context_line":"            optional_keys\u003d[\u0027subnet\u0027, \u0027ip-address\u0027],"},{"line_number":1282,"context_line":"            help\u003d_("},{"line_number":1283,"context_line":"                \"IP and/or subnet (name or ID) on the external gateway \""},{"line_number":1284,"context_line":"                \"which is used to identify a particular gateway if multiple\""},{"line_number":1285,"context_line":"                \"are attached to the same network: subnet\u003d\u003csubnet\u003e,\""},{"line_number":1286,"context_line":"                \"ip-address\u003d\u003cip-address\u003e.\""},{"line_number":1287,"context_line":"            ),"}],"source_content_type":"text/x-python","patch_set":6,"id":"d9dc1e62_3f4db903","line":1284,"updated":"2024-01-17 19:25:46.000000000","message":"missing trailing space","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"5101a39d63e36f505c7101a125287a2aa784b869","unresolved":false,"context_lines":[{"line_number":1281,"context_line":"            optional_keys\u003d[\u0027subnet\u0027, \u0027ip-address\u0027],"},{"line_number":1282,"context_line":"            help\u003d_("},{"line_number":1283,"context_line":"                \"IP and/or subnet (name or ID) on the external gateway \""},{"line_number":1284,"context_line":"                \"which is used to identify a particular gateway if multiple\""},{"line_number":1285,"context_line":"                \"are attached to the same network: subnet\u003d\u003csubnet\u003e,\""},{"line_number":1286,"context_line":"                \"ip-address\u003d\u003cip-address\u003e.\""},{"line_number":1287,"context_line":"            ),"}],"source_content_type":"text/x-python","patch_set":6,"id":"5ce608f1_2f605222","line":1284,"in_reply_to":"d9dc1e62_3f4db903","updated":"2024-01-31 20:16:19.000000000","message":"Done","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"d33f6e0d9336fc81febd5714d2e8cfa4142e8b14","unresolved":true,"context_lines":[{"line_number":928,"context_line":"                \"different gateway ports added to the same network. Indexing \""},{"line_number":929,"context_line":"                \"has per-network significance. If not specified, an index \""},{"line_number":930,"context_line":"                \"is assumed to be equal to 0).\""},{"line_number":931,"context_line":"            ),"},{"line_number":932,"context_line":"        )"},{"line_number":933,"context_line":"        snat_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":934,"context_line":"        snat_group.add_argument("}],"source_content_type":"text/x-python","patch_set":7,"id":"e34482c4_5b8e6d2b","line":931,"updated":"2024-02-05 10:09:02.000000000","message":"Could you please describe how  this index should be used?\nIf you extend the wip doc patch it is perfect:\nhttps://review.opendev.org/c/openstack/neutron/+/899402/2/doc/source/admin/config-active-active-l3gw.rst","commit_id":"8a39ae7c59a720f31ef4d2a2cc6664c49882af72"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"bb5677e555cd52a23e5aa182c389ec7ba84ce2fb","unresolved":false,"context_lines":[{"line_number":928,"context_line":"                \"different gateway ports added to the same network. Indexing \""},{"line_number":929,"context_line":"                \"has per-network significance. If not specified, an index \""},{"line_number":930,"context_line":"                \"is assumed to be equal to 0).\""},{"line_number":931,"context_line":"            ),"},{"line_number":932,"context_line":"        )"},{"line_number":933,"context_line":"        snat_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":934,"context_line":"        snat_group.add_argument("}],"source_content_type":"text/x-python","patch_set":7,"id":"1836ebde_738b8ba1","line":931,"in_reply_to":"d8b84ea6_aecbc006","updated":"2024-02-26 10:09:13.000000000","message":"Right, so after having attempted practical use of the index and network keys to the `--fixed-ip` option, they do not come across as useful.\n\nInstead I am proposing an update to this patch that will make the client code automatically map `subnet` to the network it belongs to, spreading any --fixed-ip arguments out on gateway ports as specified by one or more `--external-gateway`.\n\nIn the event there are more `--fixed-ip` options than there are matching `--external-gateway` options, multiple IP addresses are added to one of those gateways, which match the current behavior.\n\nWDYT?","commit_id":"8a39ae7c59a720f31ef4d2a2cc6664c49882af72"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"982f89453cd0bdf75f7a19253a041d0d0b1f1e86","unresolved":true,"context_lines":[{"line_number":928,"context_line":"                \"different gateway ports added to the same network. Indexing \""},{"line_number":929,"context_line":"                \"has per-network significance. If not specified, an index \""},{"line_number":930,"context_line":"                \"is assumed to be equal to 0).\""},{"line_number":931,"context_line":"            ),"},{"line_number":932,"context_line":"        )"},{"line_number":933,"context_line":"        snat_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":934,"context_line":"        snat_group.add_argument("}],"source_content_type":"text/x-python","patch_set":7,"id":"d8b84ea6_aecbc006","line":931,"in_reply_to":"e34482c4_5b8e6d2b","updated":"2024-02-20 13:13:58.000000000","message":"Yep, working on the documentation with the goal of having a reviewable iteration up before the end of this week.\n\nAs part of that I have attempted to explore the use of the optional `index` and `network` keys to the `--fixed-ip` argument, and I have to admit I have so far not found any good use for them.\n\nIf it does not suddenly appear while I work through documenting the use cases, I\u0027ll drop them from this patch.","commit_id":"8a39ae7c59a720f31ef4d2a2cc6664c49882af72"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2dd63f744e3bd7f10d9ac2398168798bbb4ff540","unresolved":true,"context_lines":[{"line_number":1194,"context_line":"        parser.add_argument("},{"line_number":1195,"context_line":"            \u0027router\u0027,"},{"line_number":1196,"context_line":"            metavar\u003d\"\u003crouter\u003e\","},{"line_number":1197,"context_line":"            help\u003d_(\"Router to modify (name or ID)\"),"},{"line_number":1198,"context_line":"        )"},{"line_number":1199,"context_line":"        parser.add_argument("},{"line_number":1200,"context_line":"            metavar\u003d\"\u003cnetwork\u003e\","}],"source_content_type":"text/x-python","patch_set":7,"id":"30c8afb4_4f3e199b","line":1197,"updated":"2024-02-16 20:57:44.000000000","message":"nit: missing trailing period","commit_id":"8a39ae7c59a720f31ef4d2a2cc6664c49882af72"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"bb5677e555cd52a23e5aa182c389ec7ba84ce2fb","unresolved":true,"context_lines":[{"line_number":1194,"context_line":"        parser.add_argument("},{"line_number":1195,"context_line":"            \u0027router\u0027,"},{"line_number":1196,"context_line":"            metavar\u003d\"\u003crouter\u003e\","},{"line_number":1197,"context_line":"            help\u003d_(\"Router to modify (name or ID)\"),"},{"line_number":1198,"context_line":"        )"},{"line_number":1199,"context_line":"        parser.add_argument("},{"line_number":1200,"context_line":"            metavar\u003d\"\u003cnetwork\u003e\","}],"source_content_type":"text/x-python","patch_set":7,"id":"476ace00_2773a356","line":1197,"in_reply_to":"30c8afb4_4f3e199b","updated":"2024-02-26 10:09:13.000000000","message":"Happy to update, but that would not patch the other occurrences of this string in this file?","commit_id":"8a39ae7c59a720f31ef4d2a2cc6664c49882af72"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"351f8046c9b981418707fe50053da3b3c19c0a67","unresolved":true,"context_lines":[{"line_number":1194,"context_line":"        parser.add_argument("},{"line_number":1195,"context_line":"            \u0027router\u0027,"},{"line_number":1196,"context_line":"            metavar\u003d\"\u003crouter\u003e\","},{"line_number":1197,"context_line":"            help\u003d_(\"Router to modify (name or ID)\"),"},{"line_number":1198,"context_line":"        )"},{"line_number":1199,"context_line":"        parser.add_argument("},{"line_number":1200,"context_line":"            metavar\u003d\"\u003cnetwork\u003e\","}],"source_content_type":"text/x-python","patch_set":7,"id":"49422992_5ca895cc","line":1197,"in_reply_to":"476ace00_2773a356","updated":"2024-02-27 20:05:45.000000000","message":"It\u0027s just a nit, if you respin for something else you can fix the ones you\u0027re adding, don\u0027t need to do the others.","commit_id":"8a39ae7c59a720f31ef4d2a2cc6664c49882af72"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"643e22d1420d97e44f860ce2d2358b88c6154fc0","unresolved":false,"context_lines":[{"line_number":1194,"context_line":"        parser.add_argument("},{"line_number":1195,"context_line":"            \u0027router\u0027,"},{"line_number":1196,"context_line":"            metavar\u003d\"\u003crouter\u003e\","},{"line_number":1197,"context_line":"            help\u003d_(\"Router to modify (name or ID)\"),"},{"line_number":1198,"context_line":"        )"},{"line_number":1199,"context_line":"        parser.add_argument("},{"line_number":1200,"context_line":"            metavar\u003d\"\u003cnetwork\u003e\","}],"source_content_type":"text/x-python","patch_set":7,"id":"55516af5_117a4394","line":1197,"in_reply_to":"49422992_5ca895cc","updated":"2024-02-28 06:19:25.000000000","message":"Done","commit_id":"8a39ae7c59a720f31ef4d2a2cc6664c49882af72"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2dd63f744e3bd7f10d9ac2398168798bbb4ff540","unresolved":true,"context_lines":[{"line_number":1217,"context_line":"                \"Desired IP and/or subnet (name or ID) on external gateway: \""},{"line_number":1218,"context_line":"                \"subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e,\""},{"line_number":1219,"context_line":"                \"network\u003d\u003cnetwork\u003e,index\u003d\u003cindex\u003e \""},{"line_number":1220,"context_line":"                \"(repeat this option to set multiple fixed IP addresses.\""},{"line_number":1221,"context_line":"            ),"},{"line_number":1222,"context_line":"        )"},{"line_number":1223,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":7,"id":"228ecf1a_72a4a3b1","line":1220,"range":{"start_line":1220,"start_character":62,"end_line":1220,"end_character":71},"updated":"2024-02-16 20:57:44.000000000","message":"s/addresses).","commit_id":"8a39ae7c59a720f31ef4d2a2cc6664c49882af72"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"bb5677e555cd52a23e5aa182c389ec7ba84ce2fb","unresolved":false,"context_lines":[{"line_number":1217,"context_line":"                \"Desired IP and/or subnet (name or ID) on external gateway: \""},{"line_number":1218,"context_line":"                \"subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e,\""},{"line_number":1219,"context_line":"                \"network\u003d\u003cnetwork\u003e,index\u003d\u003cindex\u003e \""},{"line_number":1220,"context_line":"                \"(repeat this option to set multiple fixed IP addresses.\""},{"line_number":1221,"context_line":"            ),"},{"line_number":1222,"context_line":"        )"},{"line_number":1223,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a9b1853_22d05753","line":1220,"range":{"start_line":1220,"start_character":62,"end_line":1220,"end_character":71},"in_reply_to":"228ecf1a_72a4a3b1","updated":"2024-02-26 10:09:13.000000000","message":"Done","commit_id":"8a39ae7c59a720f31ef4d2a2cc6664c49882af72"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2dd63f744e3bd7f10d9ac2398168798bbb4ff540","unresolved":true,"context_lines":[{"line_number":1226,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":1227,"context_line":"        if not is_multiple_gateways_supported(client):"},{"line_number":1228,"context_line":"            msg \u003d _("},{"line_number":1229,"context_line":"                \u0027The external-gateway-multihoming extesion is not enabled at \u0027"},{"line_number":1230,"context_line":"                \u0027the Neutron side.\u0027"},{"line_number":1231,"context_line":"            )"},{"line_number":1232,"context_line":"            raise exceptions.CommandError(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ef7c9052_ee6f727a","line":1229,"range":{"start_line":1229,"start_character":50,"end_line":1229,"end_character":58},"updated":"2024-02-16 20:57:44.000000000","message":"s/extension","commit_id":"8a39ae7c59a720f31ef4d2a2cc6664c49882af72"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"bb5677e555cd52a23e5aa182c389ec7ba84ce2fb","unresolved":false,"context_lines":[{"line_number":1226,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":1227,"context_line":"        if not is_multiple_gateways_supported(client):"},{"line_number":1228,"context_line":"            msg \u003d _("},{"line_number":1229,"context_line":"                \u0027The external-gateway-multihoming extesion is not enabled at \u0027"},{"line_number":1230,"context_line":"                \u0027the Neutron side.\u0027"},{"line_number":1231,"context_line":"            )"},{"line_number":1232,"context_line":"            raise exceptions.CommandError(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"633d1e5d_d8f610b7","line":1229,"range":{"start_line":1229,"start_character":50,"end_line":1229,"end_character":58},"in_reply_to":"ef7c9052_ee6f727a","updated":"2024-02-26 10:09:13.000000000","message":"Done","commit_id":"8a39ae7c59a720f31ef4d2a2cc6664c49882af72"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2dd63f744e3bd7f10d9ac2398168798bbb4ff540","unresolved":true,"context_lines":[{"line_number":1262,"context_line":"        parser.add_argument("},{"line_number":1263,"context_line":"            \u0027router\u0027,"},{"line_number":1264,"context_line":"            metavar\u003d\"\u003crouter\u003e\","},{"line_number":1265,"context_line":"            help\u003d_(\"Router to modify (name or ID)\"),"},{"line_number":1266,"context_line":"        )"},{"line_number":1267,"context_line":"        parser.add_argument("},{"line_number":1268,"context_line":"            metavar\u003d\"\u003cnetwork\u003e\","}],"source_content_type":"text/x-python","patch_set":7,"id":"b1d38e2e_014ab9c0","line":1265,"updated":"2024-02-16 20:57:44.000000000","message":"Missing trailing period","commit_id":"8a39ae7c59a720f31ef4d2a2cc6664c49882af72"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"643e22d1420d97e44f860ce2d2358b88c6154fc0","unresolved":false,"context_lines":[{"line_number":1262,"context_line":"        parser.add_argument("},{"line_number":1263,"context_line":"            \u0027router\u0027,"},{"line_number":1264,"context_line":"            metavar\u003d\"\u003crouter\u003e\","},{"line_number":1265,"context_line":"            help\u003d_(\"Router to modify (name or ID)\"),"},{"line_number":1266,"context_line":"        )"},{"line_number":1267,"context_line":"        parser.add_argument("},{"line_number":1268,"context_line":"            metavar\u003d\"\u003cnetwork\u003e\","}],"source_content_type":"text/x-python","patch_set":7,"id":"43071d7d_a81acf38","line":1265,"in_reply_to":"500c95b7_e90dc03c","updated":"2024-02-28 06:19:25.000000000","message":"Done","commit_id":"8a39ae7c59a720f31ef4d2a2cc6664c49882af72"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"bb5677e555cd52a23e5aa182c389ec7ba84ce2fb","unresolved":true,"context_lines":[{"line_number":1262,"context_line":"        parser.add_argument("},{"line_number":1263,"context_line":"            \u0027router\u0027,"},{"line_number":1264,"context_line":"            metavar\u003d\"\u003crouter\u003e\","},{"line_number":1265,"context_line":"            help\u003d_(\"Router to modify (name or ID)\"),"},{"line_number":1266,"context_line":"        )"},{"line_number":1267,"context_line":"        parser.add_argument("},{"line_number":1268,"context_line":"            metavar\u003d\"\u003cnetwork\u003e\","}],"source_content_type":"text/x-python","patch_set":7,"id":"500c95b7_e90dc03c","line":1265,"in_reply_to":"b1d38e2e_014ab9c0","updated":"2024-02-26 10:09:13.000000000","message":"Happy to update, but that would not patch the other occurrences of this string in this file?","commit_id":"8a39ae7c59a720f31ef4d2a2cc6664c49882af72"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2dd63f744e3bd7f10d9ac2398168798bbb4ff540","unresolved":true,"context_lines":[{"line_number":1279,"context_line":"            \u0027--fixed-ip\u0027,"},{"line_number":1280,"context_line":"            metavar\u003d\u0027subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e\u0027,"},{"line_number":1281,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"},{"line_number":1282,"context_line":"            optional_keys\u003d[\u0027subnet\u0027, \u0027ip-address\u0027],"},{"line_number":1283,"context_line":"            help\u003d_("},{"line_number":1284,"context_line":"                \"IP and/or subnet (name or ID) on the external gateway \""},{"line_number":1285,"context_line":"                \"which is used to identify a particular gateway if multiple \""}],"source_content_type":"text/x-python","patch_set":7,"id":"4015e69b_314948d2","line":1282,"updated":"2024-02-16 20:57:44.000000000","message":"So this doesn\u0027t need the optional network or index args?\n\nAlso, can we remove multiple items in one call? Sorry, I don\u0027t remember from the neutron code.","commit_id":"8a39ae7c59a720f31ef4d2a2cc6664c49882af72"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"bb5677e555cd52a23e5aa182c389ec7ba84ce2fb","unresolved":false,"context_lines":[{"line_number":1279,"context_line":"            \u0027--fixed-ip\u0027,"},{"line_number":1280,"context_line":"            metavar\u003d\u0027subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e\u0027,"},{"line_number":1281,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"},{"line_number":1282,"context_line":"            optional_keys\u003d[\u0027subnet\u0027, \u0027ip-address\u0027],"},{"line_number":1283,"context_line":"            help\u003d_("},{"line_number":1284,"context_line":"                \"IP and/or subnet (name or ID) on the external gateway \""},{"line_number":1285,"context_line":"                \"which is used to identify a particular gateway if multiple \""}],"source_content_type":"text/x-python","patch_set":7,"id":"6814eba1_53e64c7b","line":1282,"in_reply_to":"4015e69b_314948d2","updated":"2024-02-26 10:09:13.000000000","message":"As highlighted in other discussion, we\u0027ve done away with the network and index args.\n\nThe information provided here will be used to match a single gateway port for removal.","commit_id":"8a39ae7c59a720f31ef4d2a2cc6664c49882af72"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"351f8046c9b981418707fe50053da3b3c19c0a67","unresolved":true,"context_lines":[{"line_number":1259,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":1260,"context_line":"        if not is_multiple_gateways_supported(client):"},{"line_number":1261,"context_line":"            msg \u003d _("},{"line_number":1262,"context_line":"                \u0027The external-gateway-multihoming extesion is not enabled at \u0027"},{"line_number":1263,"context_line":"                \u0027the Neutron side.\u0027"},{"line_number":1264,"context_line":"            )"},{"line_number":1265,"context_line":"            raise exceptions.CommandError(msg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"4fed19f1_9d7fcbb6","line":1262,"range":{"start_line":1262,"start_character":50,"end_line":1262,"end_character":58},"updated":"2024-02-27 20:05:45.000000000","message":"s/extension\n\nI had only noticed the above one previously","commit_id":"4c1c7d819317f8620cdb5197d34f76e95f55a588"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"643e22d1420d97e44f860ce2d2358b88c6154fc0","unresolved":false,"context_lines":[{"line_number":1259,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":1260,"context_line":"        if not is_multiple_gateways_supported(client):"},{"line_number":1261,"context_line":"            msg \u003d _("},{"line_number":1262,"context_line":"                \u0027The external-gateway-multihoming extesion is not enabled at \u0027"},{"line_number":1263,"context_line":"                \u0027the Neutron side.\u0027"},{"line_number":1264,"context_line":"            )"},{"line_number":1265,"context_line":"            raise exceptions.CommandError(msg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9ea94ca9_63bdd422","line":1262,"range":{"start_line":1262,"start_character":50,"end_line":1262,"end_character":58},"in_reply_to":"4fed19f1_9d7fcbb6","updated":"2024-02-28 06:19:25.000000000","message":"Done","commit_id":"4c1c7d819317f8620cdb5197d34f76e95f55a588"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8f0971dc29bfdb4c7ac78e2c41017d95953cd8fd","unresolved":true,"context_lines":[{"line_number":105,"context_line":"def _get_external_gateway_attrs(client_manager, parsed_args):"},{"line_number":106,"context_line":"    attrs \u003d {}"},{"line_number":107,"context_line":"    if parsed_args.external_gateways:"},{"line_number":108,"context_line":"        gateway_info \u003d {}"},{"line_number":109,"context_line":"        external_gateways: collections.defaultdict["},{"line_number":110,"context_line":"            str, list[dict]"},{"line_number":111,"context_line":"        ] \u003d collections.defaultdict(list)"}],"source_content_type":"text/x-python","patch_set":9,"id":"492ddd89_77b13825","line":108,"range":{"start_line":108,"start_character":8,"end_line":108,"end_character":20},"updated":"2024-03-01 16:06:41.000000000","message":"You define `gateway_info` here...","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"d9e77845f5a1ebb6e276a78ccfbf82791b3ba46b","unresolved":false,"context_lines":[{"line_number":105,"context_line":"def _get_external_gateway_attrs(client_manager, parsed_args):"},{"line_number":106,"context_line":"    attrs \u003d {}"},{"line_number":107,"context_line":"    if parsed_args.external_gateways:"},{"line_number":108,"context_line":"        gateway_info \u003d {}"},{"line_number":109,"context_line":"        external_gateways: collections.defaultdict["},{"line_number":110,"context_line":"            str, list[dict]"},{"line_number":111,"context_line":"        ] \u003d collections.defaultdict(list)"}],"source_content_type":"text/x-python","patch_set":9,"id":"44640402_861a799b","line":108,"range":{"start_line":108,"start_character":8,"end_line":108,"end_character":20},"in_reply_to":"492ddd89_77b13825","updated":"2024-03-05 15:15:38.000000000","message":"Done","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8f0971dc29bfdb4c7ac78e2c41017d95953cd8fd","unresolved":true,"context_lines":[{"line_number":112,"context_line":"        n_client \u003d client_manager.network"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        for gw_net_name_or_id in parsed_args.external_gateways:"},{"line_number":115,"context_line":"            gateway_info \u003d {}"},{"line_number":116,"context_line":"            gw_net \u003d n_client.find_network("},{"line_number":117,"context_line":"                gw_net_name_or_id, ignore_missing\u003dFalse"},{"line_number":118,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":9,"id":"4060788f_e24bdd55","line":115,"updated":"2024-03-01 16:06:41.000000000","message":"...then redefine it here","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"d9e77845f5a1ebb6e276a78ccfbf82791b3ba46b","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        n_client \u003d client_manager.network"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        for gw_net_name_or_id in parsed_args.external_gateways:"},{"line_number":115,"context_line":"            gateway_info \u003d {}"},{"line_number":116,"context_line":"            gw_net \u003d n_client.find_network("},{"line_number":117,"context_line":"                gw_net_name_or_id, ignore_missing\u003dFalse"},{"line_number":118,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":9,"id":"1d710b2e_7f7d3842","line":115,"in_reply_to":"4060788f_e24bdd55","updated":"2024-03-05 15:15:38.000000000","message":"Done","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8f0971dc29bfdb4c7ac78e2c41017d95953cd8fd","unresolved":true,"context_lines":[{"line_number":142,"context_line":"            for ip_spec in parsed_args.fixed_ip:"},{"line_number":143,"context_line":"                # If there is only one gateway, this value will represent the"},{"line_number":144,"context_line":"                # network ID for it, otherwise it will be overridden."},{"line_number":145,"context_line":"                ip_net_id \u003d gateway_info[\u0027network_id\u0027]"},{"line_number":146,"context_line":"                if ip_spec.get(\u0027subnet\u0027, False):"},{"line_number":147,"context_line":"                    subnet_name_id \u003d ip_spec.pop(\u0027subnet\u0027)"},{"line_number":148,"context_line":"                    if subnet_name_id:"}],"source_content_type":"text/x-python","patch_set":9,"id":"cab21231_6d1841cc","line":145,"range":{"start_line":145,"start_character":28,"end_line":145,"end_character":40},"updated":"2024-03-01 16:06:41.000000000","message":"...but use the result here. Is the expectation that, in the event of multiple gateways, you will use the last result? Does that mean our gateways will e.g. always share a common network? If so, can we simply store `network_id` (since that\u0027s all we seem to store from `gateway_info` here) and avoid multiple calls to `find_network` above (we should also note what we\u0027re doing)? If the networks can be different, do we have a bug here?","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"d9e77845f5a1ebb6e276a78ccfbf82791b3ba46b","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            for ip_spec in parsed_args.fixed_ip:"},{"line_number":143,"context_line":"                # If there is only one gateway, this value will represent the"},{"line_number":144,"context_line":"                # network ID for it, otherwise it will be overridden."},{"line_number":145,"context_line":"                ip_net_id \u003d gateway_info[\u0027network_id\u0027]"},{"line_number":146,"context_line":"                if ip_spec.get(\u0027subnet\u0027, False):"},{"line_number":147,"context_line":"                    subnet_name_id \u003d ip_spec.pop(\u0027subnet\u0027)"},{"line_number":148,"context_line":"                    if subnet_name_id:"}],"source_content_type":"text/x-python","patch_set":9,"id":"6f76400e_fd4af7d6","line":145,"range":{"start_line":145,"start_character":28,"end_line":145,"end_character":40},"in_reply_to":"cab21231_6d1841cc","updated":"2024-03-05 15:15:38.000000000","message":"Gateways can be spread across multiple networks, so we try to match any subsequent `--fixed-ip` arguments to their respective network.\n\nThe `ip_net_id` is used below in case no subnet is supplied to the `--fixed-ip` argument.\n\nIn the next iteration I\u0027ll change this so that the first network ID is stored in a variable at the top and referenced here instead. That would retain existing behavior, and if a user tries to supply an IP address not in the first network they will get an error from Neutron.","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8f0971dc29bfdb4c7ac78e2c41017d95953cd8fd","unresolved":true,"context_lines":[{"line_number":186,"context_line":"                gateway_list.extend(gw_info_list)"},{"line_number":187,"context_line":"            attrs[\u0027external_gateways\u0027] \u003d gateway_list"},{"line_number":188,"context_line":"        else:"},{"line_number":189,"context_line":"            attrs[\u0027external_gateway_info\u0027] \u003d gateway_info"},{"line_number":190,"context_line":"    return attrs"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"f785ff19_28f86c80","line":189,"range":{"start_line":189,"start_character":45,"end_line":189,"end_character":57},"updated":"2024-03-01 16:06:41.000000000","message":"We also use `gateway_info` here but this is protected by a `if multiple_gws_supported:` guard. We could probably do with a comment indicating that we will are relying on Python\u0027s habit of leaking variables from a for loop and are happy to use the result of the iteration of the loop that sets `gateway_info` (knowing there was only one iteration).","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"d9e77845f5a1ebb6e276a78ccfbf82791b3ba46b","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                gateway_list.extend(gw_info_list)"},{"line_number":187,"context_line":"            attrs[\u0027external_gateways\u0027] \u003d gateway_list"},{"line_number":188,"context_line":"        else:"},{"line_number":189,"context_line":"            attrs[\u0027external_gateway_info\u0027] \u003d gateway_info"},{"line_number":190,"context_line":"    return attrs"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7364cb86_8957d8d8","line":189,"range":{"start_line":189,"start_character":45,"end_line":189,"end_character":57},"in_reply_to":"f785ff19_28f86c80","updated":"2024-03-05 15:15:38.000000000","message":"Done","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8f0971dc29bfdb4c7ac78e2c41017d95953cd8fd","unresolved":true,"context_lines":[{"line_number":219,"context_line":"        ).id"},{"line_number":220,"context_line":"        attrs[\u0027project_id\u0027] \u003d project_id"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    attrs.update(_get_external_gateway_attrs(client_manager, parsed_args))"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    # \"router set\" command doesn\u0027t support setting flavor_id."},{"line_number":225,"context_line":"    if \u0027flavor_id\u0027 in parsed_args and parsed_args.flavor_id is not None:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7fa5ab93_a225c700","line":222,"updated":"2024-03-01 16:06:41.000000000","message":"nit: It would have been helpful to split this into two patches: one to forklift the code but otherwise leave it untouched, and another to make the real changes.","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"d9e77845f5a1ebb6e276a78ccfbf82791b3ba46b","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        ).id"},{"line_number":220,"context_line":"        attrs[\u0027project_id\u0027] \u003d project_id"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    attrs.update(_get_external_gateway_attrs(client_manager, parsed_args))"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    # \"router set\" command doesn\u0027t support setting flavor_id."},{"line_number":225,"context_line":"    if \u0027flavor_id\u0027 in parsed_args and parsed_args.flavor_id is not None:"}],"source_content_type":"text/x-python","patch_set":9,"id":"db79e943_3d5b008e","line":222,"in_reply_to":"7fa5ab93_a225c700","updated":"2024-03-05 15:15:38.000000000","message":"Done","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8f0971dc29bfdb4c7ac78e2c41017d95953cd8fd","unresolved":true,"context_lines":[{"line_number":447,"context_line":"            action\u003d\u0027append\u0027,"},{"line_number":448,"context_line":"            help\u003d_("},{"line_number":449,"context_line":"                \"External Network used as router\u0027s gateway (name or ID). \""},{"line_number":450,"context_line":"                \"(repeat this option to set multiple gateways per router \""},{"line_number":451,"context_line":"                \"if the L3 service plugin in use supports it).\""},{"line_number":452,"context_line":"            ),"},{"line_number":453,"context_line":"            dest\u003d\u0027external_gateways\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5b8b8d55_da912fea","line":450,"range":{"start_line":450,"start_character":25,"end_line":450,"end_character":29},"updated":"2024-03-01 16:06:41.000000000","message":"nit: drop this for consistency\n\n```\n❯ cd python-openstackclient\n❯ ag \u0027repeat option\u0027  --nogroup | wc -l\n199\n❯ ag \u0027repeat this option\u0027  --nogroup | wc -l\n3\n```\n\n(`ag` \u003d the silver searcher)","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"d9e77845f5a1ebb6e276a78ccfbf82791b3ba46b","unresolved":false,"context_lines":[{"line_number":447,"context_line":"            action\u003d\u0027append\u0027,"},{"line_number":448,"context_line":"            help\u003d_("},{"line_number":449,"context_line":"                \"External Network used as router\u0027s gateway (name or ID). \""},{"line_number":450,"context_line":"                \"(repeat this option to set multiple gateways per router \""},{"line_number":451,"context_line":"                \"if the L3 service plugin in use supports it).\""},{"line_number":452,"context_line":"            ),"},{"line_number":453,"context_line":"            dest\u003d\u0027external_gateways\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"83ad76fb_cfb9f8d8","line":450,"range":{"start_line":450,"start_character":25,"end_line":450,"end_character":29},"in_reply_to":"5b8b8d55_da912fea","updated":"2024-03-05 15:15:38.000000000","message":"Done","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8f0971dc29bfdb4c7ac78e2c41017d95953cd8fd","unresolved":true,"context_lines":[{"line_number":456,"context_line":"            \u0027--fixed-ip\u0027,"},{"line_number":457,"context_line":"            metavar\u003d\u0027subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e\u0027,"},{"line_number":458,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"},{"line_number":459,"context_line":"            optional_keys\u003d[\u0027subnet\u0027, \u0027ip-address\u0027],"},{"line_number":460,"context_line":"            help\u003d_("},{"line_number":461,"context_line":"                \"Desired IP and/or subnet (name or ID) \""},{"line_number":462,"context_line":"                \"on external gateway: \""}],"source_content_type":"text/x-python","patch_set":9,"id":"d741581f_ec128d97","line":459,"updated":"2024-03-01 16:06:41.000000000","message":"nit: as a follow-up, it would be good to set `dest\u003d\u0027fixed_ips\u0027` on this to make it clear we\u0027re dealing with multiple values here","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"d9e77845f5a1ebb6e276a78ccfbf82791b3ba46b","unresolved":false,"context_lines":[{"line_number":456,"context_line":"            \u0027--fixed-ip\u0027,"},{"line_number":457,"context_line":"            metavar\u003d\u0027subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e\u0027,"},{"line_number":458,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"},{"line_number":459,"context_line":"            optional_keys\u003d[\u0027subnet\u0027, \u0027ip-address\u0027],"},{"line_number":460,"context_line":"            help\u003d_("},{"line_number":461,"context_line":"                \"Desired IP and/or subnet (name or ID) \""},{"line_number":462,"context_line":"                \"on external gateway: \""}],"source_content_type":"text/x-python","patch_set":9,"id":"511334f7_e5571052","line":459,"in_reply_to":"d741581f_ec128d97","updated":"2024-03-05 15:15:38.000000000","message":"Done","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8f0971dc29bfdb4c7ac78e2c41017d95953cd8fd","unresolved":true,"context_lines":[{"line_number":461,"context_line":"                \"Desired IP and/or subnet (name or ID) \""},{"line_number":462,"context_line":"                \"on external gateway: \""},{"line_number":463,"context_line":"                \"subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e \""},{"line_number":464,"context_line":"                \"(repeat this option to set multiple fixed IP addresses).\""},{"line_number":465,"context_line":"            ),"},{"line_number":466,"context_line":"        )"},{"line_number":467,"context_line":"        snat_group \u003d parser.add_mutually_exclusive_group()"}],"source_content_type":"text/x-python","patch_set":9,"id":"26744e88_aac63f04","line":464,"range":{"start_line":464,"start_character":25,"end_line":464,"end_character":29},"updated":"2024-03-01 16:06:41.000000000","message":"nit: drop","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"d9e77845f5a1ebb6e276a78ccfbf82791b3ba46b","unresolved":false,"context_lines":[{"line_number":461,"context_line":"                \"Desired IP and/or subnet (name or ID) \""},{"line_number":462,"context_line":"                \"on external gateway: \""},{"line_number":463,"context_line":"                \"subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e \""},{"line_number":464,"context_line":"                \"(repeat this option to set multiple fixed IP addresses).\""},{"line_number":465,"context_line":"            ),"},{"line_number":466,"context_line":"        )"},{"line_number":467,"context_line":"        snat_group \u003d parser.add_mutually_exclusive_group()"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aab5dee_d959358c","line":464,"range":{"start_line":464,"start_character":25,"end_line":464,"end_character":29},"in_reply_to":"26744e88_aac63f04","updated":"2024-03-05 15:15:38.000000000","message":"Done","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8f0971dc29bfdb4c7ac78e2c41017d95953cd8fd","unresolved":true,"context_lines":[{"line_number":520,"context_line":"        if parsed_args.enable_ndp_proxy is not None:"},{"line_number":521,"context_line":"            attrs[\u0027enable_ndp_proxy\u0027] \u003d parsed_args.enable_ndp_proxy"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"        external_gateways \u003d attrs.pop(\u0027external_gateways\u0027, None)"},{"line_number":524,"context_line":"        obj \u003d client.create_router(**attrs)"},{"line_number":525,"context_line":"        # tags cannot be set when created, so tags need to be set later."},{"line_number":526,"context_line":"        _tag.update_tags_for_set(client, obj, parsed_args)"}],"source_content_type":"text/x-python","patch_set":9,"id":"a8fd9285_48dbc3cf","line":523,"range":{"start_line":523,"start_character":57,"end_line":523,"end_character":63},"updated":"2024-03-01 16:06:41.000000000","message":"nit: this attribute will always be present, no? If so, this shouldn\u0027t be necessary?\n\nLater: never mind, this is a dict built by `_get_attrs`, not the result from the parser","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"d9e77845f5a1ebb6e276a78ccfbf82791b3ba46b","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        if parsed_args.enable_ndp_proxy is not None:"},{"line_number":521,"context_line":"            attrs[\u0027enable_ndp_proxy\u0027] \u003d parsed_args.enable_ndp_proxy"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"        external_gateways \u003d attrs.pop(\u0027external_gateways\u0027, None)"},{"line_number":524,"context_line":"        obj \u003d client.create_router(**attrs)"},{"line_number":525,"context_line":"        # tags cannot be set when created, so tags need to be set later."},{"line_number":526,"context_line":"        _tag.update_tags_for_set(client, obj, parsed_args)"}],"source_content_type":"text/x-python","patch_set":9,"id":"d5f0e027_a7507821","line":523,"range":{"start_line":523,"start_character":57,"end_line":523,"end_character":63},"in_reply_to":"a8fd9285_48dbc3cf","updated":"2024-03-05 15:15:38.000000000","message":"Done","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8f0971dc29bfdb4c7ac78e2c41017d95953cd8fd","unresolved":true,"context_lines":[{"line_number":880,"context_line":"            action\u003d\u0027append\u0027,"},{"line_number":881,"context_line":"            help\u003d_("},{"line_number":882,"context_line":"                \"External Network used as router\u0027s gateway (name or ID). \""},{"line_number":883,"context_line":"                \"(repeat this option to set multiple gateways per router \""},{"line_number":884,"context_line":"                \"if the L3 service plugin in use supports it).\""},{"line_number":885,"context_line":"            ),"},{"line_number":886,"context_line":"            dest\u003d\u0027external_gateways\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"cedb7e03_c6ae3df5","line":883,"range":{"start_line":883,"start_character":25,"end_line":883,"end_character":29},"updated":"2024-03-01 16:06:41.000000000","message":"nit: drop","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"d9e77845f5a1ebb6e276a78ccfbf82791b3ba46b","unresolved":false,"context_lines":[{"line_number":880,"context_line":"            action\u003d\u0027append\u0027,"},{"line_number":881,"context_line":"            help\u003d_("},{"line_number":882,"context_line":"                \"External Network used as router\u0027s gateway (name or ID). \""},{"line_number":883,"context_line":"                \"(repeat this option to set multiple gateways per router \""},{"line_number":884,"context_line":"                \"if the L3 service plugin in use supports it).\""},{"line_number":885,"context_line":"            ),"},{"line_number":886,"context_line":"            dest\u003d\u0027external_gateways\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"752d44c3_9b8ff404","line":883,"range":{"start_line":883,"start_character":25,"end_line":883,"end_character":29},"in_reply_to":"cedb7e03_c6ae3df5","updated":"2024-03-05 15:15:38.000000000","message":"Done","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8f0971dc29bfdb4c7ac78e2c41017d95953cd8fd","unresolved":true,"context_lines":[{"line_number":894,"context_line":"                \"Desired IP and/or subnet (name or ID) \""},{"line_number":895,"context_line":"                \"on external gateway: \""},{"line_number":896,"context_line":"                \"subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e \""},{"line_number":897,"context_line":"                \"(repeat this option to set multiple fixed IP addresses).\""},{"line_number":898,"context_line":"            ),"},{"line_number":899,"context_line":"        )"},{"line_number":900,"context_line":"        snat_group \u003d parser.add_mutually_exclusive_group()"}],"source_content_type":"text/x-python","patch_set":9,"id":"2bf18b3d_855a34bf","line":897,"range":{"start_line":897,"start_character":25,"end_line":897,"end_character":29},"updated":"2024-03-01 16:06:41.000000000","message":"nit: drop","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"d9e77845f5a1ebb6e276a78ccfbf82791b3ba46b","unresolved":false,"context_lines":[{"line_number":894,"context_line":"                \"Desired IP and/or subnet (name or ID) \""},{"line_number":895,"context_line":"                \"on external gateway: \""},{"line_number":896,"context_line":"                \"subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e \""},{"line_number":897,"context_line":"                \"(repeat this option to set multiple fixed IP addresses).\""},{"line_number":898,"context_line":"            ),"},{"line_number":899,"context_line":"        )"},{"line_number":900,"context_line":"        snat_group \u003d parser.add_mutually_exclusive_group()"}],"source_content_type":"text/x-python","patch_set":9,"id":"49ab608b_92f1090a","line":897,"range":{"start_line":897,"start_character":25,"end_line":897,"end_character":29},"in_reply_to":"2bf18b3d_855a34bf","updated":"2024-03-05 15:15:38.000000000","message":"Done","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8f0971dc29bfdb4c7ac78e2c41017d95953cd8fd","unresolved":false,"context_lines":[{"line_number":1079,"context_line":"        )"},{"line_number":1080,"context_line":"        # NOTE(dmitriis): This was not extended to support selective removal"},{"line_number":1081,"context_line":"        # of external gateways due to a cpython bug in argparse:"},{"line_number":1082,"context_line":"        # https://github.com/python/cpython/issues/53584"},{"line_number":1083,"context_line":"        parser.add_argument("},{"line_number":1084,"context_line":"            \u0027--external-gateway\u0027,"},{"line_number":1085,"context_line":"            action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"0bf1f6c6_a3899715","line":1082,"updated":"2024-03-01 16:06:41.000000000","message":"Ugh. I have tried to fix this via \"reference counting\" style rework of argparse but never managed to get it in a suitable state to fix. Maybe we\u0027ll eventually get this fixed...","commit_id":"178686719647c4b6fca2d6f26f45a570034548da"}],"openstackclient/tests/unit/network/v2/test_router.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"47b91665ef27e269b5427107199e7c21c1309ebf","unresolved":true,"context_lines":[{"line_number":2061,"context_line":"            \"--external-gateway\","},{"line_number":2062,"context_line":"            self._network.id,"},{"line_number":2063,"context_line":"            \"--external-gateway\","},{"line_number":2064,"context_line":"            self._network.id,"},{"line_number":2065,"context_line":"            \"--external-gateway\","},{"line_number":2066,"context_line":"            self._second_network.id,"},{"line_number":2067,"context_line":"            \u0027--fixed-ip\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7d5d03ff_e2afcfd3","line":2064,"updated":"2024-01-17 19:25:46.000000000","message":"Argument repeated by accident?","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"5101a39d63e36f505c7101a125287a2aa784b869","unresolved":false,"context_lines":[{"line_number":2061,"context_line":"            \"--external-gateway\","},{"line_number":2062,"context_line":"            self._network.id,"},{"line_number":2063,"context_line":"            \"--external-gateway\","},{"line_number":2064,"context_line":"            self._network.id,"},{"line_number":2065,"context_line":"            \"--external-gateway\","},{"line_number":2066,"context_line":"            self._second_network.id,"},{"line_number":2067,"context_line":"            \u0027--fixed-ip\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1acfdddd_2972cd3c","line":2064,"in_reply_to":"7d5d03ff_e2afcfd3","updated":"2024-01-31 20:16:19.000000000","message":"No, here we\u0027re actually testing adding two gateways to a single network and one on another network.","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"47b91665ef27e269b5427107199e7c21c1309ebf","unresolved":true,"context_lines":[{"line_number":2065,"context_line":"            \"--external-gateway\","},{"line_number":2066,"context_line":"            self._second_network.id,"},{"line_number":2067,"context_line":"            \u0027--fixed-ip\u0027,"},{"line_number":2068,"context_line":"            f\u0027subnet\u003d{self._subnet.id},ip-address\u003d10.0.1.1,\u0027"},{"line_number":2069,"context_line":"            f\u0027network\u003d{self._network.name},index\u003d0\u0027,"},{"line_number":2070,"context_line":"            \u0027--fixed-ip\u0027,"},{"line_number":2071,"context_line":"            f\u0027subnet\u003d{self._subnet.id},ip-address\u003d10.0.1.2,\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"a295de6f_8fed6d80","line":2068,"updated":"2024-01-17 19:25:46.000000000","message":"Do you need the f\u0027\u0027 ? I don\u0027t see other code using it like test_create_with_gateway()","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"5101a39d63e36f505c7101a125287a2aa784b869","unresolved":false,"context_lines":[{"line_number":2065,"context_line":"            \"--external-gateway\","},{"line_number":2066,"context_line":"            self._second_network.id,"},{"line_number":2067,"context_line":"            \u0027--fixed-ip\u0027,"},{"line_number":2068,"context_line":"            f\u0027subnet\u003d{self._subnet.id},ip-address\u003d10.0.1.1,\u0027"},{"line_number":2069,"context_line":"            f\u0027network\u003d{self._network.name},index\u003d0\u0027,"},{"line_number":2070,"context_line":"            \u0027--fixed-ip\u0027,"},{"line_number":2071,"context_line":"            f\u0027subnet\u003d{self._subnet.id},ip-address\u003d10.0.1.2,\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"b49a5ca3_5e1869a8","line":2068,"in_reply_to":"a295de6f_8fed6d80","updated":"2024-01-31 20:16:19.000000000","message":"Done","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"47b91665ef27e269b5427107199e7c21c1309ebf","unresolved":true,"context_lines":[{"line_number":2069,"context_line":"            f\u0027network\u003d{self._network.name},index\u003d0\u0027,"},{"line_number":2070,"context_line":"            \u0027--fixed-ip\u0027,"},{"line_number":2071,"context_line":"            f\u0027subnet\u003d{self._subnet.id},ip-address\u003d10.0.1.2,\u0027"},{"line_number":2072,"context_line":"            f\u0027network\u003d{self._network.name},index\u003d1\u0027,"},{"line_number":2073,"context_line":"            self._router.name,"},{"line_number":2074,"context_line":"        ]"},{"line_number":2075,"context_line":"        verifylist \u003d ["}],"source_content_type":"text/x-python","patch_set":6,"id":"625a8cfb_d78be39b","line":2072,"range":{"start_line":2072,"start_character":28,"end_line":2072,"end_character":36},"updated":"2024-01-17 19:25:46.000000000","message":"s/_second_network? maybe i\u0027m mis-understanding the test.\n\nname and id are also both used in this list and below, should you just use one for consistency?","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"5101a39d63e36f505c7101a125287a2aa784b869","unresolved":false,"context_lines":[{"line_number":2069,"context_line":"            f\u0027network\u003d{self._network.name},index\u003d0\u0027,"},{"line_number":2070,"context_line":"            \u0027--fixed-ip\u0027,"},{"line_number":2071,"context_line":"            f\u0027subnet\u003d{self._subnet.id},ip-address\u003d10.0.1.2,\u0027"},{"line_number":2072,"context_line":"            f\u0027network\u003d{self._network.name},index\u003d1\u0027,"},{"line_number":2073,"context_line":"            self._router.name,"},{"line_number":2074,"context_line":"        ]"},{"line_number":2075,"context_line":"        verifylist \u003d ["}],"source_content_type":"text/x-python","patch_set":6,"id":"1b7395de_79354bba","line":2072,"range":{"start_line":2072,"start_character":28,"end_line":2072,"end_character":36},"in_reply_to":"625a8cfb_d78be39b","updated":"2024-01-31 20:16:19.000000000","message":"No, here we\u0027re actually testing adding two gateways to a single network and one on another network.\n\nI changed names for ID\u0027s as suggested.","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"47b91665ef27e269b5427107199e7c21c1309ebf","unresolved":true,"context_lines":[{"line_number":2070,"context_line":"            \u0027--fixed-ip\u0027,"},{"line_number":2071,"context_line":"            f\u0027subnet\u003d{self._subnet.id},ip-address\u003d10.0.1.2,\u0027"},{"line_number":2072,"context_line":"            f\u0027network\u003d{self._network.name},index\u003d1\u0027,"},{"line_number":2073,"context_line":"            self._router.name,"},{"line_number":2074,"context_line":"        ]"},{"line_number":2075,"context_line":"        verifylist \u003d ["},{"line_number":2076,"context_line":"            (\u0027name\u0027, self._router.name),"}],"source_content_type":"text/x-python","patch_set":6,"id":"0a3c86ac_1b27c5d3","line":2073,"updated":"2024-01-17 19:25:46.000000000","message":"Some of the other tests put this as first argument, although i guess that\u0027s not required.","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"5101a39d63e36f505c7101a125287a2aa784b869","unresolved":false,"context_lines":[{"line_number":2070,"context_line":"            \u0027--fixed-ip\u0027,"},{"line_number":2071,"context_line":"            f\u0027subnet\u003d{self._subnet.id},ip-address\u003d10.0.1.2,\u0027"},{"line_number":2072,"context_line":"            f\u0027network\u003d{self._network.name},index\u003d1\u0027,"},{"line_number":2073,"context_line":"            self._router.name,"},{"line_number":2074,"context_line":"        ]"},{"line_number":2075,"context_line":"        verifylist \u003d ["},{"line_number":2076,"context_line":"            (\u0027name\u0027, self._router.name),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7d5b7246_8f702e75","line":2073,"in_reply_to":"0a3c86ac_1b27c5d3","updated":"2024-01-31 20:16:19.000000000","message":"Done","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"47b91665ef27e269b5427107199e7c21c1309ebf","unresolved":true,"context_lines":[{"line_number":2141,"context_line":"            \"--external-gateway\","},{"line_number":2142,"context_line":"            self._network.id,"},{"line_number":2143,"context_line":"            \"--no-qos-policy\","},{"line_number":2144,"context_line":"            self._router.id,"},{"line_number":2145,"context_line":"        ]"},{"line_number":2146,"context_line":"        verifylist \u003d ["},{"line_number":2147,"context_line":"            (\u0027router\u0027, self._router.id),"}],"source_content_type":"text/x-python","patch_set":6,"id":"456b9839_5cf41c95","line":2144,"range":{"start_line":2144,"start_character":25,"end_line":2144,"end_character":27},"updated":"2024-01-17 19:25:46.000000000","message":"Should this be \u0027name\u0027 for consistency?\n\nAlso, most of my comments above apply below so I will not repeat them all.","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"},{"author":{"_account_id":13686,"name":"Frode Nordahl","email":"fnordahl@ubuntu.com","username":"fnordahl"},"change_message_id":"5101a39d63e36f505c7101a125287a2aa784b869","unresolved":false,"context_lines":[{"line_number":2141,"context_line":"            \"--external-gateway\","},{"line_number":2142,"context_line":"            self._network.id,"},{"line_number":2143,"context_line":"            \"--no-qos-policy\","},{"line_number":2144,"context_line":"            self._router.id,"},{"line_number":2145,"context_line":"        ]"},{"line_number":2146,"context_line":"        verifylist \u003d ["},{"line_number":2147,"context_line":"            (\u0027router\u0027, self._router.id),"}],"source_content_type":"text/x-python","patch_set":6,"id":"97dc54ca_9fc1fbbf","line":2144,"range":{"start_line":2144,"start_character":25,"end_line":2144,"end_character":27},"in_reply_to":"456b9839_5cf41c95","updated":"2024-01-31 20:16:19.000000000","message":"Done","commit_id":"f9c9cf5e877cc07c3f5133b6e607a2fd766ac67f"}]}
