)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"f7d94282263be054209ba741d34760fcbf41e0e4","unresolved":false,"context_lines":[{"line_number":13,"context_line":"  floating ip port forwarding set"},{"line_number":14,"context_line":"  floating ip port forwarding show"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Closes-Bug: #1811352"},{"line_number":17,"context_line":"Change-Id: I6a5642e8acce28fc830410d4fa3180597b862761"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5fc1f717_3415e349","line":16,"updated":"2019-04-08 07:58:33.000000000","message":"Depends-On: https://review.openstack.org/650063","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"fcda3c3159f94ffa9e77a48bbd59f3b4a76d3721","unresolved":false,"context_lines":[{"line_number":13,"context_line":"  floating ip port forwarding set"},{"line_number":14,"context_line":"  floating ip port forwarding show"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Closes-Bug: #1811352"},{"line_number":17,"context_line":"Change-Id: I6a5642e8acce28fc830410d4fa3180597b862761"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5fc1f717_377f2567","line":16,"in_reply_to":"5fc1f717_3415e349","updated":"2019-04-08 08:04:56.000000000","message":"It is mocked. Zuul failure has no relate to this.","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"c634237886d580c49c77b0c474a766d30a1a815d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"  floating ip port forwarding set"},{"line_number":14,"context_line":"  floating ip port forwarding show"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Closes-Bug: #1811352"},{"line_number":17,"context_line":"Change-Id: I6a5642e8acce28fc830410d4fa3180597b862761"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5fc1f717_d947f01c","line":16,"in_reply_to":"5fc1f717_377f2567","updated":"2019-04-08 12:19:14.000000000","message":"But depends-on keep this patch open till the other end is not merged, so keep the dependency tree, and avoids the situation where something is merged without its dependencies in other projects.","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"d17cfffdff7d2461b4503fef73c7c5b52e20c8fb","unresolved":false,"context_lines":[{"line_number":13,"context_line":"  floating ip port forwarding set"},{"line_number":14,"context_line":"  floating ip port forwarding show"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Closes-Bug: #1811352"},{"line_number":17,"context_line":"Change-Id: I6a5642e8acce28fc830410d4fa3180597b862761"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3fce034c_4974269a","line":16,"updated":"2019-04-11 08:25:43.000000000","message":"I still miss the Depends-On: https://review.openstack.org/650063, to avoid that this patch will be merged before the one in openstacksdk","commit_id":"789b5d44d37b0774a4a7d40d645d0ba2038351b5"}],"openstackclient/network/v2/floating_ip_port_forwarding.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class CreateFloatingIPPortForwarding(command.ShowOne):"},{"line_number":36,"context_line":"    _description \u003d _(\"Create floating ip port forwarding\")"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def get_parser(self, prog_name):"},{"line_number":39,"context_line":"        parser \u003d super(CreateFloatingIPPortForwarding,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_8c57c801","line":36,"range":{"start_line":36,"start_character":38,"end_line":36,"end_character":40},"updated":"2019-04-09 14:56:35.000000000","message":"s/IP","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class CreateFloatingIPPortForwarding(command.ShowOne):"},{"line_number":36,"context_line":"    _description \u003d _(\"Create floating ip port forwarding\")"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def get_parser(self, prog_name):"},{"line_number":39,"context_line":"        parser \u003d super(CreateFloatingIPPortForwarding,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_38dcb7df","line":36,"range":{"start_line":36,"start_character":38,"end_line":36,"end_character":40},"in_reply_to":"5fc1f717_8c57c801","updated":"2019-04-10 13:30:23.000000000","message":"Done","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        parser.add_argument("},{"line_number":42,"context_line":"            \u0027floatingip\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":44,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs\""},{"line_number":45,"context_line":"                   \"(name or ID)\")"},{"line_number":46,"context_line":"        )"},{"line_number":47,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_6c793c80","line":44,"range":{"start_line":44,"start_character":57,"end_line":44,"end_character":64},"updated":"2019-04-09 14:56:35.000000000","message":"s/belongs to\n\nand needs a trailing space","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        parser.add_argument("},{"line_number":42,"context_line":"            \u0027floatingip\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":44,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs\""},{"line_number":45,"context_line":"                   \"(name or ID)\")"},{"line_number":46,"context_line":"        )"},{"line_number":47,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_18e1bb9b","line":44,"range":{"start_line":44,"start_character":57,"end_line":44,"end_character":64},"in_reply_to":"5fc1f717_6c793c80","updated":"2019-04-10 13:30:23.000000000","message":"Done","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            type\u003dint,"},{"line_number":62,"context_line":"            metavar\u003d\u0027\u003cinternal-port\u003e\u0027,"},{"line_number":63,"context_line":"            help\u003d_(\"The TCP/UDP/other protocol port number \""},{"line_number":64,"context_line":"                   \"of the Neutron port fixed IP address \""},{"line_number":65,"context_line":"                   \"associated to the floating ip port forwarding\")"},{"line_number":66,"context_line":"        )"},{"line_number":67,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_cc7ab086","line":64,"range":{"start_line":64,"start_character":46,"end_line":64,"end_character":48},"updated":"2019-04-09 14:56:35.000000000","message":"s/IPv4","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            type\u003dint,"},{"line_number":62,"context_line":"            metavar\u003d\u0027\u003cinternal-port\u003e\u0027,"},{"line_number":63,"context_line":"            help\u003d_(\"The TCP/UDP/other protocol port number \""},{"line_number":64,"context_line":"                   \"of the Neutron port fixed IP address \""},{"line_number":65,"context_line":"                   \"associated to the floating ip port forwarding\")"},{"line_number":66,"context_line":"        )"},{"line_number":67,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_78d6bfc5","line":64,"range":{"start_line":64,"start_character":46,"end_line":64,"end_character":48},"in_reply_to":"5fc1f717_cc7ab086","updated":"2019-04-10 13:30:23.000000000","message":"Done","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            metavar\u003d\u0027\u003cinternal-port\u003e\u0027,"},{"line_number":63,"context_line":"            help\u003d_(\"The TCP/UDP/other protocol port number \""},{"line_number":64,"context_line":"                   \"of the Neutron port fixed IP address \""},{"line_number":65,"context_line":"                   \"associated to the floating ip port forwarding\")"},{"line_number":66,"context_line":"        )"},{"line_number":67,"context_line":"        parser.add_argument("},{"line_number":68,"context_line":"            \u0027external_port\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_4c3d60b9","line":65,"range":{"start_line":65,"start_character":47,"end_line":65,"end_character":49},"updated":"2019-04-09 14:56:35.000000000","message":"s/IP","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            metavar\u003d\u0027\u003cinternal-port\u003e\u0027,"},{"line_number":63,"context_line":"            help\u003d_(\"The TCP/UDP/other protocol port number \""},{"line_number":64,"context_line":"                   \"of the Neutron port fixed IP address \""},{"line_number":65,"context_line":"                   \"associated to the floating ip port forwarding\")"},{"line_number":66,"context_line":"        )"},{"line_number":67,"context_line":"        parser.add_argument("},{"line_number":68,"context_line":"            \u0027external_port\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_98cdab31","line":65,"range":{"start_line":65,"start_character":47,"end_line":65,"end_character":49},"in_reply_to":"5fc1f717_4c3d60b9","updated":"2019-04-10 13:30:23.000000000","message":"Done","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            \u0027external_port\u0027,"},{"line_number":69,"context_line":"            type\u003dint,"},{"line_number":70,"context_line":"            metavar\u003d\u0027\u003cexternal-port\u003e\u0027,"},{"line_number":71,"context_line":"            help\u003d_(\"The TCP/UDP/other protocol port number of \""},{"line_number":72,"context_line":"                   \"the port forwarding\u0027s floating IP address\")"},{"line_number":73,"context_line":"        )"},{"line_number":74,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_621dc560","line":71,"range":{"start_line":71,"start_character":24,"end_line":71,"end_character":37},"updated":"2019-04-09 14:56:35.000000000","message":"do we need to say TCP/UDP/other ?","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            \u0027external_port\u0027,"},{"line_number":69,"context_line":"            type\u003dint,"},{"line_number":70,"context_line":"            metavar\u003d\u0027\u003cexternal-port\u003e\u0027,"},{"line_number":71,"context_line":"            help\u003d_(\"The TCP/UDP/other protocol port number of \""},{"line_number":72,"context_line":"                   \"the port forwarding\u0027s floating IP address\")"},{"line_number":73,"context_line":"        )"},{"line_number":74,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_f8caaf17","line":71,"range":{"start_line":71,"start_character":24,"end_line":71,"end_character":37},"in_reply_to":"5fc1f717_621dc560","updated":"2019-04-10 13:30:23.000000000","message":"Done","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        parser.add_argument("},{"line_number":75,"context_line":"            \u0027protocol\u0027,"},{"line_number":76,"context_line":"            metavar\u003d\u0027\u003cprotocol\u003e\u0027,"},{"line_number":77,"context_line":"            choices\u003d[\u0027tcp\u0027, \u0027udp\u0027],"},{"line_number":78,"context_line":"            help\u003d_(\"The IP protocol used in the floating IP \""},{"line_number":79,"context_line":"                   \"port forwarding\")"},{"line_number":80,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_82579101","line":77,"updated":"2019-04-09 14:56:35.000000000","message":"Is it only TCP and UDP ?","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        parser.add_argument("},{"line_number":75,"context_line":"            \u0027protocol\u0027,"},{"line_number":76,"context_line":"            metavar\u003d\u0027\u003cprotocol\u003e\u0027,"},{"line_number":77,"context_line":"            choices\u003d[\u0027tcp\u0027, \u0027udp\u0027],"},{"line_number":78,"context_line":"            help\u003d_(\"The IP protocol used in the floating IP \""},{"line_number":79,"context_line":"                   \"port forwarding\")"},{"line_number":80,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_d8c7b311","line":77,"in_reply_to":"5fc1f717_82579101","updated":"2019-04-10 13:30:23.000000000","message":"Done","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            \u0027protocol\u0027,"},{"line_number":76,"context_line":"            metavar\u003d\u0027\u003cprotocol\u003e\u0027,"},{"line_number":77,"context_line":"            choices\u003d[\u0027tcp\u0027, \u0027udp\u0027],"},{"line_number":78,"context_line":"            help\u003d_(\"The IP protocol used in the floating IP \""},{"line_number":79,"context_line":"                   \"port forwarding\")"},{"line_number":80,"context_line":"        )"},{"line_number":81,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_e2453545","line":78,"range":{"start_line":78,"start_character":24,"end_line":78,"end_character":26},"updated":"2019-04-09 14:56:35.000000000","message":"delete \u0027IP\u0027 ?","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            \u0027protocol\u0027,"},{"line_number":76,"context_line":"            metavar\u003d\u0027\u003cprotocol\u003e\u0027,"},{"line_number":77,"context_line":"            choices\u003d[\u0027tcp\u0027, \u0027udp\u0027],"},{"line_number":78,"context_line":"            help\u003d_(\"The IP protocol used in the floating IP \""},{"line_number":79,"context_line":"                   \"port forwarding\")"},{"line_number":80,"context_line":"        )"},{"line_number":81,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_3847d7a5","line":78,"range":{"start_line":78,"start_character":24,"end_line":78,"end_character":26},"in_reply_to":"5fc1f717_e2453545","updated":"2019-04-10 13:30:23.000000000","message":"Done","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        parser.add_argument("},{"line_number":125,"context_line":"            \u0027floatingip\u0027,"},{"line_number":126,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":127,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs \""},{"line_number":128,"context_line":"                   \"(name or ID)\")"},{"line_number":129,"context_line":"        )"},{"line_number":130,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_0cdf5866","line":127,"range":{"start_line":127,"start_character":57,"end_line":127,"end_character":64},"updated":"2019-04-09 14:56:35.000000000","message":"s/belongs to","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        parser.add_argument("},{"line_number":125,"context_line":"            \u0027floatingip\u0027,"},{"line_number":126,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":127,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs \""},{"line_number":128,"context_line":"                   \"(name or ID)\")"},{"line_number":129,"context_line":"        )"},{"line_number":130,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_7851df61","line":127,"range":{"start_line":127,"start_character":57,"end_line":127,"end_character":64},"in_reply_to":"5fc1f717_0cdf5866","updated":"2019-04-10 13:30:23.000000000","message":"Done","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            \u0027port_forwarding_id\u0027,"},{"line_number":132,"context_line":"            nargs\u003d\"+\","},{"line_number":133,"context_line":"            metavar\u003d\"\u003cport-forwarding-id\u003e\","},{"line_number":134,"context_line":"            help\u003d_(\"The ID of the floating IP port forwarding(s) to delete\")"},{"line_number":135,"context_line":"        )"},{"line_number":136,"context_line":"        return parser"},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_82a55105","line":134,"range":{"start_line":134,"start_character":51,"end_line":134,"end_character":64},"updated":"2019-04-09 14:56:35.000000000","message":"Does one ID relate to multiple forwardings?  Just wondering about the (s)","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            \u0027port_forwarding_id\u0027,"},{"line_number":132,"context_line":"            nargs\u003d\"+\","},{"line_number":133,"context_line":"            metavar\u003d\"\u003cport-forwarding-id\u003e\","},{"line_number":134,"context_line":"            help\u003d_(\"The ID of the floating IP port forwarding(s) to delete\")"},{"line_number":135,"context_line":"        )"},{"line_number":136,"context_line":"        return parser"},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_386fd760","line":134,"range":{"start_line":134,"start_character":51,"end_line":134,"end_character":64},"in_reply_to":"5fc1f717_82a55105","updated":"2019-04-10 13:30:23.000000000","message":"One or more port forwarding IDs can be added to the command input list.","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                )"},{"line_number":153,"context_line":"            except Exception as e:"},{"line_number":154,"context_line":"                result +\u003d 1"},{"line_number":155,"context_line":"                LOG.error(_(\"Failed to delete port forwarding \""},{"line_number":156,"context_line":"                            \"\u0027%(port_forwarding_id)s\u0027: %(e)s\"),"},{"line_number":157,"context_line":"                          {\u0027port_forwarding_id\u0027: port_forwarding_id, \u0027e\u0027: e})"},{"line_number":158,"context_line":"        if result \u003e 0:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_02b16144","line":155,"range":{"start_line":155,"start_character":46,"end_line":155,"end_character":50},"updated":"2019-04-09 14:56:35.000000000","message":"s/floating IP port","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                )"},{"line_number":153,"context_line":"            except Exception as e:"},{"line_number":154,"context_line":"                result +\u003d 1"},{"line_number":155,"context_line":"                LOG.error(_(\"Failed to delete port forwarding \""},{"line_number":156,"context_line":"                            \"\u0027%(port_forwarding_id)s\u0027: %(e)s\"),"},{"line_number":157,"context_line":"                          {\u0027port_forwarding_id\u0027: port_forwarding_id, \u0027e\u0027: e})"},{"line_number":158,"context_line":"        if result \u003e 0:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_5856635e","line":155,"range":{"start_line":155,"start_character":46,"end_line":155,"end_character":50},"in_reply_to":"5fc1f717_02b16144","updated":"2019-04-10 13:30:23.000000000","message":"Done","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                          {\u0027port_forwarding_id\u0027: port_forwarding_id, \u0027e\u0027: e})"},{"line_number":158,"context_line":"        if result \u003e 0:"},{"line_number":159,"context_line":"            total \u003d len(parsed_args.port_forwarding_id)"},{"line_number":160,"context_line":"            msg \u003d (_(\"%(result)s of %(total)s Port forwarding failed \""},{"line_number":161,"context_line":"                   \"to delete.\") % {\u0027result\u0027: result, \u0027total\u0027: total})"},{"line_number":162,"context_line":"            raise exceptions.CommandError(msg)"},{"line_number":163,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_6c3cdc91","line":160,"range":{"start_line":160,"start_character":46,"end_line":160,"end_character":50},"updated":"2019-04-09 14:56:35.000000000","message":"s/port","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                          {\u0027port_forwarding_id\u0027: port_forwarding_id, \u0027e\u0027: e})"},{"line_number":158,"context_line":"        if result \u003e 0:"},{"line_number":159,"context_line":"            total \u003d len(parsed_args.port_forwarding_id)"},{"line_number":160,"context_line":"            msg \u003d (_(\"%(result)s of %(total)s Port forwarding failed \""},{"line_number":161,"context_line":"                   \"to delete.\") % {\u0027result\u0027: result, \u0027total\u0027: total})"},{"line_number":162,"context_line":"            raise exceptions.CommandError(msg)"},{"line_number":163,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_b85bc783","line":160,"range":{"start_line":160,"start_character":46,"end_line":160,"end_character":50},"in_reply_to":"5fc1f717_6c3cdc91","updated":"2019-04-10 13:30:23.000000000","message":"Done","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"class ListFloatingIPPortForwarding(command.Lister):"},{"line_number":166,"context_line":"    _description \u003d _(\"List floating IP port forwarding\")"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def get_parser(self, prog_name):"},{"line_number":169,"context_line":"        parser \u003d super(ListFloatingIPPortForwarding,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_6c55bcc1","line":166,"range":{"start_line":166,"start_character":54,"end_line":166,"end_character":55},"updated":"2019-04-09 14:56:35.000000000","message":"+ entries ?  as forwardings doesn\u0027t sound right","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"class ListFloatingIPPortForwarding(command.Lister):"},{"line_number":166,"context_line":"    _description \u003d _(\"List floating IP port forwarding\")"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def get_parser(self, prog_name):"},{"line_number":169,"context_line":"        parser \u003d super(ListFloatingIPPortForwarding,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_d8b813c9","line":166,"range":{"start_line":166,"start_character":54,"end_line":166,"end_character":55},"in_reply_to":"5fc1f717_6c55bcc1","updated":"2019-04-10 13:30:23.000000000","message":"port forwarding is a defined resource in neutron.","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        parser.add_argument("},{"line_number":172,"context_line":"            \u0027floatingip\u0027,"},{"line_number":173,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":174,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs \""},{"line_number":175,"context_line":"                   \"(name or ID)\")"},{"line_number":176,"context_line":"        )"},{"line_number":177,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_ec4f6c32","line":174,"range":{"start_line":174,"start_character":57,"end_line":174,"end_character":64},"updated":"2019-04-09 14:56:35.000000000","message":"s/belongs to","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        parser.add_argument("},{"line_number":172,"context_line":"            \u0027floatingip\u0027,"},{"line_number":173,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":174,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs \""},{"line_number":175,"context_line":"                   \"(name or ID)\")"},{"line_number":176,"context_line":"        )"},{"line_number":177,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_987febdd","line":174,"range":{"start_line":174,"start_character":57,"end_line":174,"end_character":64},"in_reply_to":"5fc1f717_ec4f6c32","updated":"2019-04-10 13:30:23.000000000","message":"Done","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            \u0027--external-port\u0027,"},{"line_number":186,"context_line":"            metavar\u003d\u0027\u003cport_number\u003e\u0027,"},{"line_number":187,"context_line":"            dest\u003d\u0027external_port\u0027,"},{"line_number":188,"context_line":"            help\u003d_(\"Filter the list result by the TCP/UDP/other \""},{"line_number":189,"context_line":"                   \"protocol port number of the floating IP\")"},{"line_number":190,"context_line":"        )"},{"line_number":191,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_82f31109","line":188,"range":{"start_line":188,"start_character":50,"end_line":188,"end_character":63},"updated":"2019-04-09 14:56:35.000000000","message":"Do we need TCP/UDP/other ?","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            \u0027--external-port\u0027,"},{"line_number":186,"context_line":"            metavar\u003d\u0027\u003cport_number\u003e\u0027,"},{"line_number":187,"context_line":"            dest\u003d\u0027external_port\u0027,"},{"line_number":188,"context_line":"            help\u003d_(\"Filter the list result by the TCP/UDP/other \""},{"line_number":189,"context_line":"                   \"protocol port number of the floating IP\")"},{"line_number":190,"context_line":"        )"},{"line_number":191,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_d879f3fb","line":188,"range":{"start_line":188,"start_character":50,"end_line":188,"end_character":63},"in_reply_to":"5fc1f717_82f31109","updated":"2019-04-10 13:30:23.000000000","message":"removed","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        parser.add_argument("},{"line_number":192,"context_line":"            \u0027--protocol\u0027,"},{"line_number":193,"context_line":"            metavar\u003d\u0027protocol\u0027,"},{"line_number":194,"context_line":"            choices\u003d[\u0027tcp\u0027, \u0027udp\u0027],"},{"line_number":195,"context_line":"            help\u003d_(\"Filter the list result by the used protocol\")"},{"line_number":196,"context_line":"        )"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_e2e1b52c","line":194,"updated":"2019-04-09 14:56:35.000000000","message":"Only TCP and UDP ?","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        parser.add_argument("},{"line_number":192,"context_line":"            \u0027--protocol\u0027,"},{"line_number":193,"context_line":"            metavar\u003d\u0027protocol\u0027,"},{"line_number":194,"context_line":"            choices\u003d[\u0027tcp\u0027, \u0027udp\u0027],"},{"line_number":195,"context_line":"            help\u003d_(\"Filter the list result by the used protocol\")"},{"line_number":196,"context_line":"        )"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_181e9bba","line":194,"in_reply_to":"5fc1f717_e2e1b52c","updated":"2019-04-10 13:30:23.000000000","message":"removed","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            \u0027--protocol\u0027,"},{"line_number":193,"context_line":"            metavar\u003d\u0027protocol\u0027,"},{"line_number":194,"context_line":"            choices\u003d[\u0027tcp\u0027, \u0027udp\u0027],"},{"line_number":195,"context_line":"            help\u003d_(\"Filter the list result by the used protocol\")"},{"line_number":196,"context_line":"        )"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_ec68cc88","line":195,"range":{"start_line":195,"start_character":50,"end_line":195,"end_character":54},"updated":"2019-04-09 14:56:35.000000000","message":"s/port","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            \u0027--protocol\u0027,"},{"line_number":193,"context_line":"            metavar\u003d\u0027protocol\u0027,"},{"line_number":194,"context_line":"            choices\u003d[\u0027tcp\u0027, \u0027udp\u0027],"},{"line_number":195,"context_line":"            help\u003d_(\"Filter the list result by the used protocol\")"},{"line_number":196,"context_line":"        )"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_b80d0790","line":195,"range":{"start_line":195,"start_character":50,"end_line":195,"end_character":54},"in_reply_to":"5fc1f717_ec68cc88","updated":"2019-04-10 13:30:23.000000000","message":"Done","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        parser.add_argument("},{"line_number":250,"context_line":"            \u0027floatingip\u0027,"},{"line_number":251,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":252,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs\""},{"line_number":253,"context_line":"                   \"(name or ID)\")"},{"line_number":254,"context_line":"        )"},{"line_number":255,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_8c0fc8de","line":252,"range":{"start_line":252,"start_character":57,"end_line":252,"end_character":64},"updated":"2019-04-09 14:56:35.000000000","message":"s/belongs to\n\nand add trailing space","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        parser.add_argument("},{"line_number":250,"context_line":"            \u0027floatingip\u0027,"},{"line_number":251,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":252,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs\""},{"line_number":253,"context_line":"                   \"(name or ID)\")"},{"line_number":254,"context_line":"        )"},{"line_number":255,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_d81493a2","line":252,"range":{"start_line":252,"start_character":57,"end_line":252,"end_character":64},"in_reply_to":"5fc1f717_8c0fc8de","updated":"2019-04-10 13:30:23.000000000","message":"Done","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            metavar\u003d\u0027\u003cinternal_port\u003e\u0027,"},{"line_number":274,"context_line":"            type\u003dint,"},{"line_number":275,"context_line":"            help\u003d_(\"The TCP/UDP/other protocol port number of the \""},{"line_number":276,"context_line":"                   \"Neutron port fixed IP address associated to \""},{"line_number":277,"context_line":"                   \"the floating ip port forwarding\")"},{"line_number":278,"context_line":"        )"},{"line_number":279,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_ecfd2cb2","line":276,"range":{"start_line":276,"start_character":39,"end_line":276,"end_character":41},"updated":"2019-04-09 14:56:35.000000000","message":"s/IPv4","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            metavar\u003d\u0027\u003cinternal_port\u003e\u0027,"},{"line_number":274,"context_line":"            type\u003dint,"},{"line_number":275,"context_line":"            help\u003d_(\"The TCP/UDP/other protocol port number of the \""},{"line_number":276,"context_line":"                   \"Neutron port fixed IP address associated to \""},{"line_number":277,"context_line":"                   \"the floating ip port forwarding\")"},{"line_number":278,"context_line":"        )"},{"line_number":279,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_18453bb4","line":276,"range":{"start_line":276,"start_character":39,"end_line":276,"end_character":41},"in_reply_to":"5fc1f717_ecfd2cb2","updated":"2019-04-10 13:30:23.000000000","message":"Done","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":274,"context_line":"            type\u003dint,"},{"line_number":275,"context_line":"            help\u003d_(\"The TCP/UDP/other protocol port number of the \""},{"line_number":276,"context_line":"                   \"Neutron port fixed IP address associated to \""},{"line_number":277,"context_line":"                   \"the floating ip port forwarding\")"},{"line_number":278,"context_line":"        )"},{"line_number":279,"context_line":"        parser.add_argument("},{"line_number":280,"context_line":"            \u0027--external_port\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_ac2de446","line":277,"range":{"start_line":277,"start_character":33,"end_line":277,"end_character":35},"updated":"2019-04-09 14:56:35.000000000","message":"s/IP","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":274,"context_line":"            type\u003dint,"},{"line_number":275,"context_line":"            help\u003d_(\"The TCP/UDP/other protocol port number of the \""},{"line_number":276,"context_line":"                   \"Neutron port fixed IP address associated to \""},{"line_number":277,"context_line":"                   \"the floating ip port forwarding\")"},{"line_number":278,"context_line":"        )"},{"line_number":279,"context_line":"        parser.add_argument("},{"line_number":280,"context_line":"            \u0027--external_port\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_583f4324","line":277,"range":{"start_line":277,"start_character":33,"end_line":277,"end_character":35},"in_reply_to":"5fc1f717_ac2de446","updated":"2019-04-10 13:30:23.000000000","message":"Done","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":333,"context_line":"        parser.add_argument("},{"line_number":334,"context_line":"            \u0027floatingip\u0027,"},{"line_number":335,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":336,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs \""},{"line_number":337,"context_line":"                   \"(name or ID)\")"},{"line_number":338,"context_line":"        )"},{"line_number":339,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_2c21f44d","line":336,"range":{"start_line":336,"start_character":57,"end_line":336,"end_character":64},"updated":"2019-04-09 14:56:35.000000000","message":"s/belongs to","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":333,"context_line":"        parser.add_argument("},{"line_number":334,"context_line":"            \u0027floatingip\u0027,"},{"line_number":335,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":336,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs \""},{"line_number":337,"context_line":"                   \"(name or ID)\")"},{"line_number":338,"context_line":"        )"},{"line_number":339,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_b834274a","line":336,"range":{"start_line":336,"start_character":57,"end_line":336,"end_character":64},"in_reply_to":"5fc1f717_2c21f44d","updated":"2019-04-10 13:30:23.000000000","message":"Done","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bd640a809988934f860592dfb5be4ab6bac07f96","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            \u0027floatingip\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":44,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs to \""},{"line_number":45,"context_line":"                   \"(name or ID)\")"},{"line_number":46,"context_line":"        )"},{"line_number":47,"context_line":"        parser.add_argument("},{"line_number":48,"context_line":"            \u0027internal_port_id\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_b658b389","line":45,"range":{"start_line":45,"start_character":21,"end_line":45,"end_character":32},"updated":"2019-04-11 12:37:21.000000000","message":"In case of floating IP, \"IP address or ID\" would be better.  See [1] as floating IP example.\n\n[1] https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/floating-ip.html#floating-ip-show","commit_id":"789b5d44d37b0774a4a7d40d645d0ba2038351b5"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"dcf655a37408fdcc1a98a627b9cc44911b667a5e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            \u0027floatingip\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":44,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs to \""},{"line_number":45,"context_line":"                   \"(name or ID)\")"},{"line_number":46,"context_line":"        )"},{"line_number":47,"context_line":"        parser.add_argument("},{"line_number":48,"context_line":"            \u0027internal_port_id\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_6bbf4bd0","line":45,"range":{"start_line":45,"start_character":21,"end_line":45,"end_character":32},"in_reply_to":"5fc1f717_b658b389","updated":"2019-04-16 09:22:15.000000000","message":"Done","commit_id":"789b5d44d37b0774a4a7d40d645d0ba2038351b5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bd640a809988934f860592dfb5be4ab6bac07f96","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            \u0027internal_port_id\u0027,"},{"line_number":49,"context_line":"            metavar\u003d\u0027\u003cinternal-port-id\u003e\u0027,"},{"line_number":50,"context_line":"            help\u003d_(\"The ID of the Neutron port associated \""},{"line_number":51,"context_line":"                   \"to the floating IP port forwarding\")"},{"line_number":52,"context_line":"        )"},{"line_number":53,"context_line":"        parser.add_argument("},{"line_number":54,"context_line":"            \u0027internal_ip_address\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_56470fa4","line":51,"updated":"2019-04-11 12:37:21.000000000","message":"\"name or ID\" is preferred.\n\nIf we go to this route, \u0027_id\u0027 suffix will no longer make sense. Perhaps we need to explore how we can accomodate \"neutron port\" and \"L4 port number\"...","commit_id":"789b5d44d37b0774a4a7d40d645d0ba2038351b5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"02d91850ac0b82df67887c9a159089a95fdfd36a","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            \u0027internal_port_id\u0027,"},{"line_number":49,"context_line":"            metavar\u003d\u0027\u003cinternal-port-id\u003e\u0027,"},{"line_number":50,"context_line":"            help\u003d_(\"The ID of the Neutron port associated \""},{"line_number":51,"context_line":"                   \"to the floating IP port forwarding\")"},{"line_number":52,"context_line":"        )"},{"line_number":53,"context_line":"        parser.add_argument("},{"line_number":54,"context_line":"            \u0027internal_ip_address\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_31352d47","line":51,"in_reply_to":"3fce034c_abc45360","updated":"2019-04-16 11:50:35.000000000","message":"In case of the neutron API, we accept only ID for a neutron port, but in case of CLI we usually accepts name and ID for almost all resources, so it is natural to support both.\n\nIn addition, \u0027name\u0027 support will make scripting easier, as a user  do not need to check UUID for a port (as long as name is unique).\n\nI would like to ask opinions from Dean and Steve.","commit_id":"789b5d44d37b0774a4a7d40d645d0ba2038351b5"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"dcf655a37408fdcc1a98a627b9cc44911b667a5e","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            \u0027internal_port_id\u0027,"},{"line_number":49,"context_line":"            metavar\u003d\u0027\u003cinternal-port-id\u003e\u0027,"},{"line_number":50,"context_line":"            help\u003d_(\"The ID of the Neutron port associated \""},{"line_number":51,"context_line":"                   \"to the floating IP port forwarding\")"},{"line_number":52,"context_line":"        )"},{"line_number":53,"context_line":"        parser.add_argument("},{"line_number":54,"context_line":"            \u0027internal_ip_address\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_abc45360","line":51,"in_reply_to":"5fc1f717_56470fa4","updated":"2019-04-16 09:22:15.000000000","message":"Yes, it\u0027s a bit confusing, but the API is defined like this.","commit_id":"789b5d44d37b0774a4a7d40d645d0ba2038351b5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bd640a809988934f860592dfb5be4ab6bac07f96","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            \u0027internal_ip_address\u0027,"},{"line_number":55,"context_line":"            metavar\u003d\u0027\u003cinternal-ip-address\u003e\u0027,"},{"line_number":56,"context_line":"            help\u003d_(\"The fixed IPv4 address of the Neutron \""},{"line_number":57,"context_line":"                   \"port associated to the floating IP port forwarding\")"},{"line_number":58,"context_line":"        )"},{"line_number":59,"context_line":"        parser.add_argument("},{"line_number":60,"context_line":"            \u0027internal_port\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_5dd05c51","line":57,"updated":"2019-04-11 12:37:21.000000000","message":"According to the neutron APi reference, this is optional.","commit_id":"789b5d44d37b0774a4a7d40d645d0ba2038351b5"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"dcf655a37408fdcc1a98a627b9cc44911b667a5e","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            \u0027internal_ip_address\u0027,"},{"line_number":55,"context_line":"            metavar\u003d\u0027\u003cinternal-ip-address\u003e\u0027,"},{"line_number":56,"context_line":"            help\u003d_(\"The fixed IPv4 address of the Neutron \""},{"line_number":57,"context_line":"                   \"port associated to the floating IP port forwarding\")"},{"line_number":58,"context_line":"        )"},{"line_number":59,"context_line":"        parser.add_argument("},{"line_number":60,"context_line":"            \u0027internal_port\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_0bb6c7fb","line":57,"in_reply_to":"3fce034c_5dd05c51","updated":"2019-04-16 09:22:15.000000000","message":"Done","commit_id":"789b5d44d37b0774a4a7d40d645d0ba2038351b5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"bd640a809988934f860592dfb5be4ab6bac07f96","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            metavar\u003d\u0027\u003cprotocol\u003e\u0027,"},{"line_number":77,"context_line":"            help\u003d_(\"The protocol used in the floating IP \""},{"line_number":78,"context_line":"                   \"port forwarding\")"},{"line_number":79,"context_line":"        )"},{"line_number":80,"context_line":"        return parser"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_bd5380e2","line":79,"updated":"2019-04-11 12:37:21.000000000","message":"I have a concern on too many positional parameters. In OSC convention, we usually have one or two positional parameters and other parameters are --xxxx format (with required\u003dTrue).\n\nMy suggestion is to use positional arguments for one or two important parameters.\n\nI believe this improves the usability. Users do no need to remember the order of arguments.","commit_id":"789b5d44d37b0774a4a7d40d645d0ba2038351b5"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"dcf655a37408fdcc1a98a627b9cc44911b667a5e","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            metavar\u003d\u0027\u003cprotocol\u003e\u0027,"},{"line_number":77,"context_line":"            help\u003d_(\"The protocol used in the floating IP \""},{"line_number":78,"context_line":"                   \"port forwarding\")"},{"line_number":79,"context_line":"        )"},{"line_number":80,"context_line":"        return parser"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_4bbccfdb","line":79,"in_reply_to":"3fce034c_bd5380e2","updated":"2019-04-16 09:22:15.000000000","message":"Done","commit_id":"789b5d44d37b0774a4a7d40d645d0ba2038351b5"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"f44b612483f18f516795ec82baadfedced5ed83c","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        parser \u003d super(CreateFloatingIPPortForwarding,"},{"line_number":40,"context_line":"                       self).get_parser(prog_name)"},{"line_number":41,"context_line":"        parser.add_argument("},{"line_number":42,"context_line":"            \u0027--internal-ip-address\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027\u003cinternal-ip-address\u003e\u0027,"},{"line_number":44,"context_line":"            help\u003d_(\"The fixed IPv4 address of the Neutron \""},{"line_number":45,"context_line":"                   \"port associated to the floating IP port forwarding\")"},{"line_number":46,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_fcb1ba90","line":43,"range":{"start_line":42,"start_character":0,"end_line":43,"end_character":44},"updated":"2019-05-08 22:25:25.000000000","message":"Would it be more consistent to call this --fixed-ip-address based on the usage in the floating ip create command?  If it is the same thing it should have the same name.\n\nAlso put this option next tot he --internal-port and --external-port options so they appear together in help output.","commit_id":"a03a0616f647434e305203e6d8d6d23db73652d9"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"7a571dc89754d8ad4ad479be1762b79fcfce0edc","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        parser \u003d super(CreateFloatingIPPortForwarding,"},{"line_number":40,"context_line":"                       self).get_parser(prog_name)"},{"line_number":41,"context_line":"        parser.add_argument("},{"line_number":42,"context_line":"            \u0027--internal-ip-address\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027\u003cinternal-ip-address\u003e\u0027,"},{"line_number":44,"context_line":"            help\u003d_(\"The fixed IPv4 address of the Neutron \""},{"line_number":45,"context_line":"                   \"port associated to the floating IP port forwarding\")"},{"line_number":46,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_771ac57d","line":43,"range":{"start_line":42,"start_character":0,"end_line":43,"end_character":44},"in_reply_to":"dfbec78f_970899d9","updated":"2019-05-09 00:18:18.000000000","message":"OSC does not necessarily use the names used in the REST API.  Often users do not know or care about the internal names.","commit_id":"a03a0616f647434e305203e6d8d6d23db73652d9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"39d8c603da620650d3ad1fcbd30d75475e386e73","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        parser \u003d super(CreateFloatingIPPortForwarding,"},{"line_number":40,"context_line":"                       self).get_parser(prog_name)"},{"line_number":41,"context_line":"        parser.add_argument("},{"line_number":42,"context_line":"            \u0027--internal-ip-address\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027\u003cinternal-ip-address\u003e\u0027,"},{"line_number":44,"context_line":"            help\u003d_(\"The fixed IPv4 address of the Neutron \""},{"line_number":45,"context_line":"                   \"port associated to the floating IP port forwarding\")"},{"line_number":46,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_970899d9","line":43,"range":{"start_line":42,"start_character":0,"end_line":43,"end_character":44},"in_reply_to":"dfbec78f_fcb1ba90","updated":"2019-05-08 23:05:59.000000000","message":"So we will not align the API name?\nhttps://specs.openstack.org/openstack/neutron-specs/specs/rocky/port-forwarding.html#sub-resource-extension","commit_id":"a03a0616f647434e305203e6d8d6d23db73652d9"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"f44b612483f18f516795ec82baadfedced5ed83c","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                   \"port associated to the floating IP port forwarding\")"},{"line_number":46,"context_line":"        )"},{"line_number":47,"context_line":"        parser.add_argument("},{"line_number":48,"context_line":"            \u0027--internal-port-id\u0027,"},{"line_number":49,"context_line":"            metavar\u003d\u0027\u003cinternal-port-id\u003e\u0027,"},{"line_number":50,"context_line":"            required\u003dTrue,"},{"line_number":51,"context_line":"            help\u003d_(\"The name or ID of the Neutron port associated \""},{"line_number":52,"context_line":"                   \"to the floating IP port forwarding\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_bc0262b3","line":49,"range":{"start_line":48,"start_character":0,"end_line":49,"end_character":41},"updated":"2019-05-08 22:25:25.000000000","message":"This needs to have a different name to indicate that it is a Neutron port not a TCP/UDP port number.","commit_id":"a03a0616f647434e305203e6d8d6d23db73652d9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"39d8c603da620650d3ad1fcbd30d75475e386e73","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                   \"port associated to the floating IP port forwarding\")"},{"line_number":46,"context_line":"        )"},{"line_number":47,"context_line":"        parser.add_argument("},{"line_number":48,"context_line":"            \u0027--internal-port-id\u0027,"},{"line_number":49,"context_line":"            metavar\u003d\u0027\u003cinternal-port-id\u003e\u0027,"},{"line_number":50,"context_line":"            required\u003dTrue,"},{"line_number":51,"context_line":"            help\u003d_(\"The name or ID of the Neutron port associated \""},{"line_number":52,"context_line":"                   \"to the floating IP port forwarding\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_370f6de2","line":49,"range":{"start_line":48,"start_character":0,"end_line":49,"end_character":41},"in_reply_to":"dfbec78f_bc0262b3","updated":"2019-05-08 23:05:59.000000000","message":"Yep","commit_id":"a03a0616f647434e305203e6d8d6d23db73652d9"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"f44b612483f18f516795ec82baadfedced5ed83c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            \u0027--protocol\u0027,"},{"line_number":73,"context_line":"            metavar\u003d\u0027\u003cprotocol\u003e\u0027,"},{"line_number":74,"context_line":"            required\u003dTrue,"},{"line_number":75,"context_line":"            help\u003d_(\"The protocol used in the floating IP \""},{"line_number":76,"context_line":"                   \"port forwarding\")"},{"line_number":77,"context_line":"        )"},{"line_number":78,"context_line":"        parser.add_argument("},{"line_number":79,"context_line":"            \u0027floatingip\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_fc769ad8","line":76,"range":{"start_line":75,"start_character":0,"end_line":76,"end_character":37},"updated":"2019-05-08 22:25:25.000000000","message":"It would be helpful to include valid values in help to make it clear what this refers to, ie tcp or udp.","commit_id":"a03a0616f647434e305203e6d8d6d23db73652d9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"39d8c603da620650d3ad1fcbd30d75475e386e73","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            \u0027--protocol\u0027,"},{"line_number":73,"context_line":"            metavar\u003d\u0027\u003cprotocol\u003e\u0027,"},{"line_number":74,"context_line":"            required\u003dTrue,"},{"line_number":75,"context_line":"            help\u003d_(\"The protocol used in the floating IP \""},{"line_number":76,"context_line":"                   \"port forwarding\")"},{"line_number":77,"context_line":"        )"},{"line_number":78,"context_line":"        parser.add_argument("},{"line_number":79,"context_line":"            \u0027floatingip\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_772e4544","line":76,"range":{"start_line":75,"start_character":0,"end_line":76,"end_character":37},"in_reply_to":"dfbec78f_fc769ad8","updated":"2019-05-08 23:05:59.000000000","message":"Now it has 6 valid values:\nhttps://github.com/openstack/neutron-lib/blob/master/neutron_lib/constants.py#L215\nBut once Brian suggested to remove such context:\nhttps://review.opendev.org/#/c/650062/2/openstackclient/network/v2/floating_ip_port_forwarding.py@188","commit_id":"a03a0616f647434e305203e6d8d6d23db73652d9"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"f44b612483f18f516795ec82baadfedced5ed83c","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                       self).get_parser(prog_name)"},{"line_number":127,"context_line":"        parser.add_argument("},{"line_number":128,"context_line":"            \u0027floatingip\u0027,"},{"line_number":129,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":130,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs to \""},{"line_number":131,"context_line":"                   \"(name or ID)\")"},{"line_number":132,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_5c49e688","line":129,"range":{"start_line":129,"start_character":22,"end_line":129,"end_character":32},"updated":"2019-05-08 22:25:25.000000000","message":"\u003cfloating-ip\u003e","commit_id":"a03a0616f647434e305203e6d8d6d23db73652d9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"eb5b8d3e515cbe55249480d5ae6dd536c2c0a0fd","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                       self).get_parser(prog_name)"},{"line_number":127,"context_line":"        parser.add_argument("},{"line_number":128,"context_line":"            \u0027floatingip\u0027,"},{"line_number":129,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":130,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs to \""},{"line_number":131,"context_line":"                   \"(name or ID)\")"},{"line_number":132,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_d7a7f1a6","line":129,"range":{"start_line":129,"start_character":22,"end_line":129,"end_character":32},"in_reply_to":"dfbec78f_5c49e688","updated":"2019-05-08 23:28:09.000000000","message":"Done","commit_id":"a03a0616f647434e305203e6d8d6d23db73652d9"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"f44b612483f18f516795ec82baadfedced5ed83c","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            \u0027floatingip\u0027,"},{"line_number":129,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":130,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs to \""},{"line_number":131,"context_line":"                   \"(name or ID)\")"},{"line_number":132,"context_line":"        )"},{"line_number":133,"context_line":"        parser.add_argument("},{"line_number":134,"context_line":"            \u0027port_forwarding_id\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_7c4cea9d","line":131,"range":{"start_line":131,"start_character":21,"end_line":131,"end_character":25},"updated":"2019-05-08 22:25:25.000000000","message":"IP address","commit_id":"a03a0616f647434e305203e6d8d6d23db73652d9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"eb5b8d3e515cbe55249480d5ae6dd536c2c0a0fd","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            \u0027floatingip\u0027,"},{"line_number":129,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":130,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs to \""},{"line_number":131,"context_line":"                   \"(name or ID)\")"},{"line_number":132,"context_line":"        )"},{"line_number":133,"context_line":"        parser.add_argument("},{"line_number":134,"context_line":"            \u0027port_forwarding_id\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_97e099ce","line":131,"range":{"start_line":131,"start_character":21,"end_line":131,"end_character":25},"in_reply_to":"dfbec78f_7c4cea9d","updated":"2019-05-08 23:28:09.000000000","message":"Done","commit_id":"a03a0616f647434e305203e6d8d6d23db73652d9"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"f44b612483f18f516795ec82baadfedced5ed83c","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                   \"(name or ID)\")"},{"line_number":132,"context_line":"        )"},{"line_number":133,"context_line":"        parser.add_argument("},{"line_number":134,"context_line":"            \u0027port_forwarding_id\u0027,"},{"line_number":135,"context_line":"            nargs\u003d\"+\","},{"line_number":136,"context_line":"            metavar\u003d\"\u003cport-forwarding-id\u003e\","},{"line_number":137,"context_line":"            help\u003d_(\"The ID of the floating IP port forwarding(s) to delete\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_7c314a0b","line":134,"range":{"start_line":134,"start_character":0,"end_line":134,"end_character":12},"updated":"2019-05-08 22:25:25.000000000","message":"This feels awkward, are the port forwarding IDs not unique to identify the forward being deleted?","commit_id":"a03a0616f647434e305203e6d8d6d23db73652d9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"39d8c603da620650d3ad1fcbd30d75475e386e73","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                   \"(name or ID)\")"},{"line_number":132,"context_line":"        )"},{"line_number":133,"context_line":"        parser.add_argument("},{"line_number":134,"context_line":"            \u0027port_forwarding_id\u0027,"},{"line_number":135,"context_line":"            nargs\u003d\"+\","},{"line_number":136,"context_line":"            metavar\u003d\"\u003cport-forwarding-id\u003e\","},{"line_number":137,"context_line":"            help\u003d_(\"The ID of the floating IP port forwarding(s) to delete\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_17e26902","line":134,"range":{"start_line":134,"start_character":0,"end_line":134,"end_character":12},"in_reply_to":"dfbec78f_7c314a0b","updated":"2019-05-08 23:05:59.000000000","message":"The API url needs the floating IP id. It is a sub-resource.\nhttps://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/definitions/floating_ip_port_forwarding.py#L58-L59","commit_id":"a03a0616f647434e305203e6d8d6d23db73652d9"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"f44b612483f18f516795ec82baadfedced5ed83c","unresolved":false,"context_lines":[{"line_number":173,"context_line":"                       self).get_parser(prog_name)"},{"line_number":174,"context_line":"        parser.add_argument("},{"line_number":175,"context_line":"            \u0027floatingip\u0027,"},{"line_number":176,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":177,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs to \""},{"line_number":178,"context_line":"                   \"(name or ID)\")"},{"line_number":179,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_5c3ec6da","line":176,"range":{"start_line":176,"start_character":22,"end_line":176,"end_character":32},"updated":"2019-05-08 22:25:25.000000000","message":"\u003cfloating-ip\u003e","commit_id":"a03a0616f647434e305203e6d8d6d23db73652d9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"eb5b8d3e515cbe55249480d5ae6dd536c2c0a0fd","unresolved":false,"context_lines":[{"line_number":173,"context_line":"                       self).get_parser(prog_name)"},{"line_number":174,"context_line":"        parser.add_argument("},{"line_number":175,"context_line":"            \u0027floatingip\u0027,"},{"line_number":176,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":177,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs to \""},{"line_number":178,"context_line":"                   \"(name or ID)\")"},{"line_number":179,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_77b885c7","line":176,"range":{"start_line":176,"start_character":22,"end_line":176,"end_character":32},"in_reply_to":"dfbec78f_5c3ec6da","updated":"2019-05-08 23:28:09.000000000","message":"Done","commit_id":"a03a0616f647434e305203e6d8d6d23db73652d9"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"f44b612483f18f516795ec82baadfedced5ed83c","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                       self).get_parser(prog_name)"},{"line_number":251,"context_line":"        parser.add_argument("},{"line_number":252,"context_line":"            \u0027floatingip\u0027,"},{"line_number":253,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":254,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs to \""},{"line_number":255,"context_line":"                   \"(name or ID)\")"},{"line_number":256,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_1c204eb0","line":253,"range":{"start_line":253,"start_character":22,"end_line":253,"end_character":32},"updated":"2019-05-08 22:25:25.000000000","message":"\u003cfloating-ip\u003e","commit_id":"a03a0616f647434e305203e6d8d6d23db73652d9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"eb5b8d3e515cbe55249480d5ae6dd536c2c0a0fd","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                       self).get_parser(prog_name)"},{"line_number":251,"context_line":"        parser.add_argument("},{"line_number":252,"context_line":"            \u0027floatingip\u0027,"},{"line_number":253,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":254,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs to \""},{"line_number":255,"context_line":"                   \"(name or ID)\")"},{"line_number":256,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_37b20de8","line":253,"range":{"start_line":253,"start_character":22,"end_line":253,"end_character":32},"in_reply_to":"dfbec78f_1c204eb0","updated":"2019-05-08 23:28:09.000000000","message":"Done","commit_id":"a03a0616f647434e305203e6d8d6d23db73652d9"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"f44b612483f18f516795ec82baadfedced5ed83c","unresolved":false,"context_lines":[{"line_number":334,"context_line":"                       self).get_parser(prog_name)"},{"line_number":335,"context_line":"        parser.add_argument("},{"line_number":336,"context_line":"            \u0027floatingip\u0027,"},{"line_number":337,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":338,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs to \""},{"line_number":339,"context_line":"                   \"(name or ID)\")"},{"line_number":340,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_bc2ee2a2","line":337,"range":{"start_line":337,"start_character":22,"end_line":337,"end_character":32},"updated":"2019-05-08 22:25:25.000000000","message":"\u003cfloating-ip\u003e","commit_id":"a03a0616f647434e305203e6d8d6d23db73652d9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"eb5b8d3e515cbe55249480d5ae6dd536c2c0a0fd","unresolved":false,"context_lines":[{"line_number":334,"context_line":"                       self).get_parser(prog_name)"},{"line_number":335,"context_line":"        parser.add_argument("},{"line_number":336,"context_line":"            \u0027floatingip\u0027,"},{"line_number":337,"context_line":"            metavar\u003d\u0027\u003cfloatingip\u003e\u0027,"},{"line_number":338,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs to \""},{"line_number":339,"context_line":"                   \"(name or ID)\")"},{"line_number":340,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_f7cb1550","line":337,"range":{"start_line":337,"start_character":22,"end_line":337,"end_character":32},"in_reply_to":"dfbec78f_bc2ee2a2","updated":"2019-05-08 23:28:09.000000000","message":"Done","commit_id":"a03a0616f647434e305203e6d8d6d23db73652d9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d8fabc1102e16212ef7647e74701e9567d6f79c1","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        parser \u003d super(CreateFloatingIPPortForwarding,"},{"line_number":40,"context_line":"                       self).get_parser(prog_name)"},{"line_number":41,"context_line":"        parser.add_argument("},{"line_number":42,"context_line":"            \u0027--internal-ip-address\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027\u003cinternal-ip-address\u003e\u0027,"},{"line_number":44,"context_line":"            help\u003d_(\"The fixed IPv4 address of the Neutron \""},{"line_number":45,"context_line":"                   \"port associated to the floating IP port forwarding\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"bfb3d3c7_88df9a67","line":42,"updated":"2019-05-30 14:32:56.000000000","message":"Please do it required\u003dTrue as this attribute is required by neutron api. I just sent patch to fix it in api-ref https://review.opendev.org/#/c/662207/","commit_id":"476fa29aa5fa60f0cd920b9bcf6d978655b163d3"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"098d5c86b9812c7d5c450968f7e6d20e27751997","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        parser \u003d super(CreateFloatingIPPortForwarding,"},{"line_number":40,"context_line":"                       self).get_parser(prog_name)"},{"line_number":41,"context_line":"        parser.add_argument("},{"line_number":42,"context_line":"            \u0027--internal-ip-address\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027\u003cinternal-ip-address\u003e\u0027,"},{"line_number":44,"context_line":"            help\u003d_(\"The fixed IPv4 address of the Neutron \""},{"line_number":45,"context_line":"                   \"port associated to the floating IP port forwarding\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fb8cfa7_04cb6753","line":42,"in_reply_to":"bfb3d3c7_88df9a67","updated":"2019-06-02 13:26:22.000000000","message":"Done","commit_id":"476fa29aa5fa60f0cd920b9bcf6d978655b163d3"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"da3aad9de01c89b6ed27a532ae4b70001bf73ac7","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        parser.add_argument("},{"line_number":258,"context_line":"            \u0027port_forwarding_id\u0027,"},{"line_number":259,"context_line":"            metavar\u003d\u0027\u003cport-forwarding-id\u003e\u0027,"},{"line_number":260,"context_line":"            help\u003d_(\"The ID of the floating IP port forwarding\"))"},{"line_number":261,"context_line":"        parser.add_argument("},{"line_number":262,"context_line":"            \u0027--internal_port_id\u0027,"},{"line_number":263,"context_line":"            metavar\u003d\u0027\u003cinternal-port-id\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bfb3d3c7_e2185182","line":260,"range":{"start_line":260,"start_character":63,"end_line":260,"end_character":64},"updated":"2019-05-21 13:00:10.000000000","message":"This was the only one not on a new line, I don\u0027t know how I notice such things, but you don\u0027t need to change it :)","commit_id":"476fa29aa5fa60f0cd920b9bcf6d978655b163d3"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"098d5c86b9812c7d5c450968f7e6d20e27751997","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        parser.add_argument("},{"line_number":258,"context_line":"            \u0027port_forwarding_id\u0027,"},{"line_number":259,"context_line":"            metavar\u003d\u0027\u003cport-forwarding-id\u003e\u0027,"},{"line_number":260,"context_line":"            help\u003d_(\"The ID of the floating IP port forwarding\"))"},{"line_number":261,"context_line":"        parser.add_argument("},{"line_number":262,"context_line":"            \u0027--internal_port_id\u0027,"},{"line_number":263,"context_line":"            metavar\u003d\u0027\u003cinternal-port-id\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fb8cfa7_24c8eb53","line":260,"range":{"start_line":260,"start_character":63,"end_line":260,"end_character":64},"in_reply_to":"bfb3d3c7_e2185182","updated":"2019-06-02 13:26:22.000000000","message":"Done","commit_id":"476fa29aa5fa60f0cd920b9bcf6d978655b163d3"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"83af834b91f356797bb07934e10e385a6ad55eff","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                   \"port associated to the floating IP port forwarding\")"},{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":"        parser.add_argument("},{"line_number":49,"context_line":"            \u0027--internal-port-id\u0027,"},{"line_number":50,"context_line":"            metavar\u003d\u0027\u003cinternal-port-id\u003e\u0027,"},{"line_number":51,"context_line":"            required\u003dTrue,"},{"line_number":52,"context_line":"            help\u003d_(\"The name or ID of the Neutron port associated \""}],"source_content_type":"text/x-python","patch_set":6,"id":"9fb8cfa7_2b3705b3","line":49,"range":{"start_line":49,"start_character":13,"end_line":49,"end_character":31},"updated":"2019-06-21 09:24:22.000000000","message":"Generally I agree with Dean regarding the port related cli options, but with quick grep in python-openstackclient I can\u0027t see the consistency :-)\n\ni.e.:\n--port as neutron port: https://opendev.org/openstack/python-openstackclient/src/branch/master/openstackclient/compute/v2/server.py#L606\n--port as protocol port (ssh actually): https://opendev.org/openstack/python-openstackclient/src/branch/master/openstackclient/compute/v2/server.py#L2311\n\n\nBut perhaps renaming here internal-port-id to neutron-port (anyway it can be port name as well not just uuid)\nand internal-port to something like protocol-port-number or similar can help increasing the usability I think","commit_id":"b13256fe26d7ab5d64763ff89cb4bda126684735"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"567301561cd3e81876741adfd940d394d83f12db","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                   \"port associated to the floating IP port forwarding\")"},{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":"        parser.add_argument("},{"line_number":49,"context_line":"            \u0027--internal-port-id\u0027,"},{"line_number":50,"context_line":"            metavar\u003d\u0027\u003cinternal-port-id\u003e\u0027,"},{"line_number":51,"context_line":"            required\u003dTrue,"},{"line_number":52,"context_line":"            help\u003d_(\"The name or ID of the Neutron port associated \""}],"source_content_type":"text/x-python","patch_set":6,"id":"9fb8cfa7_1fb9c513","line":49,"range":{"start_line":49,"start_character":13,"end_line":49,"end_character":31},"in_reply_to":"9fb8cfa7_0c2a292b","updated":"2019-06-27 07:12:57.000000000","message":"thanks for considering, if I can help just catch me on irc.","commit_id":"b13256fe26d7ab5d64763ff89cb4bda126684735"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"006c10be894399bb5f0cd41765f6ed0997c0af8c","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                   \"port associated to the floating IP port forwarding\")"},{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":"        parser.add_argument("},{"line_number":49,"context_line":"            \u0027--internal-port-id\u0027,"},{"line_number":50,"context_line":"            metavar\u003d\u0027\u003cinternal-port-id\u003e\u0027,"},{"line_number":51,"context_line":"            required\u003dTrue,"},{"line_number":52,"context_line":"            help\u003d_(\"The name or ID of the Neutron port associated \""}],"source_content_type":"text/x-python","patch_set":6,"id":"9fb8cfa7_d9d296d1","line":49,"range":{"start_line":49,"start_character":13,"end_line":49,"end_character":31},"in_reply_to":"9fb8cfa7_2b3705b3","updated":"2019-06-25 07:19:39.000000000","message":"Could you please consider my idea?","commit_id":"b13256fe26d7ab5d64763ff89cb4bda126684735"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"d930abee0415227bdc386ef53fb221aa49c021c6","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                   \"port associated to the floating IP port forwarding\")"},{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":"        parser.add_argument("},{"line_number":49,"context_line":"            \u0027--internal-port-id\u0027,"},{"line_number":50,"context_line":"            metavar\u003d\u0027\u003cinternal-port-id\u003e\u0027,"},{"line_number":51,"context_line":"            required\u003dTrue,"},{"line_number":52,"context_line":"            help\u003d_(\"The name or ID of the Neutron port associated \""}],"source_content_type":"text/x-python","patch_set":6,"id":"9fb8cfa7_0c2a292b","line":49,"range":{"start_line":49,"start_character":13,"end_line":49,"end_character":31},"in_reply_to":"9fb8cfa7_d9d296d1","updated":"2019-06-25 13:55:17.000000000","message":"Looks good, I\u0027m working on it. Thanks for the suggestion.","commit_id":"b13256fe26d7ab5d64763ff89cb4bda126684735"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"83af834b91f356797bb07934e10e385a6ad55eff","unresolved":false,"context_lines":[{"line_number":261,"context_line":"            help\u003d_(\"The ID of the floating IP port forwarding\")"},{"line_number":262,"context_line":"        )"},{"line_number":263,"context_line":"        parser.add_argument("},{"line_number":264,"context_line":"            \u0027--internal_port_id\u0027,"},{"line_number":265,"context_line":"            metavar\u003d\u0027\u003cinternal-port-id\u003e\u0027,"},{"line_number":266,"context_line":"            help\u003d_(\"The ID of the Neutron port associated to \""},{"line_number":267,"context_line":"                   \"the floating IP port forwarding\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fb8cfa7_eb7d6d6e","line":264,"range":{"start_line":264,"start_character":15,"end_line":264,"end_character":31},"updated":"2019-06-21 09:24:22.000000000","message":"nit: for set you use _ (i.e.: internal_port_id) for create - (i.e.: internal-port-id) that can be confusing for the user, could you please make it consistent?","commit_id":"b13256fe26d7ab5d64763ff89cb4bda126684735"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"69db7113039e2dea8072503f56eb6a617b0c9a76","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                   \"port forwarding\")"},{"line_number":78,"context_line":"        )"},{"line_number":79,"context_line":"        parser.add_argument("},{"line_number":80,"context_line":"            \u0027floatingip\u0027,"},{"line_number":81,"context_line":"            metavar\u003d\u0027\u003cfloating-ip\u003e\u0027,"},{"line_number":82,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs to \""},{"line_number":83,"context_line":"                   \"(IP address or ID)\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fb8cfa7_eb16aea7","line":80,"updated":"2019-06-24 15:47:57.000000000","message":"Shouldn\u0027t this be --floating-ip ?","commit_id":"91b0f71196def7e47ed8494b0cba458c6d9327e7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ccf179496d14fcc529ac964c0c2c20c2c2ac36e1","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                   \"port forwarding\")"},{"line_number":78,"context_line":"        )"},{"line_number":79,"context_line":"        parser.add_argument("},{"line_number":80,"context_line":"            \u0027floatingip\u0027,"},{"line_number":81,"context_line":"            metavar\u003d\u0027\u003cfloating-ip\u003e\u0027,"},{"line_number":82,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs to \""},{"line_number":83,"context_line":"                   \"(IP address or ID)\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fb8cfa7_cc01713a","line":80,"in_reply_to":"9fb8cfa7_0a7a0ef0","updated":"2019-06-25 14:19:20.000000000","message":"Ah, ok, but then it should match the metavar and be \u0027floating-ip\u0027 I would think.  Some of my other comments still apply.","commit_id":"91b0f71196def7e47ed8494b0cba458c6d9327e7"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"3792dea14fc59526df2f28baa8c122696c9da9ea","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                   \"port forwarding\")"},{"line_number":78,"context_line":"        )"},{"line_number":79,"context_line":"        parser.add_argument("},{"line_number":80,"context_line":"            \u0027floatingip\u0027,"},{"line_number":81,"context_line":"            metavar\u003d\u0027\u003cfloating-ip\u003e\u0027,"},{"line_number":82,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs to \""},{"line_number":83,"context_line":"                   \"(IP address or ID)\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fb8cfa7_0a7a0ef0","line":80,"in_reply_to":"9fb8cfa7_eb16aea7","updated":"2019-06-25 11:18:40.000000000","message":"It is the required input for all these commands.","commit_id":"91b0f71196def7e47ed8494b0cba458c6d9327e7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"69db7113039e2dea8072503f56eb6a617b0c9a76","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        parser \u003d super(DeleteFloatingIPPortForwarding,"},{"line_number":127,"context_line":"                       self).get_parser(prog_name)"},{"line_number":128,"context_line":"        parser.add_argument("},{"line_number":129,"context_line":"            \u0027floatingip\u0027,"},{"line_number":130,"context_line":"            metavar\u003d\u0027\u003cfloating-ip\u003e\u0027,"},{"line_number":131,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs to \""},{"line_number":132,"context_line":"                   \"(IP address or ID)\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fb8cfa7_0b21c2fb","line":129,"updated":"2019-06-24 15:47:57.000000000","message":"Same","commit_id":"91b0f71196def7e47ed8494b0cba458c6d9327e7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"69db7113039e2dea8072503f56eb6a617b0c9a76","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                   \"(IP address or ID)\")"},{"line_number":133,"context_line":"        )"},{"line_number":134,"context_line":"        parser.add_argument("},{"line_number":135,"context_line":"            \u0027port_forwarding_id\u0027,"},{"line_number":136,"context_line":"            nargs\u003d\"+\","},{"line_number":137,"context_line":"            metavar\u003d\"\u003cport-forwarding-id\u003e\","},{"line_number":138,"context_line":"            help\u003d_(\"The ID of the floating IP port forwarding(s) to delete\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fb8cfa7_eb7b0ef1","line":135,"updated":"2019-06-24 15:47:57.000000000","message":"--port-forwarding-id","commit_id":"91b0f71196def7e47ed8494b0cba458c6d9327e7"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"ee4b86a0f10462a17987c047484cb9c9a59ae528","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                   \"(IP address or ID)\")"},{"line_number":133,"context_line":"        )"},{"line_number":134,"context_line":"        parser.add_argument("},{"line_number":135,"context_line":"            \u0027port_forwarding_id\u0027,"},{"line_number":136,"context_line":"            nargs\u003d\"+\","},{"line_number":137,"context_line":"            metavar\u003d\"\u003cport-forwarding-id\u003e\","},{"line_number":138,"context_line":"            help\u003d_(\"The ID of the floating IP port forwarding(s) to delete\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fb8cfa7_2f4d4d3a","line":135,"in_reply_to":"9fb8cfa7_eb7b0ef1","updated":"2019-07-01 03:06:04.000000000","message":"It is required too, and here we accept a list input for these IDs.","commit_id":"91b0f71196def7e47ed8494b0cba458c6d9327e7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"69db7113039e2dea8072503f56eb6a617b0c9a76","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        parser \u003d super(ListFloatingIPPortForwarding,"},{"line_number":174,"context_line":"                       self).get_parser(prog_name)"},{"line_number":175,"context_line":"        parser.add_argument("},{"line_number":176,"context_line":"            \u0027floatingip\u0027,"},{"line_number":177,"context_line":"            metavar\u003d\u0027\u003cfloating-ip\u003e\u0027,"},{"line_number":178,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs to \""},{"line_number":179,"context_line":"                   \"(IP address or ID)\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fb8cfa7_6b671e53","line":176,"updated":"2019-06-24 15:47:57.000000000","message":"--floating-ip","commit_id":"91b0f71196def7e47ed8494b0cba458c6d9327e7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"69db7113039e2dea8072503f56eb6a617b0c9a76","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        parser \u003d super(SetFloatingIPPortForwarding,"},{"line_number":251,"context_line":"                       self).get_parser(prog_name)"},{"line_number":252,"context_line":"        parser.add_argument("},{"line_number":253,"context_line":"            \u0027floatingip\u0027,"},{"line_number":254,"context_line":"            metavar\u003d\u0027\u003cfloating-ip\u003e\u0027,"},{"line_number":255,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs to \""},{"line_number":256,"context_line":"                   \"(IP address or ID)\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fb8cfa7_2b71260d","line":253,"updated":"2019-06-24 15:47:57.000000000","message":"--floating-ip","commit_id":"91b0f71196def7e47ed8494b0cba458c6d9327e7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"69db7113039e2dea8072503f56eb6a617b0c9a76","unresolved":false,"context_lines":[{"line_number":256,"context_line":"                   \"(IP address or ID)\")"},{"line_number":257,"context_line":"        )"},{"line_number":258,"context_line":"        parser.add_argument("},{"line_number":259,"context_line":"            \u0027port_forwarding_id\u0027,"},{"line_number":260,"context_line":"            metavar\u003d\u0027\u003cport-forwarding-id\u003e\u0027,"},{"line_number":261,"context_line":"            help\u003d_(\"The ID of the floating IP port forwarding\")"},{"line_number":262,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fb8cfa7_cb616a3b","line":259,"updated":"2019-06-24 15:47:57.000000000","message":"--port-forwarding-id","commit_id":"91b0f71196def7e47ed8494b0cba458c6d9327e7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"69db7113039e2dea8072503f56eb6a617b0c9a76","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        parser \u003d super(ShowFloatingIPPortForwarding,"},{"line_number":336,"context_line":"                       self).get_parser(prog_name)"},{"line_number":337,"context_line":"        parser.add_argument("},{"line_number":338,"context_line":"            \u0027floatingip\u0027,"},{"line_number":339,"context_line":"            metavar\u003d\u0027\u003cfloating-ip\u003e\u0027,"},{"line_number":340,"context_line":"            help\u003d_(\"Floating IP that the port forwarding belongs to \""},{"line_number":341,"context_line":"                   \"(IP address or ID)\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fb8cfa7_eb646e4b","line":338,"updated":"2019-06-24 15:47:57.000000000","message":"Same","commit_id":"91b0f71196def7e47ed8494b0cba458c6d9327e7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"69db7113039e2dea8072503f56eb6a617b0c9a76","unresolved":false,"context_lines":[{"line_number":341,"context_line":"                   \"(IP address or ID)\")"},{"line_number":342,"context_line":"        )"},{"line_number":343,"context_line":"        parser.add_argument("},{"line_number":344,"context_line":"            \u0027port_forwarding_id\u0027,"},{"line_number":345,"context_line":"            metavar\u003d\"\u003cport-forwarding-id\u003e\","},{"line_number":346,"context_line":"            help\u003d_(\"The ID of the floating IP port forwarding\")"},{"line_number":347,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fb8cfa7_ab5e7673","line":344,"updated":"2019-06-24 15:47:57.000000000","message":"Same","commit_id":"91b0f71196def7e47ed8494b0cba458c6d9327e7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c6994cd854a949fd486b66feab37f7c11a0a1667","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":"        parser.add_argument("},{"line_number":49,"context_line":"            \u0027--neutron-port\u0027,"},{"line_number":50,"context_line":"            metavar\u003d\u0027\u003cneutron-port\u003e\u0027,"},{"line_number":51,"context_line":"            required\u003dTrue,"},{"line_number":52,"context_line":"            help\u003d_(\"The name or ID of the Neutron port associated \""},{"line_number":53,"context_line":"                   \"to the floating IP port forwarding\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fb8cfa7_a7671425","line":50,"updated":"2019-07-02 02:38:02.000000000","message":"I know I keep nitpicking, but you changed the name here so I noticed it :)\n\nWe shouldn\u0027t be using \u0027neutron\u0027 in the name, and looking at other networking commands, we actually shouldn\u0027t be using \u0027neutron\u0027 or \u0027Neutron\u0027 in any of the help messages either, just \u0027port\u0027, as it\u0027s implied that it\u0027s Neutron.  I checked and there are no other files in this directory that use the word.  For that reason, this should probably just be \u0027--port\u0027 as we do in floating_ip.py","commit_id":"eacf653645c85f917d6ac4c3e3bfe09ed70fab05"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"83595b325aba89fcbbab992e4452579406618b1e","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":"        parser.add_argument("},{"line_number":49,"context_line":"            \u0027--neutron-port\u0027,"},{"line_number":50,"context_line":"            metavar\u003d\u0027\u003cneutron-port\u003e\u0027,"},{"line_number":51,"context_line":"            required\u003dTrue,"},{"line_number":52,"context_line":"            help\u003d_(\"The name or ID of the Neutron port associated \""},{"line_number":53,"context_line":"                   \"to the floating IP port forwarding\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fb8cfa7_273d5add","line":50,"in_reply_to":"9fb8cfa7_800991dd","updated":"2019-07-02 14:43:59.000000000","message":"OK, let\u0027s use \u0027--port\u0027 for consistence","commit_id":"eacf653645c85f917d6ac4c3e3bfe09ed70fab05"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"97075cff1fd1b0eff0da8fe32a21862c7e8f07b2","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":"        parser.add_argument("},{"line_number":49,"context_line":"            \u0027--neutron-port\u0027,"},{"line_number":50,"context_line":"            metavar\u003d\u0027\u003cneutron-port\u003e\u0027,"},{"line_number":51,"context_line":"            required\u003dTrue,"},{"line_number":52,"context_line":"            help\u003d_(\"The name or ID of the Neutron port associated \""},{"line_number":53,"context_line":"                   \"to the floating IP port forwarding\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fb8cfa7_d6b75720","line":50,"in_reply_to":"9fb8cfa7_a71e346d","updated":"2019-07-02 05:19:06.000000000","message":"Actually I suggested neutron-port and protocol-port (and previously Dean as I remember) to make it easier for the user to distinguish between l4 port number, and uuid or name of a neutron port.","commit_id":"eacf653645c85f917d6ac4c3e3bfe09ed70fab05"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"698c651dacfe435e2d01c8e2c147eb94017597a8","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":"        parser.add_argument("},{"line_number":49,"context_line":"            \u0027--neutron-port\u0027,"},{"line_number":50,"context_line":"            metavar\u003d\u0027\u003cneutron-port\u003e\u0027,"},{"line_number":51,"context_line":"            required\u003dTrue,"},{"line_number":52,"context_line":"            help\u003d_(\"The name or ID of the Neutron port associated \""},{"line_number":53,"context_line":"                   \"to the floating IP port forwarding\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fb8cfa7_a71e346d","line":50,"in_reply_to":"9fb8cfa7_a7671425","updated":"2019-07-02 02:50:00.000000000","message":"We have two \"ports\" here. The one is a port of a network and the other is a port number of layer-4 protocol. I guess you avoided --port for both cases.\n\nMy idea other than --port is \"--network-port\".\n\nI am also okay with --port if we agree with it.","commit_id":"eacf653645c85f917d6ac4c3e3bfe09ed70fab05"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"050005711a989b06f22cb51001763e5037115353","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":"        parser.add_argument("},{"line_number":49,"context_line":"            \u0027--neutron-port\u0027,"},{"line_number":50,"context_line":"            metavar\u003d\u0027\u003cneutron-port\u003e\u0027,"},{"line_number":51,"context_line":"            required\u003dTrue,"},{"line_number":52,"context_line":"            help\u003d_(\"The name or ID of the Neutron port associated \""},{"line_number":53,"context_line":"                   \"to the floating IP port forwarding\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fb8cfa7_800991dd","line":50,"in_reply_to":"9fb8cfa7_d6b75720","updated":"2019-07-02 13:00:24.000000000","message":"It\u0027s just that it is the networking API, neutron is the implementation of it.  As a comparison, there are no compute commands that have \u0027nova\u0027 as an argument.","commit_id":"eacf653645c85f917d6ac4c3e3bfe09ed70fab05"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"05a8dae4619b0f88de3e975f31b61877ae0dcd55","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":"        parser.add_argument("},{"line_number":49,"context_line":"            \u0027--port\u0027,"},{"line_number":50,"context_line":"            metavar\u003d\u0027\u003cneutron-port-id\u003e\u0027,"},{"line_number":51,"context_line":"            required\u003dTrue,"},{"line_number":52,"context_line":"            help\u003d_(\"The name or ID of the Neutron port associated \""},{"line_number":53,"context_line":"                   \"to the floating IP port forwarding\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_eeb27749","line":50,"range":{"start_line":50,"start_character":22,"end_line":50,"end_character":37},"updated":"2019-07-25 05:56:20.000000000","message":"port name is allowed, so it needs to be \"\u003cport\u003e\".","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"4cfbb2262bd8f55d8490a296814147b3b5ce498f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":"        parser.add_argument("},{"line_number":49,"context_line":"            \u0027--port\u0027,"},{"line_number":50,"context_line":"            metavar\u003d\u0027\u003cneutron-port-id\u003e\u0027,"},{"line_number":51,"context_line":"            required\u003dTrue,"},{"line_number":52,"context_line":"            help\u003d_(\"The name or ID of the Neutron port associated \""},{"line_number":53,"context_line":"                   \"to the floating IP port forwarding\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_7513af67","line":50,"range":{"start_line":50,"start_character":22,"end_line":50,"end_character":37},"in_reply_to":"7faddb67_eeb27749","updated":"2019-07-25 15:30:01.000000000","message":"Done","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"05a8dae4619b0f88de3e975f31b61877ae0dcd55","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            \u0027--port\u0027,"},{"line_number":50,"context_line":"            metavar\u003d\u0027\u003cneutron-port-id\u003e\u0027,"},{"line_number":51,"context_line":"            required\u003dTrue,"},{"line_number":52,"context_line":"            help\u003d_(\"The name or ID of the Neutron port associated \""},{"line_number":53,"context_line":"                   \"to the floating IP port forwarding\")"},{"line_number":54,"context_line":"        )"},{"line_number":55,"context_line":"        parser.add_argument("},{"line_number":56,"context_line":"            \u0027--internal-protocol-port\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_2e92cfa0","line":53,"range":{"start_line":52,"start_character":20,"end_line":53,"end_character":54},"updated":"2019-07-25 05:56:20.000000000","message":"NOTE: From the point of view of OSC convention, \u0027neutron\u0027 is unnecessary, but it looks acceptable as it may clarify the difference between protocol port and neutron port.","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"05a8dae4619b0f88de3e975f31b61877ae0dcd55","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        parser.add_argument("},{"line_number":56,"context_line":"            \u0027--internal-protocol-port\u0027,"},{"line_number":57,"context_line":"            type\u003dint,"},{"line_number":58,"context_line":"            metavar\u003d\u0027\u003cinternal-protocol-port\u003e\u0027,"},{"line_number":59,"context_line":"            required\u003dTrue,"},{"line_number":60,"context_line":"            help\u003d_(\"The protocol port number \""},{"line_number":61,"context_line":"                   \"of the Neutron port fixed IPv4 address \""}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_ce90db98","line":58,"range":{"start_line":58,"start_character":22,"end_line":58,"end_character":44},"updated":"2019-07-25 05:56:20.000000000","message":"\"port-number\" might be enough.","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"42f0e46eba484be074cffdf872d31ef108a542ea","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        parser.add_argument("},{"line_number":56,"context_line":"            \u0027--internal-protocol-port\u0027,"},{"line_number":57,"context_line":"            type\u003dint,"},{"line_number":58,"context_line":"            metavar\u003d\u0027\u003cinternal-protocol-port\u003e\u0027,"},{"line_number":59,"context_line":"            required\u003dTrue,"},{"line_number":60,"context_line":"            help\u003d_(\"The protocol port number \""},{"line_number":61,"context_line":"                   \"of the Neutron port fixed IPv4 address \""}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_16135668","line":58,"range":{"start_line":58,"start_character":22,"end_line":58,"end_character":44},"in_reply_to":"7faddb67_25273a67","updated":"2019-07-26 11:31:50.000000000","message":"I am ok with it, thanks Akihiro for forcing me to read again the argparse documentation :-)","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0f14f92133676b16898ef87c9506cb561af61bf1","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        parser.add_argument("},{"line_number":56,"context_line":"            \u0027--internal-protocol-port\u0027,"},{"line_number":57,"context_line":"            type\u003dint,"},{"line_number":58,"context_line":"            metavar\u003d\u0027\u003cinternal-protocol-port\u003e\u0027,"},{"line_number":59,"context_line":"            required\u003dTrue,"},{"line_number":60,"context_line":"            help\u003d_(\"The protocol port number \""},{"line_number":61,"context_line":"                   \"of the Neutron port fixed IPv4 address \""}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_ebc5733e","line":58,"range":{"start_line":58,"start_character":22,"end_line":58,"end_character":44},"in_reply_to":"7faddb67_25273a67","updated":"2019-07-26 10:04:32.000000000","message":"ha, I didn\u0027t understand correct Your suggestion Akihiro :) It looks much better with Your proposal. I agree with You.","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a23e905256c51044dedb9a119ac8a13e3ba7fbca","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        parser.add_argument("},{"line_number":56,"context_line":"            \u0027--internal-protocol-port\u0027,"},{"line_number":57,"context_line":"            type\u003dint,"},{"line_number":58,"context_line":"            metavar\u003d\u0027\u003cinternal-protocol-port\u003e\u0027,"},{"line_number":59,"context_line":"            required\u003dTrue,"},{"line_number":60,"context_line":"            help\u003d_(\"The protocol port number \""},{"line_number":61,"context_line":"                   \"of the Neutron port fixed IPv4 address \""}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_74117804","line":58,"range":{"start_line":58,"start_character":22,"end_line":58,"end_character":44},"in_reply_to":"7faddb67_546f9cc4","updated":"2019-07-25 08:56:15.000000000","message":"I agree with Lajos here. We have internal and external port number here and we need to distinguish between them somehow","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a8bda19535254afc22d44a08d8353b51b2e6582a","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        parser.add_argument("},{"line_number":56,"context_line":"            \u0027--internal-protocol-port\u0027,"},{"line_number":57,"context_line":"            type\u003dint,"},{"line_number":58,"context_line":"            metavar\u003d\u0027\u003cinternal-protocol-port\u003e\u0027,"},{"line_number":59,"context_line":"            required\u003dTrue,"},{"line_number":60,"context_line":"            help\u003d_(\"The protocol port number \""},{"line_number":61,"context_line":"                   \"of the Neutron port fixed IPv4 address \""}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_25273a67","line":58,"range":{"start_line":58,"start_character":22,"end_line":58,"end_character":44},"in_reply_to":"7faddb67_74117804","updated":"2019-07-26 07:01:43.000000000","message":"What my comment suggests is:\n\n  --internal-protocol-port \u003cport-number\u003e\n  --external-protocol-port \u003cport-number\u003e\n\nWhat you would like to have is:\n\n  --internal-protocol-port \u003cinternal-protocol-port\u003e\n  --external-protocol-port \u003cexternal-protocol-port\u003e\n\nIs my idea confusing?\nThe current metavar looks redundant and just long.","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"a4e9b38f1f84893c2487649ffbfa285c04f0e65f","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        parser.add_argument("},{"line_number":56,"context_line":"            \u0027--internal-protocol-port\u0027,"},{"line_number":57,"context_line":"            type\u003dint,"},{"line_number":58,"context_line":"            metavar\u003d\u0027\u003cinternal-protocol-port\u003e\u0027,"},{"line_number":59,"context_line":"            required\u003dTrue,"},{"line_number":60,"context_line":"            help\u003d_(\"The protocol port number \""},{"line_number":61,"context_line":"                   \"of the Neutron port fixed IPv4 address \""}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_546f9cc4","line":58,"range":{"start_line":58,"start_character":22,"end_line":58,"end_character":44},"in_reply_to":"7faddb67_ce90db98","updated":"2019-07-25 08:26:52.000000000","message":"That would make really hard for the user to differentiate between the 2 port-number","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"05a8dae4619b0f88de3e975f31b61877ae0dcd55","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            metavar\u003d\u0027\u003cinternal-protocol-port\u003e\u0027,"},{"line_number":59,"context_line":"            required\u003dTrue,"},{"line_number":60,"context_line":"            help\u003d_(\"The protocol port number \""},{"line_number":61,"context_line":"                   \"of the Neutron port fixed IPv4 address \""},{"line_number":62,"context_line":"                   \"associated to the floating IP port forwarding\")"},{"line_number":63,"context_line":"        )"},{"line_number":64,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_2e1c0f12","line":61,"range":{"start_line":61,"start_character":20,"end_line":61,"end_character":58},"updated":"2019-07-25 05:56:20.000000000","message":"of the fixed IPv4 address","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"4cfbb2262bd8f55d8490a296814147b3b5ce498f","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            metavar\u003d\u0027\u003cinternal-protocol-port\u003e\u0027,"},{"line_number":59,"context_line":"            required\u003dTrue,"},{"line_number":60,"context_line":"            help\u003d_(\"The protocol port number \""},{"line_number":61,"context_line":"                   \"of the Neutron port fixed IPv4 address \""},{"line_number":62,"context_line":"                   \"associated to the floating IP port forwarding\")"},{"line_number":63,"context_line":"        )"},{"line_number":64,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_b827deb6","line":61,"range":{"start_line":61,"start_character":20,"end_line":61,"end_character":58},"in_reply_to":"7faddb67_2e1c0f12","updated":"2019-07-25 15:30:01.000000000","message":"Since we have many \"port\" words in this, I would like to remain this relative \u0027Neutron\u0027 to get a clear explanation of this input.","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"05a8dae4619b0f88de3e975f31b61877ae0dcd55","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        parser.add_argument("},{"line_number":65,"context_line":"            \u0027--external-protocol-port\u0027,"},{"line_number":66,"context_line":"            type\u003dint,"},{"line_number":67,"context_line":"            metavar\u003d\u0027\u003cexternal-protocol-port\u003e\u0027,"},{"line_number":68,"context_line":"            required\u003dTrue,"},{"line_number":69,"context_line":"            help\u003d_(\"The protocol port number of \""},{"line_number":70,"context_line":"                   \"the port forwarding\u0027s floating IP address\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_ee8b5765","line":67,"range":{"start_line":67,"start_character":22,"end_line":67,"end_character":44},"updated":"2019-07-25 05:56:20.000000000","message":"\"port-number\" might be enough.","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"a4e9b38f1f84893c2487649ffbfa285c04f0e65f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        parser.add_argument("},{"line_number":65,"context_line":"            \u0027--external-protocol-port\u0027,"},{"line_number":66,"context_line":"            type\u003dint,"},{"line_number":67,"context_line":"            metavar\u003d\u0027\u003cexternal-protocol-port\u003e\u0027,"},{"line_number":68,"context_line":"            required\u003dTrue,"},{"line_number":69,"context_line":"            help\u003d_(\"The protocol port number of \""},{"line_number":70,"context_line":"                   \"the port forwarding\u0027s floating IP address\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_9475149b","line":67,"range":{"start_line":67,"start_character":22,"end_line":67,"end_character":44},"in_reply_to":"7faddb67_ee8b5765","updated":"2019-07-25 08:26:52.000000000","message":"That would make really hard for the user to differentiate between the 2 port-number","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"05a8dae4619b0f88de3e975f31b61877ae0dcd55","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            metavar\u003d\u0027\u003cprotocol\u003e\u0027,"},{"line_number":75,"context_line":"            required\u003dTrue,"},{"line_number":76,"context_line":"            help\u003d_(\"The protocol used in the floating IP \""},{"line_number":77,"context_line":"                   \"port forwarding\")"},{"line_number":78,"context_line":"        )"},{"line_number":79,"context_line":"        parser.add_argument("},{"line_number":80,"context_line":"            \u0027floating_ip\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_4e594bfc","line":77,"updated":"2019-07-25 05:56:20.000000000","message":"it would be nice to have some example of allowed protocol.","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"4cfbb2262bd8f55d8490a296814147b3b5ce498f","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            metavar\u003d\u0027\u003cprotocol\u003e\u0027,"},{"line_number":75,"context_line":"            required\u003dTrue,"},{"line_number":76,"context_line":"            help\u003d_(\"The protocol used in the floating IP \""},{"line_number":77,"context_line":"                   \"port forwarding\")"},{"line_number":78,"context_line":"        )"},{"line_number":79,"context_line":"        parser.add_argument("},{"line_number":80,"context_line":"            \u0027floating_ip\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_383beed1","line":77,"in_reply_to":"7faddb67_4e594bfc","updated":"2019-07-25 15:30:01.000000000","message":"Done","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"05a8dae4619b0f88de3e975f31b61877ae0dcd55","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        if parsed_args.internal_protocol_port is not None:"},{"line_number":96,"context_line":"            if (parsed_args.internal_protocol_port \u003c\u003d 0 or"},{"line_number":97,"context_line":"               parsed_args.internal_protocol_port \u003e 65535):"},{"line_number":98,"context_line":"                msg \u003d _(\"The port number range is \u003c1-65535\u003e\")"},{"line_number":99,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":100,"context_line":"            attrs[\u0027internal_port\u0027] \u003d parsed_args.internal_protocol_port"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_aed55f1d","line":97,"updated":"2019-07-25 05:56:20.000000000","message":"The indent level looks wrong.","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"4cfbb2262bd8f55d8490a296814147b3b5ce498f","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        if parsed_args.internal_protocol_port is not None:"},{"line_number":96,"context_line":"            if (parsed_args.internal_protocol_port \u003c\u003d 0 or"},{"line_number":97,"context_line":"               parsed_args.internal_protocol_port \u003e 65535):"},{"line_number":98,"context_line":"                msg \u003d _(\"The port number range is \u003c1-65535\u003e\")"},{"line_number":99,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":100,"context_line":"            attrs[\u0027internal_port\u0027] \u003d parsed_args.internal_protocol_port"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_78564609","line":97,"in_reply_to":"7faddb67_aed55f1d","updated":"2019-07-25 15:30:01.000000000","message":"Done","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"05a8dae4619b0f88de3e975f31b61877ae0dcd55","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        if parsed_args.external_protocol_port is not None:"},{"line_number":103,"context_line":"            if (parsed_args.external_protocol_port \u003c\u003d 0 or"},{"line_number":104,"context_line":"               parsed_args.external_protocol_port \u003e 65535):"},{"line_number":105,"context_line":"                msg \u003d _(\"The port number range is \u003c1-65535\u003e\")"},{"line_number":106,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":107,"context_line":"            attrs[\u0027external_port\u0027] \u003d parsed_args.external_protocol_port"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_4edceb45","line":104,"updated":"2019-07-25 05:56:20.000000000","message":"The indent level looks wrong.","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"4cfbb2262bd8f55d8490a296814147b3b5ce498f","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        if parsed_args.external_protocol_port is not None:"},{"line_number":103,"context_line":"            if (parsed_args.external_protocol_port \u003c\u003d 0 or"},{"line_number":104,"context_line":"               parsed_args.external_protocol_port \u003e 65535):"},{"line_number":105,"context_line":"                msg \u003d _(\"The port number range is \u003c1-65535\u003e\")"},{"line_number":106,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":107,"context_line":"            attrs[\u0027external_port\u0027] \u003d parsed_args.external_protocol_port"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_3840ce35","line":104,"in_reply_to":"7faddb67_4edceb45","updated":"2019-07-25 15:30:01.000000000","message":"Done","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"05a8dae4619b0f88de3e975f31b61877ae0dcd55","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        parser.add_argument("},{"line_number":185,"context_line":"            \u0027--port\u0027,"},{"line_number":186,"context_line":"            metavar\u003d\u0027\u003cneutron-port-id\u003e\u0027,"},{"line_number":187,"context_line":"            help\u003d_(\"Filter the list result by the ID of \""},{"line_number":188,"context_line":"                   \"the internal Neutron port\")"},{"line_number":189,"context_line":"        )"},{"line_number":190,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_aeeb1f10","line":187,"range":{"start_line":187,"start_character":50,"end_line":187,"end_character":52},"updated":"2019-07-25 05:56:20.000000000","message":"port name is also accepted, so the message needs to be updated.","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"4cfbb2262bd8f55d8490a296814147b3b5ce498f","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        parser.add_argument("},{"line_number":185,"context_line":"            \u0027--port\u0027,"},{"line_number":186,"context_line":"            metavar\u003d\u0027\u003cneutron-port-id\u003e\u0027,"},{"line_number":187,"context_line":"            help\u003d_(\"Filter the list result by the ID of \""},{"line_number":188,"context_line":"                   \"the internal Neutron port\")"},{"line_number":189,"context_line":"        )"},{"line_number":190,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_f86236d8","line":187,"range":{"start_line":187,"start_character":50,"end_line":187,"end_character":52},"in_reply_to":"7faddb67_aeeb1f10","updated":"2019-07-25 15:30:01.000000000","message":"Done","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"05a8dae4619b0f88de3e975f31b61877ae0dcd55","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        )"},{"line_number":190,"context_line":"        parser.add_argument("},{"line_number":191,"context_line":"            \u0027--external-protocol-port\u0027,"},{"line_number":192,"context_line":"            metavar\u003d\u0027\u003cport_number\u003e\u0027,"},{"line_number":193,"context_line":"            dest\u003d\u0027external_protocol_port\u0027,"},{"line_number":194,"context_line":"            help\u003d_(\"Filter the list result by the \""},{"line_number":195,"context_line":"                   \"protocol port number of the floating IP\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_4ef2ab08","line":192,"range":{"start_line":192,"start_character":22,"end_line":192,"end_character":34},"updated":"2019-07-25 05:56:20.000000000","message":"Let\u0027s use hyphen as a delimiter: \u003cport-number\u003e","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"4cfbb2262bd8f55d8490a296814147b3b5ce498f","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        )"},{"line_number":190,"context_line":"        parser.add_argument("},{"line_number":191,"context_line":"            \u0027--external-protocol-port\u0027,"},{"line_number":192,"context_line":"            metavar\u003d\u0027\u003cport_number\u003e\u0027,"},{"line_number":193,"context_line":"            dest\u003d\u0027external_protocol_port\u0027,"},{"line_number":194,"context_line":"            help\u003d_(\"Filter the list result by the \""},{"line_number":195,"context_line":"                   \"protocol port number of the floating IP\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_b89a7ec2","line":192,"range":{"start_line":192,"start_character":22,"end_line":192,"end_character":34},"in_reply_to":"7faddb67_4ef2ab08","updated":"2019-07-25 15:30:01.000000000","message":"Change to this \u0027external-protocol-port\u0027 to make consistent with other commands.","commit_id":"6bb1b146104dc01cb69390a8c76bfd4d8bfbed87"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"8284b73d1ccf8178ef3b2baba65dcda2f24cc38c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            \u0027--port\u0027,"},{"line_number":50,"context_line":"            metavar\u003d\u0027\u003cport\u003e\u0027,"},{"line_number":51,"context_line":"            required\u003dTrue,"},{"line_number":52,"context_line":"            help\u003d_(\"The name or ID of the Neutron port associated \""},{"line_number":53,"context_line":"                   \"to the floating IP port forwarding\")"},{"line_number":54,"context_line":"        )"},{"line_number":55,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_63dd2740","line":52,"range":{"start_line":52,"start_character":42,"end_line":52,"end_character":49},"updated":"2019-08-27 22:03:59.000000000","message":"The word neutron should not be visible to the user.  Use \u0027network\u0027 to refer to the port that gets created/attached/etc.","commit_id":"9a8ad811c299423eb6dc3f2ffd297a1a88c95a8e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"58057e5deb56cdde6a763956cb983ea5dd907d03","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            \u0027--port\u0027,"},{"line_number":50,"context_line":"            metavar\u003d\u0027\u003cport\u003e\u0027,"},{"line_number":51,"context_line":"            required\u003dTrue,"},{"line_number":52,"context_line":"            help\u003d_(\"The name or ID of the Neutron port associated \""},{"line_number":53,"context_line":"                   \"to the floating IP port forwarding\")"},{"line_number":54,"context_line":"        )"},{"line_number":55,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_982769c8","line":52,"range":{"start_line":52,"start_character":42,"end_line":52,"end_character":49},"in_reply_to":"7faddb67_061fa109","updated":"2019-08-28 13:01:54.000000000","message":"I don\u0027t know how I didn\u0027t notice that in my review :(","commit_id":"9a8ad811c299423eb6dc3f2ffd297a1a88c95a8e"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"2df0cb2dced933df6d6e0e059907ae9da31bb503","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            \u0027--port\u0027,"},{"line_number":50,"context_line":"            metavar\u003d\u0027\u003cport\u003e\u0027,"},{"line_number":51,"context_line":"            required\u003dTrue,"},{"line_number":52,"context_line":"            help\u003d_(\"The name or ID of the Neutron port associated \""},{"line_number":53,"context_line":"                   \"to the floating IP port forwarding\")"},{"line_number":54,"context_line":"        )"},{"line_number":55,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_061fa109","line":52,"range":{"start_line":52,"start_character":42,"end_line":52,"end_character":49},"in_reply_to":"7faddb67_63dd2740","updated":"2019-08-28 01:39:20.000000000","message":"Done","commit_id":"9a8ad811c299423eb6dc3f2ffd297a1a88c95a8e"}],"releasenotes/notes/add-fip-portforwarding-commands-6e4d8ace698ee308.yaml":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d00b4a3b3fcd0b4f9b2a9996e4fc66a3d01717b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add floating IP Port Forwarding CURD commands."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"5fc1f717_c264b9bb","line":4,"range":{"start_line":4,"start_character":36,"end_line":4,"end_character":40},"updated":"2019-04-09 14:56:35.000000000","message":"s/CRUD\n\nAnd maybe this note should be more descriptive, like mentioning the OSC command line, like added \u0027floating ip port forwarding\u0027 commands ?  I haven\u0027t looked at what we did for other neutron release notes.","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"332f184d3296cc77d38ff8ae23479c4e417b8a2b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add floating IP Port Forwarding CURD commands."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"5fc1f717_d8bed363","line":4,"range":{"start_line":4,"start_character":36,"end_line":4,"end_character":40},"in_reply_to":"5fc1f717_c264b9bb","updated":"2019-04-10 13:30:23.000000000","message":"Done","commit_id":"836e1a7f892e9751a90bd4d68ffbbdd862c09ebb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"da3aad9de01c89b6ed27a532ae4b70001bf73ac7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add floating IP Port Forwarding commands"},{"line_number":5,"context_line":"    ``floating ip port forwarding create``,"},{"line_number":6,"context_line":"    ``floating ip port forwarding delete``,"},{"line_number":7,"context_line":"    ``floating ip port forwarding list``,"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"bfb3d3c7_d01cf46b","line":4,"range":{"start_line":4,"start_character":36,"end_line":4,"end_character":44},"updated":"2019-05-21 13:00:10.000000000","message":"nit: s/commands:","commit_id":"476fa29aa5fa60f0cd920b9bcf6d978655b163d3"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"098d5c86b9812c7d5c450968f7e6d20e27751997","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add floating IP Port Forwarding commands"},{"line_number":5,"context_line":"    ``floating ip port forwarding create``,"},{"line_number":6,"context_line":"    ``floating ip port forwarding delete``,"},{"line_number":7,"context_line":"    ``floating ip port forwarding list``,"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9fb8cfa7_c4c46f43","line":4,"range":{"start_line":4,"start_character":36,"end_line":4,"end_character":44},"in_reply_to":"bfb3d3c7_d01cf46b","updated":"2019-06-02 13:26:22.000000000","message":"Done","commit_id":"476fa29aa5fa60f0cd920b9bcf6d978655b163d3"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"da3aad9de01c89b6ed27a532ae4b70001bf73ac7","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    ``floating ip port forwarding delete``,"},{"line_number":7,"context_line":"    ``floating ip port forwarding list``,"},{"line_number":8,"context_line":"    ``floating ip port forwarding set``,"},{"line_number":9,"context_line":"    ``floating ip port forwarding show``."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"bfb3d3c7_303790e6","line":9,"updated":"2019-05-21 13:00:10.000000000","message":"nit: and ...","commit_id":"476fa29aa5fa60f0cd920b9bcf6d978655b163d3"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"098d5c86b9812c7d5c450968f7e6d20e27751997","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    ``floating ip port forwarding delete``,"},{"line_number":7,"context_line":"    ``floating ip port forwarding list``,"},{"line_number":8,"context_line":"    ``floating ip port forwarding set``,"},{"line_number":9,"context_line":"    ``floating ip port forwarding show``."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9fb8cfa7_e4c17330","line":9,"in_reply_to":"bfb3d3c7_303790e6","updated":"2019-06-02 13:26:22.000000000","message":"Done","commit_id":"476fa29aa5fa60f0cd920b9bcf6d978655b163d3"}]}
