)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"2ee44a0d49a20c518a72942c127e951a3dc906aa","unresolved":false,"context_lines":[{"line_number":7,"context_line":"L3_agent router can\u0027t update external_gateway_info"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We can change router external_gateway_info(external_network)"},{"line_number":10,"context_line":"by RestAPI, but l3_agent can\u0027t update router external_network."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I8a50de745fe844c00bfcc78cfbdd654c226eedf5"},{"line_number":13,"context_line":"closes-bug: #1320728"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7adec928_a33cbcc0","line":10,"updated":"2014-05-23 10:56:42.000000000","message":"I don\u0027t think the change of the GW should be allowed. From the API documentation:\n\n\"You can update the name, administrative state, and the external gateway. For more information about how to set the external gateway for a router, see the create router operation. This operation does not enable the update of router interfaces. To update a router, use the add router interface and remove router interface operations.\"\n\nCurrently, if attempted, is an error returned? If not, then maybe that should be added.","commit_id":"ed29406f8dbf880d4287bca21ac3afe71ae9cc55"},{"author":{"_account_id":8646,"name":"yangxurong","email":"yangxurong@huawei.com","username":"yangxurong"},"change_message_id":"861edc9935ade6a7f7007058d1f2136ec6348337","unresolved":false,"context_lines":[{"line_number":7,"context_line":"L3_agent router can\u0027t update external_gateway_info"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We can change router external_gateway_info(external_network)"},{"line_number":10,"context_line":"by RestAPI, but l3_agent can\u0027t update router external_network."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I8a50de745fe844c00bfcc78cfbdd654c226eedf5"},{"line_number":13,"context_line":"closes-bug: #1320728"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3ae8d1ca_7d654144","line":10,"in_reply_to":"3ae8d1ca_c8af7c2a","updated":"2014-05-27 14:34:53.000000000","message":"yes, i\u0027m sure, you can check EXTENDED_ATTRIBUTES_2_0 description,the EXTERNAL_GW_INFO allow to update the external network","commit_id":"ed29406f8dbf880d4287bca21ac3afe71ae9cc55"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"eec25c362eeaaefc75a56e38bacd62f9957ba7ef","unresolved":false,"context_lines":[{"line_number":7,"context_line":"L3_agent router can\u0027t update external_gateway_info"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We can change router external_gateway_info(external_network)"},{"line_number":10,"context_line":"by RestAPI, but l3_agent can\u0027t update router external_network."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I8a50de745fe844c00bfcc78cfbdd654c226eedf5"},{"line_number":13,"context_line":"closes-bug: #1320728"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3ae8d1ca_c8af7c2a","line":10,"in_reply_to":"5adbc538_5595c7e2","updated":"2014-05-27 12:06:35.000000000","message":"My understanding is that the router has two I/Fs, the internal and external, and that they seem to be indicating that neither can be changed and that instead, they have to be deleted and re-added. You should check to be sure.","commit_id":"ed29406f8dbf880d4287bca21ac3afe71ae9cc55"},{"author":{"_account_id":8646,"name":"yangxurong","email":"yangxurong@huawei.com","username":"yangxurong"},"change_message_id":"100e31af7baf6f4aff725fca59b41cfad3b09186","unresolved":false,"context_lines":[{"line_number":7,"context_line":"L3_agent router can\u0027t update external_gateway_info"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We can change router external_gateway_info(external_network)"},{"line_number":10,"context_line":"by RestAPI, but l3_agent can\u0027t update router external_network."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I8a50de745fe844c00bfcc78cfbdd654c226eedf5"},{"line_number":13,"context_line":"closes-bug: #1320728"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5adbc538_5595c7e2","line":10,"in_reply_to":"7adec928_a33cbcc0","updated":"2014-05-26 03:49:48.000000000","message":"@Paul Michali\nthanks your comment. what you said is not allow to update router interface, yes,right, but router interface(internal network subnet) is not external_gateway(external netork_id) information, pls check.:)","commit_id":"ed29406f8dbf880d4287bca21ac3afe71ae9cc55"}],"neutron/agent/l3_agent.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"2ee44a0d49a20c518a72942c127e951a3dc906aa","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        internal_cidrs \u003d [p[\u0027ip_cidr\u0027] for p in ri.internal_ports]"},{"line_number":453,"context_line":"        # TODO(salv-orlando): RouterInfo would be a better place for"},{"line_number":454,"context_line":"        # this logic too"},{"line_number":455,"context_line":"        ex_gw_port_id \u003d (ri.ex_gw_port and ri.ex_gw_port[\u0027id\u0027] or"},{"line_number":456,"context_line":"                         ex_gw_port and ex_gw_port[\u0027id\u0027])"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        interface_name \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_60baaa6f","line":455,"updated":"2014-05-23 10:56:42.000000000","message":"Nit: This really isn\u0027t changing the logic.","commit_id":"ed29406f8dbf880d4287bca21ac3afe71ae9cc55"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"ea24d9c74e364632a4bf2b181e69211d3bfaed16","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        internal_cidrs \u003d [p[\u0027ip_cidr\u0027] for p in ri.internal_ports]"},{"line_number":453,"context_line":"        # TODO(salv-orlando): RouterInfo would be a better place for"},{"line_number":454,"context_line":"        # this logic too"},{"line_number":455,"context_line":"        ex_gw_port_id \u003d (ri.ex_gw_port and ri.ex_gw_port[\u0027id\u0027] or"},{"line_number":456,"context_line":"                         ex_gw_port and ex_gw_port[\u0027id\u0027])"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        interface_name \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_97c10ce7","line":455,"in_reply_to":"3ae8d1ca_2ee549a8","updated":"2014-05-27 13:49:03.000000000","message":"Ah gotcha. My bad.","commit_id":"ed29406f8dbf880d4287bca21ac3afe71ae9cc55"},{"author":{"_account_id":8646,"name":"yangxurong","email":"yangxurong@huawei.com","username":"yangxurong"},"change_message_id":"f1421f58250e7adda419014c2ad2d34003c7f677","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        internal_cidrs \u003d [p[\u0027ip_cidr\u0027] for p in ri.internal_ports]"},{"line_number":453,"context_line":"        # TODO(salv-orlando): RouterInfo would be a better place for"},{"line_number":454,"context_line":"        # this logic too"},{"line_number":455,"context_line":"        ex_gw_port_id \u003d (ri.ex_gw_port and ri.ex_gw_port[\u0027id\u0027] or"},{"line_number":456,"context_line":"                         ex_gw_port and ex_gw_port[\u0027id\u0027])"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        interface_name \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_2ee549a8","line":455,"in_reply_to":"3ae8d1ca_a849508d","updated":"2014-05-27 12:33:06.000000000","message":"in updating scenario, we get old ex_gx_port in preferentially, and remove, then get the new ex_gx_port to add. so is necessary.","commit_id":"ed29406f8dbf880d4287bca21ac3afe71ae9cc55"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"eec25c362eeaaefc75a56e38bacd62f9957ba7ef","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        internal_cidrs \u003d [p[\u0027ip_cidr\u0027] for p in ri.internal_ports]"},{"line_number":453,"context_line":"        # TODO(salv-orlando): RouterInfo would be a better place for"},{"line_number":454,"context_line":"        # this logic too"},{"line_number":455,"context_line":"        ex_gw_port_id \u003d (ri.ex_gw_port and ri.ex_gw_port[\u0027id\u0027] or"},{"line_number":456,"context_line":"                         ex_gw_port and ex_gw_port[\u0027id\u0027])"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        interface_name \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_a849508d","line":455,"in_reply_to":"5adbc538_35903bec","updated":"2014-05-27 12:06:35.000000000","message":"My point is that the changeset only appears to be reversing the existing conditions and doesn\u0027t change the sematics, so is an unnecessary change.","commit_id":"ed29406f8dbf880d4287bca21ac3afe71ae9cc55"},{"author":{"_account_id":8646,"name":"yangxurong","email":"yangxurong@huawei.com","username":"yangxurong"},"change_message_id":"100e31af7baf6f4aff725fca59b41cfad3b09186","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        internal_cidrs \u003d [p[\u0027ip_cidr\u0027] for p in ri.internal_ports]"},{"line_number":453,"context_line":"        # TODO(salv-orlando): RouterInfo would be a better place for"},{"line_number":454,"context_line":"        # this logic too"},{"line_number":455,"context_line":"        ex_gw_port_id \u003d (ri.ex_gw_port and ri.ex_gw_port[\u0027id\u0027] or"},{"line_number":456,"context_line":"                         ex_gw_port and ex_gw_port[\u0027id\u0027])"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        interface_name \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"5adbc538_35903bec","line":455,"in_reply_to":"7adec928_60baaa6f","updated":"2014-05-26 03:49:48.000000000","message":"this is necessary when update external_gatway.","commit_id":"ed29406f8dbf880d4287bca21ac3afe71ae9cc55"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"2ee44a0d49a20c518a72942c127e951a3dc906aa","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        elif not ex_gw_port and ri.ex_gw_port:"},{"line_number":466,"context_line":"            self.external_gateway_removed(ri, ri.ex_gw_port,"},{"line_number":467,"context_line":"                                          interface_name, internal_cidrs)"},{"line_number":468,"context_line":"        elif (ex_gw_port and ri.ex_gw_port and"},{"line_number":469,"context_line":"              ex_gw_port[\u0027id\u0027] !\u003d ri.ex_gw_port[\u0027id\u0027]):"},{"line_number":470,"context_line":"            self.external_gateway_removed(ri, ri.ex_gw_port,"},{"line_number":471,"context_line":"                                          interface_name, internal_cidrs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_6071cadf","line":468,"updated":"2014-05-23 10:56:42.000000000","message":"Should updates be allowed?\n\nWhat about L3 services that are using the router? For example, if VPN has a connection established and the GW is changed.","commit_id":"ed29406f8dbf880d4287bca21ac3afe71ae9cc55"},{"author":{"_account_id":8646,"name":"yangxurong","email":"yangxurong@huawei.com","username":"yangxurong"},"change_message_id":"861edc9935ade6a7f7007058d1f2136ec6348337","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        elif not ex_gw_port and ri.ex_gw_port:"},{"line_number":466,"context_line":"            self.external_gateway_removed(ri, ri.ex_gw_port,"},{"line_number":467,"context_line":"                                          interface_name, internal_cidrs)"},{"line_number":468,"context_line":"        elif (ex_gw_port and ri.ex_gw_port and"},{"line_number":469,"context_line":"              ex_gw_port[\u0027id\u0027] !\u003d ri.ex_gw_port[\u0027id\u0027]):"},{"line_number":470,"context_line":"            self.external_gateway_removed(ri, ri.ex_gw_port,"},{"line_number":471,"context_line":"                                          interface_name, internal_cidrs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_08107d4d","line":468,"in_reply_to":"3ae8d1ca_17741cce","updated":"2014-05-27 14:34:53.000000000","message":"ok?yes,VPN seems to have some problems when updating or deleting the router, but from my perspective,i still think it\u0027s another problem and i will track it.","commit_id":"ed29406f8dbf880d4287bca21ac3afe71ae9cc55"},{"author":{"_account_id":8646,"name":"yangxurong","email":"yangxurong@huawei.com","username":"yangxurong"},"change_message_id":"f1421f58250e7adda419014c2ad2d34003c7f677","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        elif not ex_gw_port and ri.ex_gw_port:"},{"line_number":466,"context_line":"            self.external_gateway_removed(ri, ri.ex_gw_port,"},{"line_number":467,"context_line":"                                          interface_name, internal_cidrs)"},{"line_number":468,"context_line":"        elif (ex_gw_port and ri.ex_gw_port and"},{"line_number":469,"context_line":"              ex_gw_port[\u0027id\u0027] !\u003d ri.ex_gw_port[\u0027id\u0027]):"},{"line_number":470,"context_line":"            self.external_gateway_removed(ri, ri.ex_gw_port,"},{"line_number":471,"context_line":"                                          interface_name, internal_cidrs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_eeafe129","line":468,"in_reply_to":"3ae8d1ca_2e3469dd","updated":"2014-05-27 12:33:06.000000000","message":"suppose VPN is wrong, I will report another bug because the code seemly become more complex. if no updating, removing case has some problems simultaneously. :)","commit_id":"ed29406f8dbf880d4287bca21ac3afe71ae9cc55"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"ea24d9c74e364632a4bf2b181e69211d3bfaed16","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        elif not ex_gw_port and ri.ex_gw_port:"},{"line_number":466,"context_line":"            self.external_gateway_removed(ri, ri.ex_gw_port,"},{"line_number":467,"context_line":"                                          interface_name, internal_cidrs)"},{"line_number":468,"context_line":"        elif (ex_gw_port and ri.ex_gw_port and"},{"line_number":469,"context_line":"              ex_gw_port[\u0027id\u0027] !\u003d ri.ex_gw_port[\u0027id\u0027]):"},{"line_number":470,"context_line":"            self.external_gateway_removed(ri, ri.ex_gw_port,"},{"line_number":471,"context_line":"                                          interface_name, internal_cidrs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_17741cce","line":468,"in_reply_to":"3ae8d1ca_eeafe129","updated":"2014-05-27 13:49:03.000000000","message":"You may want to confirm with Nachi Ueno about VPN use case. I would think there would be problems changing the gateway IP from under an existing VPN connection.","commit_id":"ed29406f8dbf880d4287bca21ac3afe71ae9cc55"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"eec25c362eeaaefc75a56e38bacd62f9957ba7ef","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        elif not ex_gw_port and ri.ex_gw_port:"},{"line_number":466,"context_line":"            self.external_gateway_removed(ri, ri.ex_gw_port,"},{"line_number":467,"context_line":"                                          interface_name, internal_cidrs)"},{"line_number":468,"context_line":"        elif (ex_gw_port and ri.ex_gw_port and"},{"line_number":469,"context_line":"              ex_gw_port[\u0027id\u0027] !\u003d ri.ex_gw_port[\u0027id\u0027]):"},{"line_number":470,"context_line":"            self.external_gateway_removed(ri, ri.ex_gw_port,"},{"line_number":471,"context_line":"                                          interface_name, internal_cidrs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_2e3469dd","line":468,"in_reply_to":"5adbc538_751d6373","updated":"2014-05-27 12:06:35.000000000","message":"I\u0027ll let others chime in, but there seems to be an inconsistency between what is in the documentation, what is in the REST definition, and what can happen in L2 services. I don\u0027t think it should be addressed as a separate bug, as this change could break VPN code.","commit_id":"ed29406f8dbf880d4287bca21ac3afe71ae9cc55"},{"author":{"_account_id":8646,"name":"yangxurong","email":"yangxurong@huawei.com","username":"yangxurong"},"change_message_id":"100e31af7baf6f4aff725fca59b41cfad3b09186","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        elif not ex_gw_port and ri.ex_gw_port:"},{"line_number":466,"context_line":"            self.external_gateway_removed(ri, ri.ex_gw_port,"},{"line_number":467,"context_line":"                                          interface_name, internal_cidrs)"},{"line_number":468,"context_line":"        elif (ex_gw_port and ri.ex_gw_port and"},{"line_number":469,"context_line":"              ex_gw_port[\u0027id\u0027] !\u003d ri.ex_gw_port[\u0027id\u0027]):"},{"line_number":470,"context_line":"            self.external_gateway_removed(ri, ri.ex_gw_port,"},{"line_number":471,"context_line":"                                          interface_name, internal_cidrs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5adbc538_751d6373","line":468,"in_reply_to":"7adec928_6071cadf","updated":"2014-05-26 03:49:48.000000000","message":"1.l3_ext_gw_mode.py\nEXTENDED_ATTRIBUTES_2_0 \u003d {\n    \u0027routers\u0027: {l3.EXTERNAL_GW_INFO:\n                {\u0027allow_post\u0027: True,\n                 \u0027allow_put\u0027: True,\n                 \u0027is_visible\u0027: True,\n                 \u0027default\u0027: None,\n                 \u0027enforce_policy\u0027: True,\n                 \u0027validate\u0027:\n                 {\u0027type:dict_or_nodata\u0027:\n                  {\u0027network_id\u0027: {\u0027type:uuid\u0027: None, \u0027required\u0027: True},\n                   \u0027enable_snat\u0027: {\u0027type:boolean\u0027: None, \u0027required\u0027: False,\n                                   \u0027convert_to\u0027: attrs.convert_to_boolean}}\n                  }}}}\n\n\nL3_ext_gw_mode allows to update external_gw_info, and has been implemented in RestAPI,but l3 don\u0027t fit.\n2. when it comes to VPN, i also check the code, removing or updating operation maybe cause some problem as you have pointed. I\u0027m verifying it, if any problem, i will report another bug.","commit_id":"ed29406f8dbf880d4287bca21ac3afe71ae9cc55"}],"neutron/tests/unit/test_l3_agent.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"d7d204bc1a8b92c3c12d7491b255dcc613ec9b7f","unresolved":false,"context_lines":[{"line_number":843,"context_line":"        stale_devname \u003d agent.get_external_device_name(old_port[\u0027id\u0027])"},{"line_number":844,"context_line":"        new_devname \u003d agent.get_external_device_name(new_port[\u0027id\u0027])"},{"line_number":845,"context_line":""},{"line_number":846,"context_line":"        int_ports \u003d []"},{"line_number":847,"context_line":"        int_ports.append({\u0027id\u0027: _uuid(),"},{"line_number":848,"context_line":"                          \u0027network_id\u0027: _uuid(),"},{"line_number":849,"context_line":"                          \u0027admin_state_up\u0027: True,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_8a1837d4","line":846,"updated":"2014-06-05 17:49:38.000000000","message":"append is unnecessary\n\nint_port \u003d [\n    {\n        \u0027id\u0027: _uuid(),\n        \u0027network_id\u0027: _uuid(),\n        ...\n    }\n]","commit_id":"e5e7ad3b5ae9b2767753e157e2a703f39b36c86a"}]}
