)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"c6fd55e7013654155e493e0719715ac52c719d76","unresolved":false,"context_lines":[{"line_number":10,"context_line":"default configiration. Take Huawei switch as example,"},{"line_number":11,"context_line":"it will recover switch\u0027s interface to vlan 1 when delete port, but vlan 1"},{"line_number":12,"context_line":"maybe be expected to user.So, we should support to recover default vlan"},{"line_number":13,"context_line":"not just vlan 1."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I4106eed8c40de988acb14be67f93303c7cdcbbd8"},{"line_number":16,"context_line":"Closes-Bug: #1752480"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1f9dbf25_0e058077","line":13,"updated":"2018-03-02 10:36:15.000000000","message":"Most switches I\u0027ve worked with support setting the default VLAN. Do the Huawei switches not support this?","commit_id":"8199ab12b288bde4eb57e701ef71b43b06121d6c"},{"author":{"_account_id":25943,"name":"Zachary Ma","email":"mazengxie@126.com","username":"Zachary"},"change_message_id":"01e8200c0565cbb0aee69ac67e1a6aeba16986fd","unresolved":false,"context_lines":[{"line_number":10,"context_line":"default configiration. Take Huawei switch as example,"},{"line_number":11,"context_line":"it will recover switch\u0027s interface to vlan 1 when delete port, but vlan 1"},{"line_number":12,"context_line":"maybe be expected to user.So, we should support to recover default vlan"},{"line_number":13,"context_line":"not just vlan 1."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I4106eed8c40de988acb14be67f93303c7cdcbbd8"},{"line_number":16,"context_line":"Closes-Bug: #1752480"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ff6b8bd7_6ea0f7a6","line":13,"in_reply_to":"1f9dbf25_0e058077","updated":"2018-03-05 09:59:13.000000000","message":"huawei switch does\u0027n not solve the action of deleting port\n\nIt is a bug, like\nhttps://bugs.launchpad.net/networking-generic-switch/+bug/1753421","commit_id":"8199ab12b288bde4eb57e701ef71b43b06121d6c"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"737420d616026da0da0f28418ae7c461db7c7a18","unresolved":false,"context_lines":[{"line_number":10,"context_line":"default configiration. Take Huawei switch as example,"},{"line_number":11,"context_line":"it will recover switch\u0027s interface to vlan 1 when delete port, but vlan 1"},{"line_number":12,"context_line":"maybe be expected to user.So, we should support to recover default vlan"},{"line_number":13,"context_line":"not just vlan 1."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I4106eed8c40de988acb14be67f93303c7cdcbbd8"},{"line_number":16,"context_line":"Closes-Bug: #1752480"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ff6b8bd7_febee0fd","line":13,"in_reply_to":"ff6b8bd7_6ea0f7a6","updated":"2018-03-06 13:52:10.000000000","message":"That\u0027s a bug in NGS, correct. On many switches it is possible to change the global default VLAN from 1 to another VLAN. Do you know if that is possible with Huawei switches?","commit_id":"8199ab12b288bde4eb57e701ef71b43b06121d6c"}],"README.rst":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"c6fd55e7013654155e493e0719715ac52c719d76","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    password \u003d \u003ccredential password\u003e"},{"line_number":61,"context_line":"    key_file \u003d \u003cssh key file\u003e"},{"line_number":62,"context_line":"    secret \u003d \u003cenable secret\u003e"},{"line_number":63,"context_line":"    port_access_default_vlan \u003d \u003cport default vlan\u003e"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"Here is an example of"},{"line_number":66,"context_line":"``/etc/neutron/plugins/ml2/ml2_conf_genericswitch.ini``"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1f9dbf25_cef6b890","line":63,"updated":"2018-03-02 10:36:15.000000000","message":"All config options without an ngs_ prefix will be passed to the netmiko switch connection constructor. If the argument is not supported (as I expect port_access_default_vlan is not), the object construction will fail.","commit_id":"8199ab12b288bde4eb57e701ef71b43b06121d6c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c97f3db9e81f1bed4a3f080791e7fd83268a8252","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    password \u003d \u003ccredential password\u003e"},{"line_number":62,"context_line":"    key_file \u003d \u003cssh key file\u003e"},{"line_number":63,"context_line":"    secret \u003d \u003cenable secret\u003e"},{"line_number":64,"context_line":"    ngs_port_default_vlan \u003d \u003cport default vlan\u003e"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"..note::"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"df7087c5_371acb6e","line":64,"updated":"2018-03-13 10:03:37.000000000","message":"could you please add a description of this new field below?","commit_id":"82e43d9ec8c2ea7801c39d7eb6fb697cfa35bf24"},{"author":{"_account_id":25943,"name":"Zachary Ma","email":"mazengxie@126.com","username":"Zachary"},"change_message_id":"68d8674220b089e81b615b372948df2852eb7959","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    password \u003d \u003ccredential password\u003e"},{"line_number":62,"context_line":"    key_file \u003d \u003cssh key file\u003e"},{"line_number":63,"context_line":"    secret \u003d \u003cenable secret\u003e"},{"line_number":64,"context_line":"    ngs_port_default_vlan \u003d \u003cport default vlan\u003e"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"..note::"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"df7087c5_fdd3d1d3","line":64,"in_reply_to":"df7087c5_371acb6e","updated":"2018-03-13 12:02:03.000000000","message":"Done","commit_id":"82e43d9ec8c2ea7801c39d7eb6fb697cfa35bf24"}],"networking_generic_switch/devices/__init__.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"eb589ef910d9f1f1d2d79b8e878a4040a1413b01","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    {\u0027name\u0027: \u0027ngs_mac_address\u0027},"},{"line_number":29,"context_line":"    # Comma-separated list of names of interfaces to be added to each network."},{"line_number":30,"context_line":"    {\u0027name\u0027: \u0027ngs_trunk_ports\u0027},"},{"line_number":31,"context_line":"    {\u0027name\u0027: \u0027ngs_port_default_vlan\u0027},"},{"line_number":32,"context_line":"    # Comma-separated list of physical networks to which this switch is mapped."},{"line_number":33,"context_line":"    {\u0027name\u0027: \u0027ngs_physical_networks\u0027},"},{"line_number":34,"context_line":"    {\u0027name\u0027: \u0027ngs_ssh_connect_timeout\u0027, \u0027default\u0027: 60},"}],"source_content_type":"text/x-python","patch_set":8,"id":"df7087c5_b8b7303b","line":31,"updated":"2018-03-07 09:39:54.000000000","message":"Tests in networking_generic_switch/tests/unit/test_devices.py need updating for this option.","commit_id":"6eb49d9734f94539a64cea46051c192c66d476e7"}],"networking_generic_switch/devices/netmiko_devices/__init__.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"c6fd55e7013654155e493e0719715ac52c719d76","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    DELETE_PORT \u003d None"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    DEFAULT_PORT \u003d None"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    ADD_NETWORK_TO_TRUNK \u003d None"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f9dbf25_8ed750ee","line":45,"updated":"2018-03-02 10:36:15.000000000","message":"Is there any time when this will be different than PLUG_PORT_TO_NETWORK?","commit_id":"8199ab12b288bde4eb57e701ef71b43b06121d6c"},{"author":{"_account_id":25943,"name":"Zachary Ma","email":"mazengxie@126.com","username":"Zachary"},"change_message_id":"01e8200c0565cbb0aee69ac67e1a6aeba16986fd","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    DELETE_PORT \u003d None"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    DEFAULT_PORT \u003d None"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    ADD_NETWORK_TO_TRUNK \u003d None"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ff6b8bd7_4e04137c","line":45,"in_reply_to":"1f9dbf25_8ed750ee","updated":"2018-03-05 09:59:13.000000000","message":"I don\u0027t know what time as you said.","commit_id":"8199ab12b288bde4eb57e701ef71b43b06121d6c"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"737420d616026da0da0f28418ae7c461db7c7a18","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    DELETE_PORT \u003d None"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    DEFAULT_PORT \u003d None"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    ADD_NETWORK_TO_TRUNK \u003d None"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ff6b8bd7_fe5340e1","line":45,"in_reply_to":"ff6b8bd7_4e04137c","updated":"2018-03-06 13:52:10.000000000","message":"So should we just use PLUG_PORT_TO_NETWORK and not add DEFAULT_PORT?","commit_id":"8199ab12b288bde4eb57e701ef71b43b06121d6c"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"c6fd55e7013654155e493e0719715ac52c719d76","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            \u0027timeout\u0027: CONF.ngs_coordination.acquire_timeout}"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        self.port_access_default_vlan \u003d \\"},{"line_number":78,"context_line":"            self.config.get(\u0027port_access_default_vlan\u0027,  None)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _format_commands(self, commands, **kwargs):"},{"line_number":81,"context_line":"        if not commands:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f9dbf25_ee34d44c","line":78,"updated":"2018-03-02 10:36:15.000000000","message":"nit: Use parentheses rather than backslash.","commit_id":"8199ab12b288bde4eb57e701ef71b43b06121d6c"},{"author":{"_account_id":25943,"name":"Zachary Ma","email":"mazengxie@126.com","username":"Zachary"},"change_message_id":"01e8200c0565cbb0aee69ac67e1a6aeba16986fd","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            \u0027timeout\u0027: CONF.ngs_coordination.acquire_timeout}"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        self.port_access_default_vlan \u003d \\"},{"line_number":78,"context_line":"            self.config.get(\u0027port_access_default_vlan\u0027,  None)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _format_commands(self, commands, **kwargs):"},{"line_number":81,"context_line":"        if not commands:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff6b8bd7_ee93a75b","line":78,"in_reply_to":"1f9dbf25_ee34d44c","updated":"2018-03-05 09:59:13.000000000","message":"done","commit_id":"8199ab12b288bde4eb57e701ef71b43b06121d6c"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"c6fd55e7013654155e493e0719715ac52c719d76","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        self.port_access_default_vlan \u003d \\"},{"line_number":78,"context_line":"            self.config.get(\u0027port_access_default_vlan\u0027,  None)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _format_commands(self, commands, **kwargs):"},{"line_number":81,"context_line":"        if not commands:"},{"line_number":82,"context_line":"            return []"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f9dbf25_0ed6e0c6","line":79,"updated":"2018-03-02 10:36:15.000000000","message":"Would be better to add this to the list of options in devices/__init__.py, then pull it out of self.ngs_config.","commit_id":"8199ab12b288bde4eb57e701ef71b43b06121d6c"},{"author":{"_account_id":25943,"name":"Zachary Ma","email":"mazengxie@126.com","username":"Zachary"},"change_message_id":"01e8200c0565cbb0aee69ac67e1a6aeba16986fd","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        self.port_access_default_vlan \u003d \\"},{"line_number":78,"context_line":"            self.config.get(\u0027port_access_default_vlan\u0027,  None)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _format_commands(self, commands, **kwargs):"},{"line_number":81,"context_line":"        if not commands:"},{"line_number":82,"context_line":"            return []"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff6b8bd7_0e913b53","line":79,"in_reply_to":"1f9dbf25_0ed6e0c6","updated":"2018-03-05 09:59:13.000000000","message":"done","commit_id":"8199ab12b288bde4eb57e701ef71b43b06121d6c"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"c6fd55e7013654155e493e0719715ac52c719d76","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        if self.port_access_default_vlan:"},{"line_number":201,"context_line":"            cmds +\u003d self._format_commands(self.DEFAULT_PORT,"},{"line_number":202,"context_line":"                                          port\u003dport,"},{"line_number":203,"context_line":"                                          segmentation_id\u003dsegmentation_id)"},{"line_number":204,"context_line":"        self.send_commands_to_device(cmds)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def send_config_set(self, net_connect, cmd_set):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f9dbf25_ce247810","line":203,"updated":"2018-03-02 10:36:15.000000000","message":"Some switches (including Dell Force10) must first unset the existing VLAN association before setting a new one. We\u0027d need to do an unplug from the default VLAN in plug_port_to_network.","commit_id":"8199ab12b288bde4eb57e701ef71b43b06121d6c"},{"author":{"_account_id":25943,"name":"Zachary Ma","email":"mazengxie@126.com","username":"Zachary"},"change_message_id":"01e8200c0565cbb0aee69ac67e1a6aeba16986fd","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        if self.port_access_default_vlan:"},{"line_number":201,"context_line":"            cmds +\u003d self._format_commands(self.DEFAULT_PORT,"},{"line_number":202,"context_line":"                                          port\u003dport,"},{"line_number":203,"context_line":"                                          segmentation_id\u003dsegmentation_id)"},{"line_number":204,"context_line":"        self.send_commands_to_device(cmds)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def send_config_set(self, net_connect, cmd_set):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff6b8bd7_aec4cf41","line":203,"in_reply_to":"1f9dbf25_ce247810","updated":"2018-03-05 09:59:13.000000000","message":"It is unnecessary for Huawei and H3C switch as I know.\nEach switch can modify the driver code if they need to use default\ninterface to specify vlan .","commit_id":"8199ab12b288bde4eb57e701ef71b43b06121d6c"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"737420d616026da0da0f28418ae7c461db7c7a18","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        if self.port_access_default_vlan:"},{"line_number":201,"context_line":"            cmds +\u003d self._format_commands(self.DEFAULT_PORT,"},{"line_number":202,"context_line":"                                          port\u003dport,"},{"line_number":203,"context_line":"                                          segmentation_id\u003dsegmentation_id)"},{"line_number":204,"context_line":"        self.send_commands_to_device(cmds)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def send_config_set(self, net_connect, cmd_set):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff6b8bd7_9e45641a","line":203,"in_reply_to":"ff6b8bd7_aec4cf41","updated":"2018-03-06 13:52:10.000000000","message":"Ok, but we need to make NGS features work for all supported devices.","commit_id":"8199ab12b288bde4eb57e701ef71b43b06121d6c"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"6794b4b9a94396e014dc8a6642d5cc3a361c41a3","unresolved":false,"context_lines":[{"line_number":195,"context_line":"            cmds +\u003d self._format_commands(self.DEFAULT_PORT,"},{"line_number":196,"context_line":"                                          port\u003dport,"},{"line_number":197,"context_line":"                                          segmentation_id\u003dsegmentation_id)"},{"line_number":198,"context_line":"        self.send_commands_to_device(cmds)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def send_config_set(self, net_connect, cmd_set):"},{"line_number":201,"context_line":"        \"\"\"Send a set of configuration lines to the device."}],"source_content_type":"text/x-python","patch_set":5,"id":"ff6b8bd7_9e2c8448","line":198,"updated":"2018-03-06 13:56:48.000000000","message":"Need a general test for this that is not specific to huawei.","commit_id":"8eb540768c2b9dcd1e7cbac22ed431743416bf6f"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"eb589ef910d9f1f1d2d79b8e878a4040a1413b01","unresolved":false,"context_lines":[{"line_number":195,"context_line":"            cmds +\u003d self._format_commands(self.DEFAULT_PORT,"},{"line_number":196,"context_line":"                                          port\u003dport,"},{"line_number":197,"context_line":"                                          segmentation_id\u003dsegmentation_id)"},{"line_number":198,"context_line":"        self.send_commands_to_device(cmds)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def send_config_set(self, net_connect, cmd_set):"},{"line_number":201,"context_line":"        \"\"\"Send a set of configuration lines to the device."}],"source_content_type":"text/x-python","patch_set":8,"id":"df7087c5_780438c7","line":198,"updated":"2018-03-07 09:39:54.000000000","message":"This still needs the reverse operation in plug_port_to_network, even if it is not required for your switch.\n\nif ngs_port_default_vlan:\n  DELETE_PORT\nPLUG_PORT_TO_NETWORK","commit_id":"6eb49d9734f94539a64cea46051c192c66d476e7"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a32d05b29ff409b8e9b09c7328d581ab4b6cb328","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        self.send_commands_to_device("},{"line_number":183,"context_line":"            self._format_commands(self.PLUG_PORT_TO_NETWORK,"},{"line_number":184,"context_line":"                                  port\u003dport,"},{"line_number":185,"context_line":"                                  segmentation_id\u003dsegmentation_id))"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def delete_port(self, port, segmentation_id):"},{"line_number":188,"context_line":"        cmds \u003d self._format_commands(self.DELETE_PORT,"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_87e092fc","line":185,"updated":"2018-03-09 09:25:26.000000000","message":"We still need to do the reverse of the operation here.","commit_id":"616a21c7ef0f6b99e90735322f962d4c71939ec5"},{"author":{"_account_id":25943,"name":"Zachary Ma","email":"mazengxie@126.com","username":"Zachary"},"change_message_id":"38f4aab89b3dea2963d684ed757ce0926aadb7b4","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        self.send_commands_to_device("},{"line_number":183,"context_line":"            self._format_commands(self.PLUG_PORT_TO_NETWORK,"},{"line_number":184,"context_line":"                                  port\u003dport,"},{"line_number":185,"context_line":"                                  segmentation_id\u003dsegmentation_id))"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def delete_port(self, port, segmentation_id):"},{"line_number":188,"context_line":"        cmds \u003d self._format_commands(self.DELETE_PORT,"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_90e0cafc","line":185,"in_reply_to":"df7087c5_277746d7","updated":"2018-03-09 11:27:10.000000000","message":"done","commit_id":"616a21c7ef0f6b99e90735322f962d4c71939ec5"},{"author":{"_account_id":25943,"name":"Zachary Ma","email":"mazengxie@126.com","username":"Zachary"},"change_message_id":"36b096f35ad3d084eda678f92bac4090ba798ba6","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        self.send_commands_to_device("},{"line_number":183,"context_line":"            self._format_commands(self.PLUG_PORT_TO_NETWORK,"},{"line_number":184,"context_line":"                                  port\u003dport,"},{"line_number":185,"context_line":"                                  segmentation_id\u003dsegmentation_id))"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def delete_port(self, port, segmentation_id):"},{"line_number":188,"context_line":"        cmds \u003d self._format_commands(self.DELETE_PORT,"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_a79596e6","line":185,"in_reply_to":"df7087c5_87e092fc","updated":"2018-03-09 09:35:46.000000000","message":"undo the default vlan ? \nBecause the interface mode is access,\nso the new vlan will cover default vlan.","commit_id":"616a21c7ef0f6b99e90735322f962d4c71939ec5"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"ab41736c92c1682c6bb773eff2cdfc39e7f63472","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        self.send_commands_to_device("},{"line_number":183,"context_line":"            self._format_commands(self.PLUG_PORT_TO_NETWORK,"},{"line_number":184,"context_line":"                                  port\u003dport,"},{"line_number":185,"context_line":"                                  segmentation_id\u003dsegmentation_id))"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def delete_port(self, port, segmentation_id):"},{"line_number":188,"context_line":"        cmds \u003d self._format_commands(self.DELETE_PORT,"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_277746d7","line":185,"in_reply_to":"df7087c5_a79596e6","updated":"2018-03-09 09:39:15.000000000","message":"That works for huawei switches, but some switches need to first remove a VLAN association before adding another one. The Dell force10 switches would not work with the code as it is. So we need to do this:\n\nif ngs_port_default_vlan:\n    DELETE_PORT(default_vlan)\nPLUG_PORT_TO_NETWORK(segmentation_id)","commit_id":"616a21c7ef0f6b99e90735322f962d4c71939ec5"}],"networking_generic_switch/tests/unit/netmiko/test_huawei_vrpv8.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"6794b4b9a94396e014dc8a6642d5cc3a361c41a3","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    @mock.patch(\u0027networking_generic_switch.devices.netmiko_devices.\u0027"},{"line_number":50,"context_line":"                \u0027NetmikoSwitch.send_commands_to_device\u0027)"},{"line_number":51,"context_line":"    def test_default_port(self, mock_exec):"},{"line_number":52,"context_line":"        self.switch.plug_port_to_network(3333, 33)"},{"line_number":53,"context_line":"        mock_exec.assert_called_with("},{"line_number":54,"context_line":"            [\u0027interface 3333\u0027, \u0027port default vlan 33\u0027, \u0027commit\u0027])"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ff6b8bd7_fe0100b1","line":52,"updated":"2018-03-06 13:56:48.000000000","message":"This is testing plug_port_to_network, not delete_port","commit_id":"8eb540768c2b9dcd1e7cbac22ed431743416bf6f"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"eb589ef910d9f1f1d2d79b8e878a4040a1413b01","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def test_default_port(self, mock_exec):"},{"line_number":52,"context_line":"        self.switch.delete_port(3333, 33)"},{"line_number":53,"context_line":"        ngs_port_default_vlan \u003d self.switch.get_port_default_vlan()"},{"line_number":54,"context_line":"        if ngs_port_default_vlan:"},{"line_number":55,"context_line":"            mock_exec.assert_called_with("},{"line_number":56,"context_line":"                [\u0027interface 3333\u0027,"},{"line_number":57,"context_line":"                 \u0027port link-type access\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"df7087c5_f8112855","line":54,"updated":"2018-03-07 09:39:54.000000000","message":"This path will never run - the default is no default VLAN.","commit_id":"6eb49d9734f94539a64cea46051c192c66d476e7"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7cc6bcc426a2e41afb24fc1f842f0f88d52bfd2f","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.switch.plug_port_to_network(3333, 33)"},{"line_number":47,"context_line":"        mock_exec.assert_called_with("},{"line_number":48,"context_line":"            [\u0027interface 3333\u0027, \u0027port default vlan 33\u0027, \u0027commit\u0027])"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @mock.patch(\u0027networking_generic_switch.devices.netmiko_devices.\u0027"},{"line_number":51,"context_line":"                \u0027NetmikoSwitch.send_commands_to_device\u0027)"},{"line_number":52,"context_line":"    def test_delete_port_has_default_vlan(self, mock_exec):"}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_5609ca2e","line":49,"updated":"2018-03-09 13:41:28.000000000","message":"Can you add a test for plug_port_to_network with a default vlan?","commit_id":"bc62c808ba8b1fa7d9272380d4baf49422ddb5dc"},{"author":{"_account_id":25943,"name":"Zachary Ma","email":"mazengxie@126.com","username":"Zachary"},"change_message_id":"8d474b28d4036583e88a250e116419ec82d98227","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.switch.plug_port_to_network(3333, 33)"},{"line_number":47,"context_line":"        mock_exec.assert_called_with("},{"line_number":48,"context_line":"            [\u0027interface 3333\u0027, \u0027port default vlan 33\u0027, \u0027commit\u0027])"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @mock.patch(\u0027networking_generic_switch.devices.netmiko_devices.\u0027"},{"line_number":51,"context_line":"                \u0027NetmikoSwitch.send_commands_to_device\u0027)"},{"line_number":52,"context_line":"    def test_delete_port_has_default_vlan(self, mock_exec):"}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_c343ccae","line":49,"in_reply_to":"df7087c5_5609ca2e","updated":"2018-03-10 05:46:15.000000000","message":"ok, But the patch https://review.openstack.org/#/c/549920/\nmust be merged at first.\nOtherwise it will conflict.","commit_id":"bc62c808ba8b1fa7d9272380d4baf49422ddb5dc"},{"author":{"_account_id":25943,"name":"Zachary Ma","email":"mazengxie@126.com","username":"Zachary"},"change_message_id":"e9d1224595c7e55ca59e331fd7a3e1125fa3888b","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.switch.plug_port_to_network(3333, 33)"},{"line_number":47,"context_line":"        mock_exec.assert_called_with("},{"line_number":48,"context_line":"            [\u0027interface 3333\u0027, \u0027port default vlan 33\u0027, \u0027commit\u0027])"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @mock.patch(\u0027networking_generic_switch.devices.netmiko_devices.\u0027"},{"line_number":51,"context_line":"                \u0027NetmikoSwitch.send_commands_to_device\u0027)"},{"line_number":52,"context_line":"    def test_delete_port_has_default_vlan(self, mock_exec):"}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_699bbfc8","line":49,"in_reply_to":"df7087c5_c343ccae","updated":"2018-03-10 10:54:20.000000000","message":"Done","commit_id":"bc62c808ba8b1fa7d9272380d4baf49422ddb5dc"}],"networking_generic_switch/tests/unit/test_devices.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a32d05b29ff409b8e9b09c7328d581ab4b6cb328","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        self.assertEqual(\u002720\u0027, device.ngs_config[\u0027ngs_ssh_connect_interval\u0027])"},{"line_number":108,"context_line":"        self.assertEqual(\u0027port1,port2\u0027, device.ngs_config[\u0027ngs_trunk_ports\u0027])"},{"line_number":109,"context_line":"        self.assertEqual(\u0027physnet1,physnet2\u0027,"},{"line_number":110,"context_line":"                         device.ngs_config[\u0027ngs_physical_networks\u0027])"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def test_driver_ngs_config_defaults(self):"},{"line_number":113,"context_line":"        device_cfg \u003d {\"device_type\": \u0027netmiko_ovs_linux\u0027}"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_a78fd621","line":110,"updated":"2018-03-09 09:25:26.000000000","message":"Can you also check the value \u003d\u003d 20 here.","commit_id":"616a21c7ef0f6b99e90735322f962d4c71939ec5"},{"author":{"_account_id":25943,"name":"Zachary Ma","email":"mazengxie@126.com","username":"Zachary"},"change_message_id":"38f4aab89b3dea2963d684ed757ce0926aadb7b4","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        self.assertEqual(\u002720\u0027, device.ngs_config[\u0027ngs_ssh_connect_interval\u0027])"},{"line_number":108,"context_line":"        self.assertEqual(\u0027port1,port2\u0027, device.ngs_config[\u0027ngs_trunk_ports\u0027])"},{"line_number":109,"context_line":"        self.assertEqual(\u0027physnet1,physnet2\u0027,"},{"line_number":110,"context_line":"                         device.ngs_config[\u0027ngs_physical_networks\u0027])"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def test_driver_ngs_config_defaults(self):"},{"line_number":113,"context_line":"        device_cfg \u003d {\"device_type\": \u0027netmiko_ovs_linux\u0027}"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_1017daef","line":110,"in_reply_to":"df7087c5_a78fd621","updated":"2018-03-09 11:27:10.000000000","message":"done","commit_id":"616a21c7ef0f6b99e90735322f962d4c71939ec5"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a32d05b29ff409b8e9b09c7328d581ab4b6cb328","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        self.assertEqual(60, device.ngs_config[\u0027ngs_ssh_connect_timeout\u0027])"},{"line_number":118,"context_line":"        self.assertEqual(10, device.ngs_config[\u0027ngs_ssh_connect_interval\u0027])"},{"line_number":119,"context_line":"        self.assertNotIn(\u0027ngs_trunk_ports\u0027, device.ngs_config)"},{"line_number":120,"context_line":"        self.assertNotIn(\u0027ngs_physical_networks\u0027, device.ngs_config)"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_c7920a4c","line":120,"updated":"2018-03-09 09:25:26.000000000","message":"Assert not in","commit_id":"616a21c7ef0f6b99e90735322f962d4c71939ec5"},{"author":{"_account_id":25943,"name":"Zachary Ma","email":"mazengxie@126.com","username":"Zachary"},"change_message_id":"38f4aab89b3dea2963d684ed757ce0926aadb7b4","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        self.assertEqual(60, device.ngs_config[\u0027ngs_ssh_connect_timeout\u0027])"},{"line_number":118,"context_line":"        self.assertEqual(10, device.ngs_config[\u0027ngs_ssh_connect_interval\u0027])"},{"line_number":119,"context_line":"        self.assertNotIn(\u0027ngs_trunk_ports\u0027, device.ngs_config)"},{"line_number":120,"context_line":"        self.assertNotIn(\u0027ngs_physical_networks\u0027, device.ngs_config)"}],"source_content_type":"text/x-python","patch_set":13,"id":"df7087c5_b0d38e38","line":120,"in_reply_to":"df7087c5_c7920a4c","updated":"2018-03-09 11:27:10.000000000","message":"done","commit_id":"616a21c7ef0f6b99e90735322f962d4c71939ec5"}],"networking_generic_switch/tests/unit/test_generic_switch_mech.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"eb589ef910d9f1f1d2d79b8e878a4040a1413b01","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        mock_context.segments_to_bind \u003d [mock_context.network.current]"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        driver.delete_port_postcommit(mock_context)"},{"line_number":248,"context_line":"        self.switch_mock.get_port_default_vlan.assert_called_once_with()"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def test_delete_port_postcommit_failure(self, m_list):"},{"line_number":251,"context_line":"        driver \u003d gsm.GenericSwitchDriver()"}],"source_content_type":"text/x-python","patch_set":8,"id":"df7087c5_58d05451","line":248,"updated":"2018-03-07 09:39:54.000000000","message":"Sorry, should have been more clear. I\u0027d like to see tests in networking_generic_switch/tests/unit/netmiko/test_netmiko_base.py that exercise the delete_port code path when there is a default VLAN.","commit_id":"6eb49d9734f94539a64cea46051c192c66d476e7"},{"author":{"_account_id":25943,"name":"Zachary Ma","email":"mazengxie@126.com","username":"Zachary"},"change_message_id":"59b6472484fae24a561bc5bbc4e16ef85f9ae758","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        mock_context.segments_to_bind \u003d [mock_context.network.current]"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        driver.delete_port_postcommit(mock_context)"},{"line_number":248,"context_line":"        self.switch_mock.get_port_default_vlan.assert_called_once_with()"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def test_delete_port_postcommit_failure(self, m_list):"},{"line_number":251,"context_line":"        driver \u003d gsm.GenericSwitchDriver()"}],"source_content_type":"text/x-python","patch_set":8,"id":"df7087c5_96947dea","line":248,"in_reply_to":"df7087c5_58d05451","updated":"2018-03-07 11:16:03.000000000","message":"I don\u0027t know add it. How about? What is meaning about m_sctd?\n    @mock.patch(\u0027networking_generic_switch.devices.netmiko_devices.\u0027\n                \u0027NetmikoSwitch.send_commands_to_device\u0027)\n    def test_delete_port(self, m_sctd):\n        self.switch.ngs_config[\u0027ngs_port_default_vlan\u0027] \u003d 20\n        self.switch.delete_port(2222, 22)\n        m_sctd.assert_called_with([])","commit_id":"6eb49d9734f94539a64cea46051c192c66d476e7"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a1cbdadb6fe3cee6b6b7e9b8c19f92610adbd150","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        mock_context.segments_to_bind \u003d [mock_context.network.current]"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        driver.delete_port_postcommit(mock_context)"},{"line_number":248,"context_line":"        self.switch_mock.get_port_default_vlan.assert_called_once_with()"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def test_delete_port_postcommit_failure(self, m_list):"},{"line_number":251,"context_line":"        driver \u003d gsm.GenericSwitchDriver()"}],"source_content_type":"text/x-python","patch_set":8,"id":"df7087c5_9630fd09","line":248,"in_reply_to":"df7087c5_96947dea","updated":"2018-03-07 11:24:43.000000000","message":"m_sctd is a mock of send_commands_to_device, that allows us to check which commands were sent to the device.\n\nYou can create a switch with extra options using _make_switch_device, see test_add_network_with_trunk_ports for an example.","commit_id":"6eb49d9734f94539a64cea46051c192c66d476e7"}]}
