)]}'
{"nova/tests/unit/virt/hyperv/test_vmops.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"75527eea881b7f9a63b7476384088f4657fdb300","unresolved":false,"context_lines":[{"line_number":1131,"context_line":""},{"line_number":1132,"context_line":"    def test_check_if_hotplug_available_win_6_3(self):"},{"line_number":1133,"context_line":"        self._test_check_hotplug_available("},{"line_number":1134,"context_line":"            expected_exception\u003dTrue, windows_version\u003dself._WIN_VERSION_6_3)"},{"line_number":1135,"context_line":""},{"line_number":1136,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_check_hotplug_available\u0027)"},{"line_number":1137,"context_line":"    def test_detach_interface(self, mock_check_hotplug_available):"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_96c36457","line":1134,"updated":"2015-08-24 13:36:08.000000000","message":"Nit: I think writing these out would be much easier to read and maintain.","commit_id":"d9380a525098b669937b7e147cc72fe36c370205"}],"nova/virt/hyperv/driver.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"75527eea881b7f9a63b7476384088f4657fdb300","unresolved":false,"context_lines":[{"line_number":265,"context_line":"    def get_console_output(self, context, instance):"},{"line_number":266,"context_line":"        return self._vmops.get_console_output(instance)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    def detach_interface(self, instance, vif):"},{"line_number":269,"context_line":"        return self._vmops.detach_interface(instance, vif)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_1623d4a8","line":268,"updated":"2015-08-24 13:36:08.000000000","message":"Seems odd to implement detach but not attach.\n\nBut this is a bug fix, so I think this is fine.","commit_id":"d9380a525098b669937b7e147cc72fe36c370205"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"4a3f0eb91c82e6617332fc860f51c310248b45df","unresolved":false,"context_lines":[{"line_number":265,"context_line":"    def get_console_output(self, context, instance):"},{"line_number":266,"context_line":"        return self._vmops.get_console_output(instance)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    def detach_interface(self, instance, vif):"},{"line_number":269,"context_line":"        return self._vmops.detach_interface(instance, vif)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_fc47fc48","line":268,"in_reply_to":"da20952f_2477ae3b","updated":"2015-08-28 11:11:34.000000000","message":"I can definitely add that, as it\u0027s just another 8-10 lines of change.","commit_id":"d9380a525098b669937b7e147cc72fe36c370205"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9577931c9a2a098443a68f45f6851cd6ac804562","unresolved":false,"context_lines":[{"line_number":265,"context_line":"    def get_console_output(self, context, instance):"},{"line_number":266,"context_line":"        return self._vmops.get_console_output(instance)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    def detach_interface(self, instance, vif):"},{"line_number":269,"context_line":"        return self._vmops.detach_interface(instance, vif)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_2477ae3b","line":268,"in_reply_to":"fa1b9901_1623d4a8","updated":"2015-08-28 01:04:42.000000000","message":"Agree it is weird that attach_interface isn\u0027t implemented.  I won\u0027t hold up on this though.  However, it might be good to have a note in here explaining that attach isn\u0027t implemented and detach is only implemented for this neutron vif unplugged event case.","commit_id":"d9380a525098b669937b7e147cc72fe36c370205"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"64d6adce7b57215a7ce5ee8d6d88899b0d78cba3","unresolved":false,"context_lines":[{"line_number":265,"context_line":"    def get_console_output(self, context, instance):"},{"line_number":266,"context_line":"        return self._vmops.get_console_output(instance)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    def attach_interface(self, instance, image_meta, vif):"},{"line_number":269,"context_line":"        return self._vmops.attach_interface(instance, vif)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def detach_interface(self, instance, vif):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_7332c4f3","line":268,"updated":"2015-09-07 11:20:27.000000000","message":"this feels like a feature add now, but anyways, ignoring that.","commit_id":"91a04eb17a8f775208cf21480aa20177f45e01ff"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"313ebc7525d882a3ea9df72647654b921947a3f4","unresolved":false,"context_lines":[{"line_number":265,"context_line":"    def get_console_output(self, context, instance):"},{"line_number":266,"context_line":"        return self._vmops.get_console_output(instance)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    def attach_interface(self, instance, image_meta, vif):"},{"line_number":269,"context_line":"        return self._vmops.attach_interface(instance, vif)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def detach_interface(self, instance, vif):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_61650a43","line":268,"in_reply_to":"da20952f_7332c4f3","updated":"2015-09-07 12:34:36.000000000","message":"well, I\u0027ve added this as per your and Matt\u0027s  previous comments. You said it was weird that I was only adding detach_interface. :)","commit_id":"91a04eb17a8f775208cf21480aa20177f45e01ff"}],"nova/virt/hyperv/vmops.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9577931c9a2a098443a68f45f6851cd6ac804562","unresolved":false,"context_lines":[{"line_number":446,"context_line":"            if self._vmutils.vm_exists(instance_name):"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"                # Stop the VM first."},{"line_number":449,"context_line":"                self.power_off(instance)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"                self._vmutils.destroy_vm(instance_name)"},{"line_number":452,"context_line":"                self._volumeops.disconnect_volumes(block_device_info)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_04a5cab3","line":449,"updated":"2015-08-28 01:04:42.000000000","message":"Why aren\u0027t nics unplugged here?  Does that happen automatically as part of the call to destroy_vm?","commit_id":"d9380a525098b669937b7e147cc72fe36c370205"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"4a3f0eb91c82e6617332fc860f51c310248b45df","unresolved":false,"context_lines":[{"line_number":446,"context_line":"            if self._vmutils.vm_exists(instance_name):"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"                # Stop the VM first."},{"line_number":449,"context_line":"                self.power_off(instance)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"                self._vmutils.destroy_vm(instance_name)"},{"line_number":452,"context_line":"                self._volumeops.disconnect_volumes(block_device_info)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_1cdf506a","line":449,"in_reply_to":"da20952f_04a5cab3","updated":"2015-08-28 11:11:34.000000000","message":"current hyper-v vif unplug doesn\u0027t do anything yet: https://github.com/openstack/nova/blob/master/nova/virt/hyperv/vif.py\n\nIt will in the future though. so it might be a good idea to add that too then.","commit_id":"d9380a525098b669937b7e147cc72fe36c370205"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9577931c9a2a098443a68f45f6851cd6ac804562","unresolved":false,"context_lines":[{"line_number":724,"context_line":"        \"\"\""},{"line_number":725,"context_line":"        vm_state \u003d self._get_vm_state(instance.name)"},{"line_number":726,"context_line":"        if vm_state \u003d\u003d constants.HYPERV_VM_STATE_DISABLED:"},{"line_number":727,"context_line":"            # can attach / detach interface to stopped VMs."},{"line_number":728,"context_line":"            return"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"        if not self._hostutils.check_min_windows_version(10, 0):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_4447424b","line":727,"updated":"2015-08-28 01:04:42.000000000","message":"s/can/cannot/ ?","commit_id":"d9380a525098b669937b7e147cc72fe36c370205"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"4a3f0eb91c82e6617332fc860f51c310248b45df","unresolved":false,"context_lines":[{"line_number":724,"context_line":"        \"\"\""},{"line_number":725,"context_line":"        vm_state \u003d self._get_vm_state(instance.name)"},{"line_number":726,"context_line":"        if vm_state \u003d\u003d constants.HYPERV_VM_STATE_DISABLED:"},{"line_number":727,"context_line":"            # can attach / detach interface to stopped VMs."},{"line_number":728,"context_line":"            return"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"        if not self._hostutils.check_min_windows_version(10, 0):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_895ec074","line":727,"in_reply_to":"da20952f_4447424b","updated":"2015-08-28 11:11:34.000000000","message":"can. there\u0027s no reason why we cannot detach a NIC from a stopped VM.","commit_id":"d9380a525098b669937b7e147cc72fe36c370205"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9577931c9a2a098443a68f45f6851cd6ac804562","unresolved":false,"context_lines":[{"line_number":728,"context_line":"            return"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"        if not self._hostutils.check_min_windows_version(10, 0):"},{"line_number":731,"context_line":"            LOG.error(_LE(\"This version of Windows does not support vNIC \""},{"line_number":732,"context_line":"                          \"hot plugging.\"))"},{"line_number":733,"context_line":"            raise exception.InterfaceDetachFailed(instance_uuid\u003dinstance.uuid)"},{"line_number":734,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_646926be","line":731,"updated":"2015-08-28 01:04:42.000000000","message":"We should add to this log message what the minimum required version is for this so people don\u0027t have to check the code when they see this error.","commit_id":"d9380a525098b669937b7e147cc72fe36c370205"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"4a3f0eb91c82e6617332fc860f51c310248b45df","unresolved":false,"context_lines":[{"line_number":728,"context_line":"            return"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"        if not self._hostutils.check_min_windows_version(10, 0):"},{"line_number":731,"context_line":"            LOG.error(_LE(\"This version of Windows does not support vNIC \""},{"line_number":732,"context_line":"                          \"hot plugging.\"))"},{"line_number":733,"context_line":"            raise exception.InterfaceDetachFailed(instance_uuid\u003dinstance.uuid)"},{"line_number":734,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_a9ef0486","line":731,"in_reply_to":"da20952f_646926be","updated":"2015-08-28 11:11:34.000000000","message":"makes sense.","commit_id":"d9380a525098b669937b7e147cc72fe36c370205"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9577931c9a2a098443a68f45f6851cd6ac804562","unresolved":false,"context_lines":[{"line_number":741,"context_line":"        LOG.debug(\u0027Detaching vif: %s\u0027, vif[\u0027id\u0027], instance\u003dinstance)"},{"line_number":742,"context_line":"        self._check_hotplug_available(instance)"},{"line_number":743,"context_line":"        self._vif_driver.unplug(instance, vif)"},{"line_number":744,"context_line":"        self._vmutils.destroy_nic(instance.name, vif[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_84e31a05","line":744,"updated":"2015-08-28 01:04:42.000000000","message":"This method can raise exception.NotFound if the vm isn\u0027t found, and given the case of this bug I\u0027d think we could get this event when destroying an instance, so you might want to handle the NotFound potentially raised here and re-raise InterfaceDetachFailed instead since that\u0027s what the caller should expect to get out of this.\n\nAlthough arguably if the vm is gone you\u0027d have hit that by now since the vm is looked up a few times before we get here.","commit_id":"d9380a525098b669937b7e147cc72fe36c370205"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"4a3f0eb91c82e6617332fc860f51c310248b45df","unresolved":false,"context_lines":[{"line_number":741,"context_line":"        LOG.debug(\u0027Detaching vif: %s\u0027, vif[\u0027id\u0027], instance\u003dinstance)"},{"line_number":742,"context_line":"        self._check_hotplug_available(instance)"},{"line_number":743,"context_line":"        self._vif_driver.unplug(instance, vif)"},{"line_number":744,"context_line":"        self._vmutils.destroy_nic(instance.name, vif[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_955ed374","line":744,"in_reply_to":"da20952f_84e31a05","updated":"2015-08-28 11:11:34.000000000","message":"Done","commit_id":"d9380a525098b669937b7e147cc72fe36c370205"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"64d6adce7b57215a7ce5ee8d6d88899b0d78cba3","unresolved":false,"context_lines":[{"line_number":752,"context_line":"            raise exception.InterfaceAttachFailed(instance_uuid\u003dinstance.uuid)"},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"        LOG.debug(\u0027Attaching vif: %s\u0027, vif[\u0027id\u0027], instance\u003dinstance)"},{"line_number":755,"context_line":"        self._vmutils.create_nic(instance.name, vif[\u0027id\u0027], vif[\u0027address\u0027])"},{"line_number":756,"context_line":"        self._vif_driver.plug(instance, vif)"},{"line_number":757,"context_line":""},{"line_number":758,"context_line":"    def detach_interface(self, instance, vif):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_1321089e","line":755,"updated":"2015-09-07 11:20:27.000000000","message":"is it really that simple?\n\nIt feels like we are missing lots of details here around how that nic maybe be configured in neutron I presume?","commit_id":"91a04eb17a8f775208cf21480aa20177f45e01ff"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"313ebc7525d882a3ea9df72647654b921947a3f4","unresolved":false,"context_lines":[{"line_number":752,"context_line":"            raise exception.InterfaceAttachFailed(instance_uuid\u003dinstance.uuid)"},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"        LOG.debug(\u0027Attaching vif: %s\u0027, vif[\u0027id\u0027], instance\u003dinstance)"},{"line_number":755,"context_line":"        self._vmutils.create_nic(instance.name, vif[\u0027id\u0027], vif[\u0027address\u0027])"},{"line_number":756,"context_line":"        self._vif_driver.plug(instance, vif)"},{"line_number":757,"context_line":""},{"line_number":758,"context_line":"    def detach_interface(self, instance, vif):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_811e1eb9","line":755,"in_reply_to":"da20952f_1321089e","updated":"2015-09-07 12:34:36.000000000","message":"that\u0027s all on the nova side, there is nothing else to the attach nic. it is the same as in the spawn / create_instance method. On hyper-v, there is the neutron-hyperv-agent which runs. Periodically, it checks for new NICs and binds VLANs/other and connects them to their proper networks and sets up their security groups etc.","commit_id":"91a04eb17a8f775208cf21480aa20177f45e01ff"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"564cc51b10bdfd2ce4d7294fdc9ec6e635b80d7a","unresolved":false,"context_lines":[{"line_number":752,"context_line":"            raise exception.InterfaceAttachFailed(instance_uuid\u003dinstance.uuid)"},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"        LOG.debug(\u0027Attaching vif: %s\u0027, vif[\u0027id\u0027], instance\u003dinstance)"},{"line_number":755,"context_line":"        self._vmutils.create_nic(instance.name, vif[\u0027id\u0027], vif[\u0027address\u0027])"},{"line_number":756,"context_line":"        self._vif_driver.plug(instance, vif)"},{"line_number":757,"context_line":""},{"line_number":758,"context_line":"    def detach_interface(self, instance, vif):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_fc1d4162","line":755,"in_reply_to":"da20952f_811e1eb9","updated":"2015-09-07 12:42:11.000000000","message":"_port_bound method, that connects the vNIC to the network.\n\nhttps://github.com/stackforge/networking-hyperv/blob/master/hyperv/neutron/hyperv_neutron_agent.py#L195","commit_id":"91a04eb17a8f775208cf21480aa20177f45e01ff"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"44ce73e5e1ae2d4954bc8af922f3d76cbc353fdb","unresolved":false,"context_lines":[{"line_number":736,"context_line":""},{"line_number":737,"context_line":"        if not self._hostutils.check_min_windows_version(10, 0):"},{"line_number":738,"context_line":"            # TODO(claudiub): add _LE translation after string freeze."},{"line_number":739,"context_line":"            LOG.error(\"vNIC hot plugging is supported only in newer \""},{"line_number":740,"context_line":"                      \"versions than Windows Hyper-V / Server 2012 R2.\")"},{"line_number":741,"context_line":"            return False"},{"line_number":742,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_b63e05b6","line":739,"updated":"2015-09-07 13:54:43.000000000","message":"missing translation _LE\n\nuse a debug instead","commit_id":"416694a4fb24bac1cea0b10fc8999809464ab90a"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2e34db079c08d723f4146bf6ca7c800642647f39","unresolved":false,"context_lines":[{"line_number":736,"context_line":""},{"line_number":737,"context_line":"        if not self._hostutils.check_min_windows_version(10, 0):"},{"line_number":738,"context_line":"            # TODO(claudiub): add _LE translation after string freeze."},{"line_number":739,"context_line":"            LOG.error(\"vNIC hot plugging is supported only in newer \""},{"line_number":740,"context_line":"                      \"versions than Windows Hyper-V / Server 2012 R2.\")"},{"line_number":741,"context_line":"            return False"},{"line_number":742,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_564c49c7","line":739,"in_reply_to":"da20952f_b63e05b6","updated":"2015-09-07 14:10:30.000000000","message":"Done","commit_id":"416694a4fb24bac1cea0b10fc8999809464ab90a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"44ce73e5e1ae2d4954bc8af922f3d76cbc353fdb","unresolved":false,"context_lines":[{"line_number":743,"context_line":"        if (self._vmutils.get_vm_generation(instance.name) \u003d\u003d"},{"line_number":744,"context_line":"                constants.VM_GEN_1):"},{"line_number":745,"context_line":"            # TODO(claudiub): add _LE translation after string freeze."},{"line_number":746,"context_line":"            LOG.error(\"Cannot hot plug vNIC to a first generation VM.\","},{"line_number":747,"context_line":"                      instance\u003dinstance)"},{"line_number":748,"context_line":"            return False"},{"line_number":749,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_563209f3","line":746,"updated":"2015-09-07 13:54:43.000000000","message":"missing translation _LE\n\nuse a debug message instead","commit_id":"416694a4fb24bac1cea0b10fc8999809464ab90a"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2e34db079c08d723f4146bf6ca7c800642647f39","unresolved":false,"context_lines":[{"line_number":743,"context_line":"        if (self._vmutils.get_vm_generation(instance.name) \u003d\u003d"},{"line_number":744,"context_line":"                constants.VM_GEN_1):"},{"line_number":745,"context_line":"            # TODO(claudiub): add _LE translation after string freeze."},{"line_number":746,"context_line":"            LOG.error(\"Cannot hot plug vNIC to a first generation VM.\","},{"line_number":747,"context_line":"                      instance\u003dinstance)"},{"line_number":748,"context_line":"            return False"},{"line_number":749,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_76470da3","line":746,"in_reply_to":"da20952f_563209f3","updated":"2015-09-07 14:10:30.000000000","message":"Done","commit_id":"416694a4fb24bac1cea0b10fc8999809464ab90a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"44ce73e5e1ae2d4954bc8af922f3d76cbc353fdb","unresolved":false,"context_lines":[{"line_number":768,"context_line":"            self._vmutils.destroy_nic(instance.name, vif[\u0027id\u0027])"},{"line_number":769,"context_line":"        except exception.NotFound:"},{"line_number":770,"context_line":"            # TODO(claudiub): add _LE translation after string freeze."},{"line_number":771,"context_line":"            LOG.error(\"Instance not found during detach interface. It \""},{"line_number":772,"context_line":"                      \"might have been destroyed beforehand.\","},{"line_number":773,"context_line":"                      instance\u003dinstance)"},{"line_number":774,"context_line":"            raise exception.InterfaceDetachFailed(instance_uuid\u003dinstance.uuid)"}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_f6579dfe","line":771,"updated":"2015-09-07 13:54:43.000000000","message":"ditto","commit_id":"416694a4fb24bac1cea0b10fc8999809464ab90a"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2e34db079c08d723f4146bf6ca7c800642647f39","unresolved":false,"context_lines":[{"line_number":768,"context_line":"            self._vmutils.destroy_nic(instance.name, vif[\u0027id\u0027])"},{"line_number":769,"context_line":"        except exception.NotFound:"},{"line_number":770,"context_line":"            # TODO(claudiub): add _LE translation after string freeze."},{"line_number":771,"context_line":"            LOG.error(\"Instance not found during detach interface. It \""},{"line_number":772,"context_line":"                      \"might have been destroyed beforehand.\","},{"line_number":773,"context_line":"                      instance\u003dinstance)"},{"line_number":774,"context_line":"            raise exception.InterfaceDetachFailed(instance_uuid\u003dinstance.uuid)"}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_16c9f125","line":771,"in_reply_to":"da20952f_f6579dfe","updated":"2015-09-07 14:10:30.000000000","message":"Done","commit_id":"416694a4fb24bac1cea0b10fc8999809464ab90a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"8a08b434fe8b30246705e78ad177dc6dde5614a7","unresolved":false,"context_lines":[{"line_number":735,"context_line":"            return True"},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"        if not self._hostutils.check_min_windows_version(10, 0):"},{"line_number":738,"context_line":"            # TODO(claudiub): add set log level to error after string freeze."},{"line_number":739,"context_line":"            LOG.debug(\"vNIC hot plugging is supported only in newer \""},{"line_number":740,"context_line":"                      \"versions than Windows Hyper-V / Server 2012 R2.\")"},{"line_number":741,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":11,"id":"da20952f_0a845ed0","line":738,"updated":"2015-09-07 15:47:32.000000000","message":"yeah, sorry, I missed you didn\u0027t change that to debug last time","commit_id":"8ea4875dedcaefde922d1740d7acc8cbbb58ae7a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f984a31ecd906c3cdc836088e1ff69e559916959","unresolved":false,"context_lines":[{"line_number":735,"context_line":"            return True"},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"        if not self._hostutils.check_min_windows_version(10, 0):"},{"line_number":738,"context_line":"            # TODO(claudiub): add set log level to error after string freeze."},{"line_number":739,"context_line":"            LOG.debug(\"vNIC hot plugging is supported only in newer \""},{"line_number":740,"context_line":"                      \"versions than Windows Hyper-V / Server 2012 R2.\")"},{"line_number":741,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba15a1d1_e84ac325","line":738,"updated":"2015-09-16 10:18:15.000000000","message":"so we can actually do that right away now","commit_id":"92f1e5fc117160b67616b75f935b8217d2fe386b"}],"nova/virt/hyperv/vmutils.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9577931c9a2a098443a68f45f6851cd6ac804562","unresolved":false,"context_lines":[{"line_number":484,"context_line":"        vm \u003d self._lookup_vm_check(vm_name)"},{"line_number":485,"context_line":"        self._modify_virt_resource(nic_data, vm.path_())"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    def destroy_nic(self, vm_name, nic_name):"},{"line_number":488,"context_line":"        nic_data \u003d self._get_nic_data_by_name(nic_name)"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"        vm \u003d self._lookup_vm_check(vm_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_04d4ea44","line":487,"updated":"2015-08-28 01:04:42.000000000","message":"nit: this is really nic_id rather than nic_name.\n\nAlso, would be nice to have docstrings for new public methods in a utility class.","commit_id":"d9380a525098b669937b7e147cc72fe36c370205"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"4a3f0eb91c82e6617332fc860f51c310248b45df","unresolved":false,"context_lines":[{"line_number":484,"context_line":"        vm \u003d self._lookup_vm_check(vm_name)"},{"line_number":485,"context_line":"        self._modify_virt_resource(nic_data, vm.path_())"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    def destroy_nic(self, vm_name, nic_name):"},{"line_number":488,"context_line":"        nic_data \u003d self._get_nic_data_by_name(nic_name)"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"        vm \u003d self._lookup_vm_check(vm_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_29d3f405","line":487,"in_reply_to":"da20952f_04d4ea44","updated":"2015-08-28 11:11:34.000000000","message":"I disagree. It really is the NIC\u0027s name, as we set it in L504 and select it on L495 (ElementName). Now, for convenience and simplicity for neutron hyper-v agent, the NIC name is the vif ID.\n\nBut yeah, will add docstrings.","commit_id":"d9380a525098b669937b7e147cc72fe36c370205"}],"nova/virt/hyperv/vmutilsv2.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9577931c9a2a098443a68f45f6851cd6ac804562","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        vm \u003d self._lookup_vm_check(vm_name)"},{"line_number":335,"context_line":"        vssd \u003d self._get_vm_setting_data(vm)"},{"line_number":336,"context_line":"        if hasattr(vssd, self._VIRTUAL_SYSTEM_SUBTYPE):"},{"line_number":337,"context_line":"            return int(vssd.VirtualSystemSubType.split(\u0027:\u0027)[-1])"},{"line_number":338,"context_line":"        return constants.VM_GEN_1"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_2491ee99","line":337,"updated":"2015-08-28 01:04:42.000000000","message":"nit: would be nice to have a code comment about what the format of the vssd.VirtualSystemSubType string looks like for us that don\u0027t have the hyper-v spec memorized.","commit_id":"d9380a525098b669937b7e147cc72fe36c370205"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"4a3f0eb91c82e6617332fc860f51c310248b45df","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        vm \u003d self._lookup_vm_check(vm_name)"},{"line_number":335,"context_line":"        vssd \u003d self._get_vm_setting_data(vm)"},{"line_number":336,"context_line":"        if hasattr(vssd, self._VIRTUAL_SYSTEM_SUBTYPE):"},{"line_number":337,"context_line":"            return int(vssd.VirtualSystemSubType.split(\u0027:\u0027)[-1])"},{"line_number":338,"context_line":"        return constants.VM_GEN_1"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_49dae879","line":337,"in_reply_to":"da20952f_2491ee99","updated":"2015-08-28 11:11:34.000000000","message":"Done","commit_id":"d9380a525098b669937b7e147cc72fe36c370205"}]}
