)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9bab6eb0fb83ab79f2f16390fbec5c4228863b6d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Zachary Ma \u003cmazengxie@126.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-03-16 13:47:51 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Huawei vrpv8 switch support port group"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In the Ocata release, Ironic added support for grouping ports"},{"line_number":10,"context_line":"into port groups. The administrator also has the ability to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"df7087c5_1e489f2a","line":7,"updated":"2018-03-16 09:58:45.000000000","message":"Please separate this into two patches - generic port group support, followed by Huawei vrpv8 port group support.","commit_id":"5b74fa251f925ac8c7a1a30631392226261314c9"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9bab6eb0fb83ab79f2f16390fbec5c4228863b6d","unresolved":false,"context_lines":[{"line_number":12,"context_line":"port group fields. However the administrator is still required to"},{"line_number":13,"context_line":"pre-create a port group on the ToR (Top of Rack) switch manually."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"So, we should do something to config switch automatically for port group."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I30d3cddf69f225189864d59b39273923f0468141"},{"line_number":18,"context_line":"Closes-Bug: #1752479"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"df7087c5_3eb003dd","line":15,"updated":"2018-03-16 09:58:45.000000000","message":"Please add a link to the ironic dynamic port groups spec here.","commit_id":"5b74fa251f925ac8c7a1a30631392226261314c9"}],"networking_generic_switch/devices/__init__.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9bab6eb0fb83ab79f2f16390fbec5c4228863b6d","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        return physnets.split(\u0027,\u0027)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def _get_port_group_id(self, group_info):"},{"line_number":95,"context_line":"        pass"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def get_bond_mode(self, group_info):"},{"line_number":98,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_bed8931d","line":95,"updated":"2018-03-16 09:58:45.000000000","message":"Why not use local_group_information.name for this?","commit_id":"5b74fa251f925ac8c7a1a30631392226261314c9"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9bab6eb0fb83ab79f2f16390fbec5c4228863b6d","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        pass"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def get_bond_mode(self, group_info):"},{"line_number":98,"context_line":"        pass"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @abc.abstractmethod"},{"line_number":101,"context_line":"    def add_network(self, segmentation_id, network_id):"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_5e361753","line":98,"updated":"2018-03-16 09:58:45.000000000","message":"What about bond_properties?","commit_id":"5b74fa251f925ac8c7a1a30631392226261314c9"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9bab6eb0fb83ab79f2f16390fbec5c4228863b6d","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def get_bond_mode(self, group_info):"},{"line_number":98,"context_line":"        pass"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @abc.abstractmethod"},{"line_number":101,"context_line":"    def add_network(self, segmentation_id, network_id):"},{"line_number":102,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_3e81e3c3","line":99,"updated":"2018-03-16 09:58:45.000000000","message":"Should also add abstract methods here for add/delete port group, add/remove port to/from group.","commit_id":"5b74fa251f925ac8c7a1a30631392226261314c9"}],"networking_generic_switch/devices/netmiko_devices/__init__.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9bab6eb0fb83ab79f2f16390fbec5c4228863b6d","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                                  mode_type\u003dbond_mode,"},{"line_number":206,"context_line":"                                  segmentation_id\u003dsegmentation_id))"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def bond_port(self, port, port_group_id):"},{"line_number":209,"context_line":"        self.send_commands_to_device("},{"line_number":210,"context_line":"            self._format_commands(self.BOND_PORT,"},{"line_number":211,"context_line":"                                  port\u003dport,"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_fefa8bba","line":208,"updated":"2018-03-16 09:58:45.000000000","message":"nit: I personally prefer add_port_to_group","commit_id":"5b74fa251f925ac8c7a1a30631392226261314c9"},{"author":{"_account_id":25943,"name":"Zachary Ma","email":"mazengxie@126.com","username":"Zachary"},"change_message_id":"fd966970294769184b7a66c1b3e7b081b17eda7d","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                                  mode_type\u003dbond_mode,"},{"line_number":206,"context_line":"                                  segmentation_id\u003dsegmentation_id))"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def bond_port(self, port, port_group_id):"},{"line_number":209,"context_line":"        self.send_commands_to_device("},{"line_number":210,"context_line":"            self._format_commands(self.BOND_PORT,"},{"line_number":211,"context_line":"                                  port\u003dport,"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_7f3f2c87","line":208,"in_reply_to":"df7087c5_fefa8bba","updated":"2018-04-11 06:24:29.000000000","message":"Done","commit_id":"5b74fa251f925ac8c7a1a30631392226261314c9"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9bab6eb0fb83ab79f2f16390fbec5c4228863b6d","unresolved":false,"context_lines":[{"line_number":216,"context_line":"            self._format_commands(self.DELETE_PORT_GROUP,"},{"line_number":217,"context_line":"                                  port_group_id\u003dport_group_id))"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def delete_bond_port(self, port):"},{"line_number":220,"context_line":"        self.send_commands_to_device("},{"line_number":221,"context_line":"            self._format_commands(self.DELETE_BOND_PORT,"},{"line_number":222,"context_line":"                                  port\u003dport))"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_be0093ac","line":219,"updated":"2018-03-16 09:58:45.000000000","message":"nit: I personally prefer remove_port_from_group","commit_id":"5b74fa251f925ac8c7a1a30631392226261314c9"},{"author":{"_account_id":25943,"name":"Zachary Ma","email":"mazengxie@126.com","username":"Zachary"},"change_message_id":"fd966970294769184b7a66c1b3e7b081b17eda7d","unresolved":false,"context_lines":[{"line_number":216,"context_line":"            self._format_commands(self.DELETE_PORT_GROUP,"},{"line_number":217,"context_line":"                                  port_group_id\u003dport_group_id))"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def delete_bond_port(self, port):"},{"line_number":220,"context_line":"        self.send_commands_to_device("},{"line_number":221,"context_line":"            self._format_commands(self.DELETE_BOND_PORT,"},{"line_number":222,"context_line":"                                  port\u003dport))"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_3f49b431","line":219,"in_reply_to":"df7087c5_be0093ac","updated":"2018-04-11 06:24:29.000000000","message":"Done","commit_id":"5b74fa251f925ac8c7a1a30631392226261314c9"}],"networking_generic_switch/devices/netmiko_devices/huawei_vrpv8.py":[{"author":{"_account_id":19853,"name":"Nguyen Hung Phuong","email":"phuongnh@vn.fujitsu.com","username":"phuongnh"},"change_message_id":"7cc8baa69633624490284e513605ac0b9b28dfd1","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        bond_mode \u003d group_info.mode"},{"line_number":77,"context_line":"        if bond_mode in [\"lacp-dynamic\", \"lacp-static\"]:"},{"line_number":78,"context_line":"            return bond_mode"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"df7087c5_bdad679c","line":79,"updated":"2018-03-13 03:15:01.000000000","message":"please remove 1 line","commit_id":"056fd49e458feb20774f86eff19df26750b8e704"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9bab6eb0fb83ab79f2f16390fbec5c4228863b6d","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    def get_bond_mode(self, group_info):"},{"line_number":77,"context_line":"        bond_mode \u003d group_info.mode"},{"line_number":78,"context_line":"        if bond_mode in [\"lacp-dynamic\", \"lacp-static\"]:"},{"line_number":79,"context_line":"            return bond_mode"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_bef17397","line":79,"updated":"2018-03-16 09:58:45.000000000","message":"The ironic spec recommends using values from [1] for bond_mode and bond_properties. Perhaps this method should be a translator?\n\n[1] https://www.kernel.org/doc/Documentation/networking/bonding.txt","commit_id":"5b74fa251f925ac8c7a1a30631392226261314c9"},{"author":{"_account_id":25943,"name":"Zachary Ma","email":"mazengxie@126.com","username":"Zachary"},"change_message_id":"fd966970294769184b7a66c1b3e7b081b17eda7d","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    def get_bond_mode(self, group_info):"},{"line_number":77,"context_line":"        bond_mode \u003d group_info.mode"},{"line_number":78,"context_line":"        if bond_mode in [\"lacp-dynamic\", \"lacp-static\"]:"},{"line_number":79,"context_line":"            return bond_mode"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_9f5d60eb","line":79,"in_reply_to":"df7087c5_bef17397","updated":"2018-04-11 06:24:29.000000000","message":"Done","commit_id":"5b74fa251f925ac8c7a1a30631392226261314c9"}],"networking_generic_switch/generic_switch_mech.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9bab6eb0fb83ab79f2f16390fbec5c4228863b6d","unresolved":false,"context_lines":[{"line_number":423,"context_line":"        context.set_binding(segments[0][api.ID],"},{"line_number":424,"context_line":"                            portbindings.VIF_TYPE_OTHER, {})"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    def _bond_port(self, context, port, local_link_information,"},{"line_number":427,"context_line":"                   local_group_information):"},{"line_number":428,"context_line":"        segments \u003d context.segments_to_bind"},{"line_number":429,"context_line":"        segmentation_id \u003d segments[0].get(\u0027segmentation_id\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_de1467eb","line":426,"updated":"2018-03-16 09:58:45.000000000","message":"This method needs unit tests.","commit_id":"5b74fa251f925ac8c7a1a30631392226261314c9"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9bab6eb0fb83ab79f2f16390fbec5c4228863b6d","unresolved":false,"context_lines":[{"line_number":443,"context_line":"        if not (port_group_id and bond_mode):"},{"line_number":444,"context_line":"            return"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        switch.add_port_group(port_group_id, bond_mode, segmentation_id)"},{"line_number":447,"context_line":"        for link in local_link_information:"},{"line_number":448,"context_line":"            switch_info \u003d link.get(\u0027switch_info\u0027)"},{"line_number":449,"context_line":"            switch_id \u003d link.get(\u0027switch_id\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_fedccbe4","line":446,"updated":"2018-03-16 09:58:45.000000000","message":"Is it feasible to support multi-chassis port groups here? If so, we\u0027d need to add the group on each switch. If not, we should validate that the switch is the same for all links in the group.","commit_id":"5b74fa251f925ac8c7a1a30631392226261314c9"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9bab6eb0fb83ab79f2f16390fbec5c4228863b6d","unresolved":false,"context_lines":[{"line_number":455,"context_line":"            port_id \u003d link.get(\u0027port_id\u0027)"},{"line_number":456,"context_line":"            provisioning_blocks.add_provisioning_component("},{"line_number":457,"context_line":"                context._plugin_context, port[\u0027id\u0027], resources.PORT,"},{"line_number":458,"context_line":"                GENERIC_SWITCH_ENTITY)"},{"line_number":459,"context_line":"            # Bond port to port group"},{"line_number":460,"context_line":"            switch.bond_port(port_id, port_group_id)"},{"line_number":461,"context_line":"            LOG.info(\"Successfully bound port %(port_id)s in segment \""}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_dee9c7e2","line":458,"updated":"2018-03-16 09:58:45.000000000","message":"This should only happen once, after all ports have been added to the group.","commit_id":"5b74fa251f925ac8c7a1a30631392226261314c9"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9bab6eb0fb83ab79f2f16390fbec5c4228863b6d","unresolved":false,"context_lines":[{"line_number":461,"context_line":"            LOG.info(\"Successfully bound port %(port_id)s in segment \""},{"line_number":462,"context_line":"                     \" %(segment_id)s on device %(device)s when bond port\","},{"line_number":463,"context_line":"                     {\u0027port_id\u0027: port[\u0027id\u0027], \u0027device\u0027: switch_info,"},{"line_number":464,"context_line":"                      \u0027segment_id\u0027: segmentation_id})"},{"line_number":465,"context_line":"        context.set_binding(segments[0][api.ID],"},{"line_number":466,"context_line":"                            portbindings.VIF_TYPE_OTHER, {})"},{"line_number":467,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_7e8c3b35","line":464,"updated":"2018-03-16 09:58:45.000000000","message":"This should only be logged once, and should use port[\u0027id\u0027] rather than port_id.","commit_id":"5b74fa251f925ac8c7a1a30631392226261314c9"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9bab6eb0fb83ab79f2f16390fbec5c4228863b6d","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                     {\u0027port_id\u0027: port[\u0027id\u0027], \u0027device\u0027: switch_info,"},{"line_number":464,"context_line":"                      \u0027segment_id\u0027: segmentation_id})"},{"line_number":465,"context_line":"        context.set_binding(segments[0][api.ID],"},{"line_number":466,"context_line":"                            portbindings.VIF_TYPE_OTHER, {})"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    def bind_port(self, context):"},{"line_number":469,"context_line":"        \"\"\"Attempt to bind a port."}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_7e975bed","line":466,"updated":"2018-03-16 09:58:45.000000000","message":"What happens if something fails halfway through? We probably need to support some sort of rewind.","commit_id":"5b74fa251f925ac8c7a1a30631392226261314c9"}]}
