)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15905,"name":"Cao Xuan Hoang","email":"xuanhoangqb@gmail.com","username":"hoangcx"},"change_message_id":"ad3981b96c620ee346f941f824d42cbae5cde65d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"fa6399be_c235cfda","line":15,"updated":"2016-10-12 09:20:21.000000000","message":"Same comment on https://review.openstack.org/#/c/384042/\nThanks!","commit_id":"a1aca5c9804e31c1bbc516451429692c7122916e"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"7334eb3eb49a1b0ff7290a2a56378e58f73455e6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"fa6399be_eeff1ca8","line":15,"in_reply_to":"fa6399be_c235cfda","updated":"2016-10-12 11:07:50.000000000","message":"Done","commit_id":"a1aca5c9804e31c1bbc516451429692c7122916e"}],"doc/source/command-objects/router.rst":[{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"29fdffa79d5a15331adc3de865f318d1a0820a8d","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    Router(s) to delete (name or ID)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"router gateway set"},{"line_number":119,"context_line":"------------------"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Set the gateway information for router"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a8ec9b2_f7a697ac","line":118,"updated":"2016-09-17 00:10:35.000000000","message":"I wonder if this should be \"router add network\" given the 2 required parameters are network and router.  This would be similar to existing commands to add port or subnet interfaces.","commit_id":"3886ac6c97aba4be74939fb1a30f830e63d846cc"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"44164e75663fe97de15fa036a9565d9160508e64","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    Router(s) to delete (name or ID)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"router gateway set"},{"line_number":119,"context_line":"------------------"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Set the gateway information for router"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a8ec9b2_6752b968","line":118,"in_reply_to":"7a8ec9b2_4a5cef7c","updated":"2016-09-19 05:00:31.000000000","message":"what about `router add gateway`?","commit_id":"3886ac6c97aba4be74939fb1a30f830e63d846cc"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"05f1a3bcd4965864fe4cbffa58475a4bc7f61a1a","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    Router(s) to delete (name or ID)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"router gateway set"},{"line_number":119,"context_line":"------------------"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Set the gateway information for router"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a8ec9b2_4a5cef7c","line":118,"in_reply_to":"7a8ec9b2_b7c24c83","updated":"2016-09-18 11:03:39.000000000","message":"I think we can see a gateway as a special network. Most of the time, it is public network. I\u0027d prefer to do this in a command with a name that users are able to see it is setting a gateway. Can we do it in \"router set\" command ?","commit_id":"3886ac6c97aba4be74939fb1a30f830e63d846cc"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"839bb298fe09cc6661c7ea3626019ce88c13f387","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    Router(s) to delete (name or ID)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"router gateway set"},{"line_number":119,"context_line":"------------------"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Set the gateway information for router"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a8ec9b2_b7c24c83","line":118,"in_reply_to":"7a8ec9b2_f7a697ac","updated":"2016-09-17 04:06:50.000000000","message":"A router can be connected to a network via ports.\nBut the router is also allowed to reference a network via gateway.\n\nIf I say \"add network \" it can , in theory , mean both:\n- adding a gateway\n- adding a port to the network \n\nWhat do you think?","commit_id":"3886ac6c97aba4be74939fb1a30f830e63d846cc"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"0d3e39597744711c70f606b288b7913b0b8b6a99","unresolved":false,"context_lines":[{"line_number":242,"context_line":""},{"line_number":243,"context_line":".. option:: --enable-snat"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    Enable Source NAT"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":".. option:: --disable-snat"},{"line_number":248,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"fa6399be_74c4ef91","line":245,"range":{"start_line":245,"start_character":4,"end_line":245,"end_character":21},"updated":"2016-10-11 12:02:42.000000000","message":"We\u0027d better doc which one is default. We\u0027d better also doc that these three options should be used only if --external-gateway is specified.","commit_id":"81ad20807b62e3ea4c3beed9276036422f9b9585"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"4dfa47bb1146db5a6bf5ba4aae15c1ec1fd994fd","unresolved":false,"context_lines":[{"line_number":242,"context_line":""},{"line_number":243,"context_line":".. option:: --enable-snat"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    Enable Source NAT"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":".. option:: --disable-snat"},{"line_number":248,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"fa6399be_d41dbbbe","line":245,"range":{"start_line":245,"start_character":4,"end_line":245,"end_character":21},"in_reply_to":"fa6399be_74c4ef91","updated":"2016-10-11 12:05:09.000000000","message":"Ar...sorry. It is set command. So please ignore the \"default\" thing... :)","commit_id":"81ad20807b62e3ea4c3beed9276036422f9b9585"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"cce41685d03081b9798d704ff0d520cf96bfe65c","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        [--description \u003cdescription\u003e]"},{"line_number":200,"context_line":"        [--route destination\u003d\u003csubnet\u003e,gateway\u003d\u003cip-address\u003e | --no-route]"},{"line_number":201,"context_line":"        [--ha | --no-ha]"},{"line_number":202,"context_line":"        [--external-gateway \u003cnetwork\u003e [--enable-snat|--disable-snat] [--fixed-ip subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e]]"},{"line_number":203,"context_line":"        \u003crouter\u003e"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":".. option:: --name \u003cname\u003e"}],"source_content_type":"text/x-rst","patch_set":21,"id":"fa6399be_a1e0aefb","line":202,"updated":"2016-10-19 21:19:26.000000000","message":"a follow-up change will implement router unset --external-gateway?","commit_id":"8b672b979973b920a496c4b7bc4c2459db5f9b30"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"253099719fac2e689bea5fd88beed166e59b6391","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        [--description \u003cdescription\u003e]"},{"line_number":200,"context_line":"        [--route destination\u003d\u003csubnet\u003e,gateway\u003d\u003cip-address\u003e | --no-route]"},{"line_number":201,"context_line":"        [--ha | --no-ha]"},{"line_number":202,"context_line":"        [--external-gateway \u003cnetwork\u003e [--enable-snat|--disable-snat] [--fixed-ip subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e]]"},{"line_number":203,"context_line":"        \u003crouter\u003e"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":".. option:: --name \u003cname\u003e"}],"source_content_type":"text/x-rst","patch_set":21,"id":"9a629dbe_dd32b7a6","line":202,"in_reply_to":"fa6399be_a1e0aefb","updated":"2016-11-10 10:30:28.000000000","message":"Yes","commit_id":"8b672b979973b920a496c4b7bc4c2459db5f9b30"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9cdffceeba09701a04fa7d5009e50d25905b627c","unresolved":false,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    External Network used as router\u0027s gateway (name or ID)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":".. option:: --enable-snat"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    Enable Source NAT"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"9a629dbe_4c6b0d1e","line":252,"range":{"start_line":252,"start_character":21,"end_line":252,"end_character":25},"updated":"2016-11-12 01:07:46.000000000","message":"is \"snat\" a common short form for \"source NAT\"? if so that is OK, same reasoning as IP and HA, but if it\u0027s not common I\u0027d prefer to spell it out ``--enable-source-nat``","commit_id":"8b672b979973b920a496c4b7bc4c2459db5f9b30"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"fe26ea4d57f5cca04b3b29f0a398ded4160112ca","unresolved":false,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    External Network used as router\u0027s gateway (name or ID)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":".. option:: --enable-snat"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    Enable Source NAT"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"7a77a97e_4da4cf56","line":252,"range":{"start_line":252,"start_character":21,"end_line":252,"end_character":25},"in_reply_to":"9a629dbe_4c6b0d1e","updated":"2016-11-15 07:42:12.000000000","message":"snat is a common form, and the same has been written in the help description \" Enable Source NAT \"","commit_id":"8b672b979973b920a496c4b7bc4c2459db5f9b30"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"043fc51e94ee4201669d51640451a2eb4d99fece","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        [--description \u003cdescription\u003e]"},{"line_number":200,"context_line":"        [--route destination\u003d\u003csubnet\u003e,gateway\u003d\u003cip-address\u003e | --no-route]"},{"line_number":201,"context_line":"        [--ha | --no-ha]"},{"line_number":202,"context_line":"        [--external-gateway \u003cnetwork\u003e [--enable-snat|--disable-snat] [--fixed-ip subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e]]"},{"line_number":203,"context_line":"        \u003crouter\u003e"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":".. option:: --name \u003cname\u003e"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5a74a57a_2187a9d8","line":202,"updated":"2016-11-29 18:55:11.000000000","message":"does it make sense to tackle the unset as part of the same patch? If not, do you have a follow-up ready?","commit_id":"1bd1b105d04476b946c83856b64176858c0bafcf"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"59129552ae98c9bec5526a378d015732cc9be7e3","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        [--description \u003cdescription\u003e]"},{"line_number":200,"context_line":"        [--route destination\u003d\u003csubnet\u003e,gateway\u003d\u003cip-address\u003e | --no-route]"},{"line_number":201,"context_line":"        [--ha | --no-ha]"},{"line_number":202,"context_line":"        [--external-gateway \u003cnetwork\u003e [--enable-snat|--disable-snat] [--fixed-ip subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e]]"},{"line_number":203,"context_line":"        \u003crouter\u003e"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":".. option:: --name \u003cname\u003e"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5a74a57a_fd63893f","line":202,"in_reply_to":"5a74a57a_2187a9d8","updated":"2016-11-30 01:20:46.000000000","message":"https://review.openstack.org/#/c/404183/1","commit_id":"1bd1b105d04476b946c83856b64176858c0bafcf"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"61f6c22d2443911f44633962fbaf31935835cc5e","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        [--description \u003cdescription\u003e]"},{"line_number":200,"context_line":"        [--route destination\u003d\u003csubnet\u003e,gateway\u003d\u003cip-address\u003e | --no-route]"},{"line_number":201,"context_line":"        [--ha | --no-ha]"},{"line_number":202,"context_line":"        [--external-gateway \u003cnetwork\u003e [--enable-snat|--disable-snat] [--fixed-ip subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e]]"},{"line_number":203,"context_line":"        \u003crouter\u003e"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":".. option:: --name \u003cname\u003e"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5a74a57a_9da9b527","line":202,"in_reply_to":"5a74a57a_fd63893f","updated":"2016-11-30 01:26:00.000000000","message":"thanks","commit_id":"1bd1b105d04476b946c83856b64176858c0bafcf"}],"openstackclient/network/v2/router.py":[{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"a4bbcbb17a9eaddcf89ba92e80f3473d6c04ca45","unresolved":false,"context_lines":[{"line_number":505,"context_line":"        if parsed_args.fixed_ip:"},{"line_number":506,"context_line":"            ips \u003d []"},{"line_number":507,"context_line":"            for ip_spec in parsed_args.fixed_ip:"},{"line_number":508,"context_line":"                subnet_name_id \u003d ip_spec.get(\u0027subnet_id\u0027)"},{"line_number":509,"context_line":"                if subnet_name_id:"},{"line_number":510,"context_line":"                    subnet \u003d client.find_subnet(subnet_name_id,"},{"line_number":511,"context_line":"                                                ignore_missing\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a8bc5a2_a879c031","line":508,"range":{"start_line":508,"start_character":16,"end_line":508,"end_character":30},"updated":"2016-09-22 14:08:12.000000000","message":"We already have the subnet id right? Why do we have to do #L509-#L512?","commit_id":"43bd91f26842f10ddb6a6047fc68835e10421971"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"904fd8f0a16293c0a99a4f1a131152f4742aa6c9","unresolved":false,"context_lines":[{"line_number":505,"context_line":"        if parsed_args.fixed_ip:"},{"line_number":506,"context_line":"            ips \u003d []"},{"line_number":507,"context_line":"            for ip_spec in parsed_args.fixed_ip:"},{"line_number":508,"context_line":"                subnet_name_id \u003d ip_spec.get(\u0027subnet_id\u0027)"},{"line_number":509,"context_line":"                if subnet_name_id:"},{"line_number":510,"context_line":"                    subnet \u003d client.find_subnet(subnet_name_id,"},{"line_number":511,"context_line":"                                                ignore_missing\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a8bc5a2_a4cb4d52","line":508,"range":{"start_line":508,"start_character":16,"end_line":508,"end_character":30},"in_reply_to":"5a8bc5a2_a879c031","updated":"2016-09-24 08:14:05.000000000","message":"No, if subnet_id is not in the dictionary, then ID would not be available.","commit_id":"43bd91f26842f10ddb6a6047fc68835e10421971"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"0d3e39597744711c70f606b288b7913b0b8b6a99","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        # Therefore, once the router is updated, it will go on to"},{"line_number":498,"context_line":"        # change the external gateway attributes"},{"line_number":499,"context_line":"        if parsed_args.external_gateway:"},{"line_number":500,"context_line":"            print(\"Going to update gateway attributes\")"},{"line_number":501,"context_line":"            gateway_attrs \u003d {}"},{"line_number":502,"context_line":"            network \u003d client.find_network("},{"line_number":503,"context_line":"                parsed_args.external_gateway, ignore_missing\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa6399be_d4c5bb5b","line":500,"range":{"start_line":500,"start_character":19,"end_line":500,"end_character":53},"updated":"2016-10-11 12:02:42.000000000","message":"Do we need to print it here ?  How about a log.debug() ?  And don\u0027t forget _(). :)","commit_id":"81ad20807b62e3ea4c3beed9276036422f9b9585"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"492084263c4b554df72078efd38afed0a7e3fa14","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        # Therefore, once the router is updated, it will go on to"},{"line_number":498,"context_line":"        # change the external gateway attributes"},{"line_number":499,"context_line":"        if parsed_args.external_gateway:"},{"line_number":500,"context_line":"            print(\"Going to update gateway attributes\")"},{"line_number":501,"context_line":"            gateway_attrs \u003d {}"},{"line_number":502,"context_line":"            network \u003d client.find_network("},{"line_number":503,"context_line":"                parsed_args.external_gateway, ignore_missing\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa6399be_0e38d09f","line":500,"range":{"start_line":500,"start_character":19,"end_line":500,"end_character":53},"in_reply_to":"fa6399be_a2229bff","updated":"2016-10-12 11:06:50.000000000","message":"I do not think the 2 API calls should be transparent to the user.\nThats because, if , for example, the name of the router is updated, and we fail to update the external-gateway attributes, then CLI will show failure, but the router name would be updated( i.e. , the set CLI would have PARTIAL FAILURE )\n\nUnless we support rollback, partial failure condition will exist.\nlog.info() is not too useful for the user, unless it shows the message on stdout/stderr","commit_id":"81ad20807b62e3ea4c3beed9276036422f9b9585"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"e45196febe7ebb88fdfc25ec770f84d20c44a8dd","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        # Therefore, once the router is updated, it will go on to"},{"line_number":498,"context_line":"        # change the external gateway attributes"},{"line_number":499,"context_line":"        if parsed_args.external_gateway:"},{"line_number":500,"context_line":"            print(\"Going to update gateway attributes\")"},{"line_number":501,"context_line":"            gateway_attrs \u003d {}"},{"line_number":502,"context_line":"            network \u003d client.find_network("},{"line_number":503,"context_line":"                parsed_args.external_gateway, ignore_missing\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa6399be_a2229bff","line":500,"range":{"start_line":500,"start_character":19,"end_line":500,"end_character":53},"in_reply_to":"fa6399be_a8c5273d","updated":"2016-10-12 09:35:33.000000000","message":"Well, I think the 2 different API calls could be transparent to users. And if you want to inform the users, we\u0027d better use log.info() so that we can also record it in the log.","commit_id":"81ad20807b62e3ea4c3beed9276036422f9b9585"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"1ce0a7a09c5b34e411ddab4142fcfdee597056bc","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        # Therefore, once the router is updated, it will go on to"},{"line_number":498,"context_line":"        # change the external gateway attributes"},{"line_number":499,"context_line":"        if parsed_args.external_gateway:"},{"line_number":500,"context_line":"            print(\"Going to update gateway attributes\")"},{"line_number":501,"context_line":"            gateway_attrs \u003d {}"},{"line_number":502,"context_line":"            network \u003d client.find_network("},{"line_number":503,"context_line":"                parsed_args.external_gateway, ignore_missing\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa6399be_a8c5273d","line":500,"range":{"start_line":500,"start_character":19,"end_line":500,"end_character":53},"in_reply_to":"fa6399be_d4c5bb5b","updated":"2016-10-12 04:50:03.000000000","message":"As the set command for external gateway and other router properties are handled differently, therefore there may be a chance that the normal \"set \" command, with the older attributes works, but the \"external gateway\" attributes do not update the router.\n\nFor example, if I try to set the Name and the external gateway of the router, and as updating Name and External Gateway attributes are handled by 2 different commands, therefore it is possible that the NAME is updated but the External Gateway info is not.\n\nTo ensure that the user is informed about the same, I added this print command","commit_id":"81ad20807b62e3ea4c3beed9276036422f9b9585"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"0d3e39597744711c70f606b288b7913b0b8b6a99","unresolved":false,"context_lines":[{"line_number":502,"context_line":"            network \u003d client.find_network("},{"line_number":503,"context_line":"                parsed_args.external_gateway, ignore_missing\u003dFalse)"},{"line_number":504,"context_line":"            gateway_attrs[\u0027network_id\u0027] \u003d network.id"},{"line_number":505,"context_line":"            if parsed_args.disable_snat:"},{"line_number":506,"context_line":"                gateway_attrs[\u0027enable_snat\u0027] \u003d False"},{"line_number":507,"context_line":"            if parsed_args.enable_snat:"},{"line_number":508,"context_line":"                gateway_attrs[\u0027enable_snat\u0027] \u003d True"},{"line_number":509,"context_line":"            if parsed_args.fixed_ip:"},{"line_number":510,"context_line":"                ips \u003d []"},{"line_number":511,"context_line":"                for ip_spec in parsed_args.fixed_ip:"},{"line_number":512,"context_line":"                    subnet_name_id \u003d ip_spec.get(\u0027subnet_id\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa6399be_b4ada78a","line":509,"range":{"start_line":505,"start_character":0,"end_line":509,"end_character":36},"updated":"2016-10-11 12:02:42.000000000","message":"If the user specify these three option without specifying --external-gateway, we are not handling this here. I know it could make the implementation more complicated here. Sorry. :(","commit_id":"81ad20807b62e3ea4c3beed9276036422f9b9585"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"e45196febe7ebb88fdfc25ec770f84d20c44a8dd","unresolved":false,"context_lines":[{"line_number":502,"context_line":"            network \u003d client.find_network("},{"line_number":503,"context_line":"                parsed_args.external_gateway, ignore_missing\u003dFalse)"},{"line_number":504,"context_line":"            gateway_attrs[\u0027network_id\u0027] \u003d network.id"},{"line_number":505,"context_line":"            if parsed_args.disable_snat:"},{"line_number":506,"context_line":"                gateway_attrs[\u0027enable_snat\u0027] \u003d False"},{"line_number":507,"context_line":"            if parsed_args.enable_snat:"},{"line_number":508,"context_line":"                gateway_attrs[\u0027enable_snat\u0027] \u003d True"},{"line_number":509,"context_line":"            if parsed_args.fixed_ip:"},{"line_number":510,"context_line":"                ips \u003d []"},{"line_number":511,"context_line":"                for ip_spec in parsed_args.fixed_ip:"},{"line_number":512,"context_line":"                    subnet_name_id \u003d ip_spec.get(\u0027subnet_id\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa6399be_82f91783","line":509,"range":{"start_line":505,"start_character":0,"end_line":509,"end_character":36},"in_reply_to":"fa6399be_28ff5768","updated":"2016-10-12 09:35:33.000000000","message":"Yes, you are right. But the users are not aware of that if they do so. I mean shall we check that and print out a message ?","commit_id":"81ad20807b62e3ea4c3beed9276036422f9b9585"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"492084263c4b554df72078efd38afed0a7e3fa14","unresolved":false,"context_lines":[{"line_number":502,"context_line":"            network \u003d client.find_network("},{"line_number":503,"context_line":"                parsed_args.external_gateway, ignore_missing\u003dFalse)"},{"line_number":504,"context_line":"            gateway_attrs[\u0027network_id\u0027] \u003d network.id"},{"line_number":505,"context_line":"            if parsed_args.disable_snat:"},{"line_number":506,"context_line":"                gateway_attrs[\u0027enable_snat\u0027] \u003d False"},{"line_number":507,"context_line":"            if parsed_args.enable_snat:"},{"line_number":508,"context_line":"                gateway_attrs[\u0027enable_snat\u0027] \u003d True"},{"line_number":509,"context_line":"            if parsed_args.fixed_ip:"},{"line_number":510,"context_line":"                ips \u003d []"},{"line_number":511,"context_line":"                for ip_spec in parsed_args.fixed_ip:"},{"line_number":512,"context_line":"                    subnet_name_id \u003d ip_spec.get(\u0027subnet_id\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa6399be_ae6e0494","line":509,"range":{"start_line":505,"start_character":0,"end_line":509,"end_character":36},"in_reply_to":"fa6399be_82f91783","updated":"2016-10-12 11:06:50.000000000","message":"If the users run the CLI without --external-gateway information , but with --enable-snat , then the enable-snat information would not be updated.\nThat , the user can see by router-show CLI.\n\nBy the way, I think we need to modify the router-show CLI as well, to show enable-snat and other information , isnt it ?","commit_id":"81ad20807b62e3ea4c3beed9276036422f9b9585"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"1ce0a7a09c5b34e411ddab4142fcfdee597056bc","unresolved":false,"context_lines":[{"line_number":502,"context_line":"            network \u003d client.find_network("},{"line_number":503,"context_line":"                parsed_args.external_gateway, ignore_missing\u003dFalse)"},{"line_number":504,"context_line":"            gateway_attrs[\u0027network_id\u0027] \u003d network.id"},{"line_number":505,"context_line":"            if parsed_args.disable_snat:"},{"line_number":506,"context_line":"                gateway_attrs[\u0027enable_snat\u0027] \u003d False"},{"line_number":507,"context_line":"            if parsed_args.enable_snat:"},{"line_number":508,"context_line":"                gateway_attrs[\u0027enable_snat\u0027] \u003d True"},{"line_number":509,"context_line":"            if parsed_args.fixed_ip:"},{"line_number":510,"context_line":"                ips \u003d []"},{"line_number":511,"context_line":"                for ip_spec in parsed_args.fixed_ip:"},{"line_number":512,"context_line":"                    subnet_name_id \u003d ip_spec.get(\u0027subnet_id\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa6399be_28ff5768","line":509,"range":{"start_line":505,"start_character":0,"end_line":509,"end_character":36},"in_reply_to":"fa6399be_b4ada78a","updated":"2016-10-12 04:50:03.000000000","message":"This \"if\" loop ensures that even if the user passes the attributes without the --external_gateway option, they are not processed.\n\nUser can run the help section to confirm the same","commit_id":"81ad20807b62e3ea4c3beed9276036422f9b9585"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"d55b832ba75e673f398b803258e877103715389a","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        # command. It appears that changing the ha state is supported by"},{"line_number":439,"context_line":"        # neutron under certain conditions."},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        # TODO(tangchen): Support setting \u0027external_gateway_info\u0027 property in"},{"line_number":442,"context_line":"        # \u0027router set\u0027 command."},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa6399be_ded2eeff","side":"PARENT","line":441,"updated":"2016-10-12 21:09:58.000000000","message":"Presumably this is what this review implemented, you can remove the TODO comment.","commit_id":"762f2f2c34814b8bfc615696918d8cb49b93a1dd"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"d55b832ba75e673f398b803258e877103715389a","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        # Therefore, once the router is updated, it will go on to"},{"line_number":498,"context_line":"        # change the external gateway attributes"},{"line_number":499,"context_line":"        if parsed_args.external_gateway:"},{"line_number":500,"context_line":"            print(\"Going to update gateway attributes\")"},{"line_number":501,"context_line":"            gateway_attrs \u003d {}"},{"line_number":502,"context_line":"            network \u003d client.find_network("},{"line_number":503,"context_line":"                parsed_args.external_gateway, ignore_missing\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa6399be_9e36b650","line":500,"updated":"2016-10-12 21:09:58.000000000","message":"Do not do this.  at best it should be a log at info level, there is no information for the user here if there is no error.","commit_id":"c6fb4ae29607b558d11c0a773676f016957682cf"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"d55b832ba75e673f398b803258e877103715389a","unresolved":false,"context_lines":[{"line_number":516,"context_line":"                        ip_spec[\u0027subnet_id\u0027] \u003d subnet.id"},{"line_number":517,"context_line":"                    ips.append(ip_spec)"},{"line_number":518,"context_line":"                gateway_attrs[\u0027external_fixed_ips\u0027] \u003d ips"},{"line_number":519,"context_line":"            client.router_add_gateway(obj, **gateway_attrs)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"class ShowRouter(command.ShowOne):"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa6399be_fed7b2bc","line":519,"updated":"2016-10-12 21:09:58.000000000","message":"heh, is an update also done in an add method in the SDK?","commit_id":"c6fb4ae29607b558d11c0a773676f016957682cf"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"765bb5c31796c1d99a39856a4b1abbe681bf2a2b","unresolved":false,"context_lines":[{"line_number":516,"context_line":"                        ip_spec[\u0027subnet_id\u0027] \u003d subnet.id"},{"line_number":517,"context_line":"                    ips.append(ip_spec)"},{"line_number":518,"context_line":"                gateway_attrs[\u0027external_fixed_ips\u0027] \u003d ips"},{"line_number":519,"context_line":"            client.router_add_gateway(obj, **gateway_attrs)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"class ShowRouter(command.ShowOne):"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa6399be_38a5acb4","line":519,"in_reply_to":"fa6399be_fed7b2bc","updated":"2016-11-29 13:56:12.000000000","message":"Yup","commit_id":"c6fb4ae29607b558d11c0a773676f016957682cf"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"cce41685d03081b9798d704ff0d520cf96bfe65c","unresolved":false,"context_lines":[{"line_number":450,"context_line":"            \u0027--external-gateway\u0027,"},{"line_number":451,"context_line":"            metavar\u003d\"\u003cnetwork\u003e\","},{"line_number":452,"context_line":"            help\u003d_(\"External Network used as router\u0027s gateway (name or ID)\")"},{"line_number":453,"context_line":"        )"},{"line_number":454,"context_line":"        parser.add_argument("},{"line_number":455,"context_line":"            \u0027--fixed-ip\u0027,"},{"line_number":456,"context_line":"            metavar\u003d\u0027subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_81e72ae3","line":453,"updated":"2016-10-19 21:19:26.000000000","message":"Should we crash when --fixed-ip or --*-snat is provided without --external-gateway?","commit_id":"8b672b979973b920a496c4b7bc4c2459db5f9b30"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"253099719fac2e689bea5fd88beed166e59b6391","unresolved":false,"context_lines":[{"line_number":450,"context_line":"            \u0027--external-gateway\u0027,"},{"line_number":451,"context_line":"            metavar\u003d\"\u003cnetwork\u003e\","},{"line_number":452,"context_line":"            help\u003d_(\"External Network used as router\u0027s gateway (name or ID)\")"},{"line_number":453,"context_line":"        )"},{"line_number":454,"context_line":"        parser.add_argument("},{"line_number":455,"context_line":"            \u0027--fixed-ip\u0027,"},{"line_number":456,"context_line":"            metavar\u003d\u0027subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_bda263ac","line":453,"in_reply_to":"fa6399be_81e72ae3","updated":"2016-11-10 10:30:28.000000000","message":"No, we should ideally avoid it for now.\nIf the user is confused, he/she can always see the help file.","commit_id":"8b672b979973b920a496c4b7bc4c2459db5f9b30"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"cce41685d03081b9798d704ff0d520cf96bfe65c","unresolved":false,"context_lines":[{"line_number":461,"context_line":"                   \"subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e \""},{"line_number":462,"context_line":"                   \"(repeat option to set multiple fixed IP addresses)\")"},{"line_number":463,"context_line":"        )"},{"line_number":464,"context_line":"        admin_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":465,"context_line":"        admin_group.add_argument("},{"line_number":466,"context_line":"            \u0027--enable-snat\u0027,"},{"line_number":467,"context_line":"            action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_c1968293","line":464,"range":{"start_line":464,"start_character":8,"end_line":464,"end_character":19},"updated":"2016-10-19 21:19:26.000000000","message":"admin_group is confusing, prefer snat_group","commit_id":"8b672b979973b920a496c4b7bc4c2459db5f9b30"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9cdffceeba09701a04fa7d5009e50d25905b627c","unresolved":false,"context_lines":[{"line_number":461,"context_line":"                   \"subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e \""},{"line_number":462,"context_line":"                   \"(repeat option to set multiple fixed IP addresses)\")"},{"line_number":463,"context_line":"        )"},{"line_number":464,"context_line":"        admin_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":465,"context_line":"        admin_group.add_argument("},{"line_number":466,"context_line":"            \u0027--enable-snat\u0027,"},{"line_number":467,"context_line":"            action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_ec58618c","line":464,"range":{"start_line":464,"start_character":8,"end_line":464,"end_character":19},"in_reply_to":"fa6399be_c1968293","updated":"2016-11-12 01:07:46.000000000","message":"++","commit_id":"8b672b979973b920a496c4b7bc4c2459db5f9b30"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"253099719fac2e689bea5fd88beed166e59b6391","unresolved":false,"context_lines":[{"line_number":461,"context_line":"                   \"subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e \""},{"line_number":462,"context_line":"                   \"(repeat option to set multiple fixed IP addresses)\")"},{"line_number":463,"context_line":"        )"},{"line_number":464,"context_line":"        admin_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":465,"context_line":"        admin_group.add_argument("},{"line_number":466,"context_line":"            \u0027--enable-snat\u0027,"},{"line_number":467,"context_line":"            action\u003d\u0027store_true\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_5d94e741","line":464,"range":{"start_line":464,"start_character":8,"end_line":464,"end_character":19},"in_reply_to":"fa6399be_c1968293","updated":"2016-11-10 10:30:28.000000000","message":"Umm...  yeah , agreed!","commit_id":"8b672b979973b920a496c4b7bc4c2459db5f9b30"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"16010f489c73ee9419525a0ccca8f90aa92ddbf4","unresolved":false,"context_lines":[{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        client.update_router(obj, **attrs)"},{"line_number":505,"context_line":"        # The API call to set External Gateway of a router"},{"line_number":506,"context_line":"        # is different than updating the other router attributes"},{"line_number":507,"context_line":"        # Therefore, once the router is updated, it will go on to"},{"line_number":508,"context_line":"        # change the external gateway attributes"},{"line_number":509,"context_line":"        if parsed_args.external_gateway:"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_131c51c0","line":506,"updated":"2016-10-19 21:51:19.000000000","message":"This remark seems incorrect (see next comment)","commit_id":"8b672b979973b920a496c4b7bc4c2459db5f9b30"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"237874a192df3254cd2e1049b77950ef3f30b4b9","unresolved":false,"context_lines":[{"line_number":526,"context_line":"                        ip_spec[\u0027subnet_id\u0027] \u003d subnet.id"},{"line_number":527,"context_line":"                    ips.append(ip_spec)"},{"line_number":528,"context_line":"                gateway_attrs[\u0027external_fixed_ips\u0027] \u003d ips"},{"line_number":529,"context_line":"            client.router_add_gateway(obj, **gateway_attrs)"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":""},{"line_number":532,"context_line":"class ShowRouter(command.ShowOne):"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_73fe6d6c","line":529,"updated":"2016-10-19 21:47:54.000000000","message":"Why do we need a specific REST query to set router gateway?\n\nIMO, prefer:\n\n if parsed_args.external_gateway:\n    ...\n    attrs[\u0027external_gateway_info\u0027] \u003d gateway_attrs\n  client.update_router(.., **attrs)\n\nIt does a unique REST query and avoids a dummy query if attrs \u003d {}\n\n\n\nMoreover, with current implementation, i get the following error:\n\n #$ openstack router set myrouter --external-gateway pub\n \u0027Proxy\u0027 object has no attribute \u0027router_add_gateway\u0027","commit_id":"8b672b979973b920a496c4b7bc4c2459db5f9b30"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"253099719fac2e689bea5fd88beed166e59b6391","unresolved":false,"context_lines":[{"line_number":526,"context_line":"                        ip_spec[\u0027subnet_id\u0027] \u003d subnet.id"},{"line_number":527,"context_line":"                    ips.append(ip_spec)"},{"line_number":528,"context_line":"                gateway_attrs[\u0027external_fixed_ips\u0027] \u003d ips"},{"line_number":529,"context_line":"            client.router_add_gateway(obj, **gateway_attrs)"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":""},{"line_number":532,"context_line":"class ShowRouter(command.ShowOne):"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_fd969b3c","line":529,"in_reply_to":"fa6399be_73fe6d6c","updated":"2016-11-10 10:30:28.000000000","message":"Let me recheck. I didnt see such an issue.","commit_id":"8b672b979973b920a496c4b7bc4c2459db5f9b30"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"25d6f81d0ea829923f8b3508a3aa48301fff6e75","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        if parsed_args.external_gateway:"},{"line_number":531,"context_line":"            network \u003d client.find_network("},{"line_number":532,"context_line":"                parsed_args.external_gateway, ignore_missing\u003dFalse)"},{"line_number":533,"context_line":"            attrs[\u0027network_id\u0027] \u003d network.id"},{"line_number":534,"context_line":"            if parsed_args.disable_snat:"},{"line_number":535,"context_line":"                attrs[\u0027enable_snat\u0027] \u003d False"},{"line_number":536,"context_line":"            if parsed_args.enable_snat:"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a74a57a_f8c75261","line":533,"updated":"2016-11-29 01:21:52.000000000","message":"basic use for this does not work for me. \n\nThis is what neutron is expecting:\n\n\u0027{\"router\": {\"external_gateway_info\": {\"network_id\": \"2f634c5c-3d5f-4fe1-a87e-15e6c3fa62dc\"}}}\u0027\n\nThis is what you\u0027re submitting:\n\n\u0027{\"router\": {\"network_id\": \"2f634c5c-3d5f-4fe1-a87e-15e6c3fa62dc\"}}\u0027","commit_id":"288f0f1c82f609249f4845c62fc53715db655be0"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"3098303bd2eb7ed097ffd04c6101b7aec4efd0d4","unresolved":false,"context_lines":[{"line_number":500,"context_line":"            for route in parsed_args.routes:"},{"line_number":501,"context_line":"                route[\u0027nexthop\u0027] \u003d route.pop(\u0027gateway\u0027)"},{"line_number":502,"context_line":"            attrs[\u0027routes\u0027] \u003d obj.routes + parsed_args.routes"},{"line_number":503,"context_line":"        gateway_info \u003d {}"},{"line_number":504,"context_line":"        if parsed_args.external_gateway:"},{"line_number":505,"context_line":"            network \u003d client.find_network("},{"line_number":506,"context_line":"                parsed_args.external_gateway, ignore_missing\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a74a57a_79c32d38","line":503,"updated":"2016-11-29 13:18:23.000000000","message":"should be inside the if block","commit_id":"db6f73c58b4c4f659f08e838f3ee3434b00595e9"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"72c3d19ff2de6b68e3fe373c2983fdcad2212486","unresolved":false,"context_lines":[{"line_number":500,"context_line":"            for route in parsed_args.routes:"},{"line_number":501,"context_line":"                route[\u0027nexthop\u0027] \u003d route.pop(\u0027gateway\u0027)"},{"line_number":502,"context_line":"            attrs[\u0027routes\u0027] \u003d obj.routes + parsed_args.routes"},{"line_number":503,"context_line":"        gateway_info \u003d {}"},{"line_number":504,"context_line":"        if parsed_args.external_gateway:"},{"line_number":505,"context_line":"            network \u003d client.find_network("},{"line_number":506,"context_line":"                parsed_args.external_gateway, ignore_missing\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a74a57a_a8be4c62","line":503,"in_reply_to":"5a74a57a_79c32d38","updated":"2016-11-29 13:56:06.000000000","message":"guess thats a nit","commit_id":"db6f73c58b4c4f659f08e838f3ee3434b00595e9"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"043fc51e94ee4201669d51640451a2eb4d99fece","unresolved":false,"context_lines":[{"line_number":512,"context_line":"            if parsed_args.fixed_ip:"},{"line_number":513,"context_line":"                ips \u003d []"},{"line_number":514,"context_line":"                for ip_spec in parsed_args.fixed_ip:"},{"line_number":515,"context_line":"                    subnet_name_id \u003d ip_spec.get(\u0027subnet_id\u0027)"},{"line_number":516,"context_line":"                    if subnet_name_id:"},{"line_number":517,"context_line":"                        subnet \u003d client.find_subnet(subnet_name_id,"},{"line_number":518,"context_line":"                                                    ignore_missing\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a74a57a_e14db19a","line":515,"updated":"2016-11-29 18:55:11.000000000","message":"shouldn\u0027t this be \u0027subnet\u0027?\n\nBtw this doesn\u0027t work for me, as I get an invalid input. Neutron wants:\n\n{\"external_gateway_info\": {\"network_id\": \"2f634c5c-3d5f-4fe1-a87e-15e6c3fa62dc\", \"external_fixed_ips\": [{\"subnet_id\": \"7e622d0c-96cf-4a29-b655-08768063bc02\", \"ip_address\": \"172.24.4.44\"}]}}}\u0027\n\nYou\u0027re submitting:\n\n\u0027{\"router\": {\"external_gateway_info\": {\"network_id\": \"2f634c5c-3d5f-4fe1-a87e-15e6c3fa62dc\", \"external_fixed_ips\": [{\"subnet\": \"7e622d0c-96cf-4a29-b655-08768063bc02\", \"ip-address\": \"172.24.4.44\"}]}}}\u0027\n\nnote the _ vs -","commit_id":"1bd1b105d04476b946c83856b64176858c0bafcf"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"59129552ae98c9bec5526a378d015732cc9be7e3","unresolved":false,"context_lines":[{"line_number":512,"context_line":"            if parsed_args.fixed_ip:"},{"line_number":513,"context_line":"                ips \u003d []"},{"line_number":514,"context_line":"                for ip_spec in parsed_args.fixed_ip:"},{"line_number":515,"context_line":"                    subnet_name_id \u003d ip_spec.get(\u0027subnet_id\u0027)"},{"line_number":516,"context_line":"                    if subnet_name_id:"},{"line_number":517,"context_line":"                        subnet \u003d client.find_subnet(subnet_name_id,"},{"line_number":518,"context_line":"                                                    ignore_missing\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a74a57a_3d87c1d8","line":515,"in_reply_to":"5a74a57a_e14db19a","updated":"2016-11-30 01:20:46.000000000","message":"Ok, let me check.\nSorry for missing out earlier","commit_id":"1bd1b105d04476b946c83856b64176858c0bafcf"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8f28cc934888082001a201db9f37b25f52e0f551","unresolved":false,"context_lines":[{"line_number":484,"context_line":"            action\u003dparseractions.MultiKeyValueAction,"},{"line_number":485,"context_line":"            optional_keys\u003d[\u0027subnet\u0027, \u0027ip-address\u0027],"},{"line_number":486,"context_line":"            help\u003d_(\"Desired IP and/or subnet (name or ID)\""},{"line_number":487,"context_line":"                   \"on external network: \""},{"line_number":488,"context_line":"                   \"subnet\u003d\u003csubnet\u003e,ip-address\u003d\u003cip-address\u003e \""},{"line_number":489,"context_line":"                   \"(repeat option to set multiple fixed IP addresses)\")"},{"line_number":490,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":28,"id":"1a6eadb0_53a180a2","line":487,"range":{"start_line":487,"start_character":20,"end_line":487,"end_character":39},"updated":"2016-12-14 10:36:05.000000000","message":"I\u0027d say \u0027on external gateway\u0027 instead.","commit_id":"008e61f3c709a15e67ddf64a6c6108b4e5152a4f"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8f28cc934888082001a201db9f37b25f52e0f551","unresolved":false,"context_lines":[{"line_number":492,"context_line":"        snat_group.add_argument("},{"line_number":493,"context_line":"            \u0027--enable-snat\u0027,"},{"line_number":494,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":495,"context_line":"            help\u003d_(\"Enable Source NAT\")"},{"line_number":496,"context_line":"        )"},{"line_number":497,"context_line":"        snat_group.add_argument("},{"line_number":498,"context_line":"            \u0027--disable-snat\u0027,"}],"source_content_type":"text/x-python","patch_set":28,"id":"1a6eadb0_b38c9436","line":495,"updated":"2016-12-14 10:36:05.000000000","message":"I\u0027d add on external gateway.","commit_id":"008e61f3c709a15e67ddf64a6c6108b4e5152a4f"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8f28cc934888082001a201db9f37b25f52e0f551","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        snat_group.add_argument("},{"line_number":498,"context_line":"            \u0027--disable-snat\u0027,"},{"line_number":499,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":500,"context_line":"            help\u003d_(\"Disable Source NAT\")"},{"line_number":501,"context_line":"        )"},{"line_number":502,"context_line":"        return parser"},{"line_number":503,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"1a6eadb0_33a08490","line":500,"updated":"2016-12-14 10:36:05.000000000","message":"ditto.","commit_id":"008e61f3c709a15e67ddf64a6c6108b4e5152a4f"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"f838298d8ae4c50a31fb40cf22710b2c62a25642","unresolved":false,"context_lines":[{"line_number":527,"context_line":"            for route in parsed_args.routes:"},{"line_number":528,"context_line":"                route[\u0027nexthop\u0027] \u003d route.pop(\u0027gateway\u0027)"},{"line_number":529,"context_line":"            attrs[\u0027routes\u0027] \u003d obj.routes + parsed_args.routes"},{"line_number":530,"context_line":"        if parsed_args.external_gateway:"},{"line_number":531,"context_line":"            gateway_info \u003d {}"},{"line_number":532,"context_line":"            network \u003d client.find_network("},{"line_number":533,"context_line":"                parsed_args.external_gateway, ignore_missing\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":28,"id":"3a71b18c_6cc3518b","line":530,"updated":"2016-12-07 17:30:48.000000000","message":"If external gateway isn\u0027t specified, then specifying the related options should result in a command error.  Otherwise, they are simply being ignored.","commit_id":"008e61f3c709a15e67ddf64a6c6108b4e5152a4f"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"bc9a201e83e5fe7c914c582c9d464fc877643716","unresolved":false,"context_lines":[{"line_number":527,"context_line":"            for route in parsed_args.routes:"},{"line_number":528,"context_line":"                route[\u0027nexthop\u0027] \u003d route.pop(\u0027gateway\u0027)"},{"line_number":529,"context_line":"            attrs[\u0027routes\u0027] \u003d obj.routes + parsed_args.routes"},{"line_number":530,"context_line":"        if parsed_args.external_gateway:"},{"line_number":531,"context_line":"            gateway_info \u003d {}"},{"line_number":532,"context_line":"            network \u003d client.find_network("},{"line_number":533,"context_line":"                parsed_args.external_gateway, ignore_missing\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":28,"id":"3a71b18c_80506c60","line":530,"in_reply_to":"3a71b18c_3a80a746","updated":"2016-12-07 18:56:22.000000000","message":"I suggest raising CommandError and failing the request.","commit_id":"008e61f3c709a15e67ddf64a6c6108b4e5152a4f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"53f1801475e99cab6df717ba3919959b9f55d08d","unresolved":false,"context_lines":[{"line_number":527,"context_line":"            for route in parsed_args.routes:"},{"line_number":528,"context_line":"                route[\u0027nexthop\u0027] \u003d route.pop(\u0027gateway\u0027)"},{"line_number":529,"context_line":"            attrs[\u0027routes\u0027] \u003d obj.routes + parsed_args.routes"},{"line_number":530,"context_line":"        if parsed_args.external_gateway:"},{"line_number":531,"context_line":"            gateway_info \u003d {}"},{"line_number":532,"context_line":"            network \u003d client.find_network("},{"line_number":533,"context_line":"                parsed_args.external_gateway, ignore_missing\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":28,"id":"3a71b18c_3a80a746","line":530,"in_reply_to":"3a71b18c_6cc3518b","updated":"2016-12-07 17:58:12.000000000","message":"Should we raise a warning to state that the options should be specified with  --external-gateway? And in that case that the warning is raised, Should we block the user command ? Or let it continue with the partial command which satisfies the condition before Line#530 ?","commit_id":"008e61f3c709a15e67ddf64a6c6108b4e5152a4f"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8f28cc934888082001a201db9f37b25f52e0f551","unresolved":false,"context_lines":[{"line_number":527,"context_line":"            for route in parsed_args.routes:"},{"line_number":528,"context_line":"                route[\u0027nexthop\u0027] \u003d route.pop(\u0027gateway\u0027)"},{"line_number":529,"context_line":"            attrs[\u0027routes\u0027] \u003d obj.routes + parsed_args.routes"},{"line_number":530,"context_line":"        if parsed_args.external_gateway:"},{"line_number":531,"context_line":"            gateway_info \u003d {}"},{"line_number":532,"context_line":"            network \u003d client.find_network("},{"line_number":533,"context_line":"                parsed_args.external_gateway, ignore_missing\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":28,"id":"1a6eadb0_932dd848","line":530,"in_reply_to":"3a71b18c_80506c60","updated":"2016-12-14 10:36:05.000000000","message":"+1","commit_id":"008e61f3c709a15e67ddf64a6c6108b4e5152a4f"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"d66d8abf14480ea2bb2fc5919d087d117fb6a3bb","unresolved":false,"context_lines":[{"line_number":529,"context_line":"            attrs[\u0027routes\u0027] \u003d obj.routes + parsed_args.routes"},{"line_number":530,"context_line":"        if (parsed_args.disable_snat or parsed_args.enable_snat or"},{"line_number":531,"context_line":"           parsed_args.fixed_ip) and not parsed_args.external_gateway:"},{"line_number":532,"context_line":"                msg \u003d (_(\"You should specify \u0027--external-gateway\u0027 in order\""},{"line_number":533,"context_line":"                         \"to update the SNAT or Fixed-IP values\"))"},{"line_number":534,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":535,"context_line":"        if parsed_args.external_gateway:"}],"source_content_type":"text/x-python","patch_set":29,"id":"1a6eadb0_598f4874","line":532,"range":{"start_line":532,"start_character":30,"end_line":532,"end_character":36},"updated":"2016-12-17 13:58:34.000000000","message":"must","commit_id":"c3499c8e0eda78795ca68677bbf0b1a3cd77eca7"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"4ed1814691caa336d75a8792fc5be2d5a4a0497f","unresolved":false,"context_lines":[{"line_number":529,"context_line":"            attrs[\u0027routes\u0027] \u003d obj.routes + parsed_args.routes"},{"line_number":530,"context_line":"        if (parsed_args.disable_snat or parsed_args.enable_snat or"},{"line_number":531,"context_line":"           parsed_args.fixed_ip) and not parsed_args.external_gateway:"},{"line_number":532,"context_line":"                msg \u003d (_(\"You should specify \u0027--external-gateway\u0027 in order\""},{"line_number":533,"context_line":"                         \"to update the SNAT or Fixed-IP values\"))"},{"line_number":534,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":535,"context_line":"        if parsed_args.external_gateway:"}],"source_content_type":"text/x-python","patch_set":29,"id":"1a6eadb0_af2bae80","line":532,"range":{"start_line":532,"start_character":30,"end_line":532,"end_character":36},"in_reply_to":"1a6eadb0_598f4874","updated":"2016-12-17 18:23:12.000000000","message":"Done","commit_id":"c3499c8e0eda78795ca68677bbf0b1a3cd77eca7"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"d66d8abf14480ea2bb2fc5919d087d117fb6a3bb","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        if (parsed_args.disable_snat or parsed_args.enable_snat or"},{"line_number":531,"context_line":"           parsed_args.fixed_ip) and not parsed_args.external_gateway:"},{"line_number":532,"context_line":"                msg \u003d (_(\"You should specify \u0027--external-gateway\u0027 in order\""},{"line_number":533,"context_line":"                         \"to update the SNAT or Fixed-IP values\"))"},{"line_number":534,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":535,"context_line":"        if parsed_args.external_gateway:"},{"line_number":536,"context_line":"            gateway_info \u003d {}"}],"source_content_type":"text/x-python","patch_set":29,"id":"1a6eadb0_d9f19802","line":533,"range":{"start_line":533,"start_character":48,"end_line":533,"end_character":56},"updated":"2016-12-17 13:58:34.000000000","message":"fixed-ip","commit_id":"c3499c8e0eda78795ca68677bbf0b1a3cd77eca7"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"4ed1814691caa336d75a8792fc5be2d5a4a0497f","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        if (parsed_args.disable_snat or parsed_args.enable_snat or"},{"line_number":531,"context_line":"           parsed_args.fixed_ip) and not parsed_args.external_gateway:"},{"line_number":532,"context_line":"                msg \u003d (_(\"You should specify \u0027--external-gateway\u0027 in order\""},{"line_number":533,"context_line":"                         \"to update the SNAT or Fixed-IP values\"))"},{"line_number":534,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":535,"context_line":"        if parsed_args.external_gateway:"},{"line_number":536,"context_line":"            gateway_info \u003d {}"}],"source_content_type":"text/x-python","patch_set":29,"id":"1a6eadb0_8f28b287","line":533,"range":{"start_line":533,"start_character":48,"end_line":533,"end_character":56},"in_reply_to":"1a6eadb0_d9f19802","updated":"2016-12-17 18:23:12.000000000","message":"Done","commit_id":"c3499c8e0eda78795ca68677bbf0b1a3cd77eca7"}],"openstackclient/tests/unit/network/v2/test_router.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"043fc51e94ee4201669d51640451a2eb4d99fece","unresolved":false,"context_lines":[{"line_number":725,"context_line":"                \u0027network_id\u0027: self._network.id}})"},{"line_number":726,"context_line":"        self.assertIsNone(result)"},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"    def test_set_gateway_all_options(self):"},{"line_number":729,"context_line":"        arglist \u003d ["},{"line_number":730,"context_line":"            \"--external-gateway\", self._network.id,"},{"line_number":731,"context_line":"            self._router.id,"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a74a57a_b45cd9f1","line":728,"updated":"2016-11-29 18:55:11.000000000","message":"a test with all options would entail passing fixed ips too, which you don\u0027t do here.","commit_id":"1bd1b105d04476b946c83856b64176858c0bafcf"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"59129552ae98c9bec5526a378d015732cc9be7e3","unresolved":false,"context_lines":[{"line_number":725,"context_line":"                \u0027network_id\u0027: self._network.id}})"},{"line_number":726,"context_line":"        self.assertIsNone(result)"},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"    def test_set_gateway_all_options(self):"},{"line_number":729,"context_line":"        arglist \u003d ["},{"line_number":730,"context_line":"            \"--external-gateway\", self._network.id,"},{"line_number":731,"context_line":"            self._router.id,"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a74a57a_3d5ee176","line":728,"in_reply_to":"5a74a57a_b45cd9f1","updated":"2016-11-30 01:20:46.000000000","message":"Ok.","commit_id":"1bd1b105d04476b946c83856b64176858c0bafcf"}],"releasenotes/notes/router-gateway-set-01d9c7ffe4461daf.yaml":[{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"d55b832ba75e673f398b803258e877103715389a","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for setting the gateway information in a router,"},{"line_number":5,"context_line":"    using the CLI ``router-gateway-set``."},{"line_number":6,"context_line":"    [ Blueprint `neutron-client-advanced-router \u003chttps://blueprints.launchpad.net/python-openstackclient/+spec/neutron-client-advanced-router\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"fa6399be_9eb156e4","line":5,"updated":"2016-10-12 21:09:58.000000000","message":"We don\u0027t care what the API is here, but please include the actual name of the options being added and the affected command.","commit_id":"c6fb4ae29607b558d11c0a773676f016957682cf"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"f838298d8ae4c50a31fb40cf22710b2c62a25642","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for setting the gateway information in a router,"},{"line_number":5,"context_line":"    by introducing the new option ``--external-gateway`` in"},{"line_number":6,"context_line":"    ``router set`` CLI."},{"line_number":7,"context_line":"    [ Blueprint `neutron-client-advanced-router \u003chttps://blueprints.launchpad.net/python-openstackclient/+spec/neutron-client-advanced-router\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":28,"id":"3a71b18c_6c1fd109","line":5,"updated":"2016-12-07 17:30:48.000000000","message":"Please include all options.","commit_id":"008e61f3c709a15e67ddf64a6c6108b4e5152a4f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ee61fe23fd45204bb164a8c3ed36ee164b187ae4","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for setting the gateway information in a router,"},{"line_number":5,"context_line":"    by introducing the new option ``--external-gateway`` in"},{"line_number":6,"context_line":"    ``router set`` CLI."},{"line_number":7,"context_line":"    [ Blueprint `neutron-client-advanced-router \u003chttps://blueprints.launchpad.net/python-openstackclient/+spec/neutron-client-advanced-router\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"1a6eadb0_9377fc07","line":6,"range":{"start_line":6,"start_character":19,"end_line":6,"end_character":22},"updated":"2016-12-17 22:43:44.000000000","message":"command*","commit_id":"841d9d8dbd313b3dcf604466786d6b9a5c918156"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"186eec7a584139b22fe45426a716a8cee45b176f","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for setting the gateway information in a router,"},{"line_number":5,"context_line":"    by introducing the new option ``--external-gateway`` in"},{"line_number":6,"context_line":"    ``router set`` CLI."},{"line_number":7,"context_line":"    [ Blueprint `neutron-client-advanced-router \u003chttps://blueprints.launchpad.net/python-openstackclient/+spec/neutron-client-advanced-router\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"1a6eadb0_6761bad3","line":6,"range":{"start_line":6,"start_character":19,"end_line":6,"end_character":22},"in_reply_to":"1a6eadb0_1cda19ea","updated":"2016-12-18 04:50:51.000000000","message":"I +2\u0027ed it, didn\u0027t I? :)","commit_id":"841d9d8dbd313b3dcf604466786d6b9a5c918156"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"44b5b4b351b9e2ef7e1408e520cdb9afcfb2772f","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for setting the gateway information in a router,"},{"line_number":5,"context_line":"    by introducing the new option ``--external-gateway`` in"},{"line_number":6,"context_line":"    ``router set`` CLI."},{"line_number":7,"context_line":"    [ Blueprint `neutron-client-advanced-router \u003chttps://blueprints.launchpad.net/python-openstackclient/+spec/neutron-client-advanced-router\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"1a6eadb0_ffdb8a4d","line":6,"range":{"start_line":6,"start_character":19,"end_line":6,"end_character":22},"in_reply_to":"1a6eadb0_6761bad3","updated":"2016-12-18 15:50:31.000000000","message":"Yesss That you did :D","commit_id":"841d9d8dbd313b3dcf604466786d6b9a5c918156"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"1eb77df794b6b6dda26404e9285ba9ec9784c178","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for setting the gateway information in a router,"},{"line_number":5,"context_line":"    by introducing the new option ``--external-gateway`` in"},{"line_number":6,"context_line":"    ``router set`` CLI."},{"line_number":7,"context_line":"    [ Blueprint `neutron-client-advanced-router \u003chttps://blueprints.launchpad.net/python-openstackclient/+spec/neutron-client-advanced-router\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"1a6eadb0_1cda19ea","line":6,"range":{"start_line":6,"start_character":19,"end_line":6,"end_character":22},"in_reply_to":"1a6eadb0_9377fc07","updated":"2016-12-18 04:33:18.000000000","message":"is it a dealbreaker ?","commit_id":"841d9d8dbd313b3dcf604466786d6b9a5c918156"}],"setup.cfg":[{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"0d3e39597744711c70f606b288b7913b0b8b6a99","unresolved":false,"context_lines":[{"line_number":389,"context_line":"    router_add_subnet \u003d openstackclient.network.v2.router:AddSubnetToRouter"},{"line_number":390,"context_line":"    router_create \u003d openstackclient.network.v2.router:CreateRouter"},{"line_number":391,"context_line":"    router_delete \u003d openstackclient.network.v2.router:DeleteRouter"},{"line_number":392,"context_line":"    router_gateway_set \u003d openstackclient.network.v2.router:SetRouterGateway"},{"line_number":393,"context_line":"    router_list \u003d openstackclient.network.v2.router:ListRouter"},{"line_number":394,"context_line":"    router_remove_port \u003d openstackclient.network.v2.router:RemovePortFromRouter"},{"line_number":395,"context_line":"    router_remove_subnet \u003d openstackclient.network.v2.router:RemoveSubnetFromRouter"}],"source_content_type":"text/x-ttcn-cfg","patch_set":17,"id":"fa6399be_3426f768","line":392,"range":{"start_line":392,"start_character":0,"end_line":392,"end_character":75},"updated":"2016-10-11 12:02:42.000000000","message":"Not necessary.","commit_id":"81ad20807b62e3ea4c3beed9276036422f9b9585"}]}
