)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":18777,"name":"Jinxing Fang","email":"fang.jinxing@99cloud.net","username":"jinxingfang"},"change_message_id":"e654d9c207a804fb11821d3620eb36aa6e9182b0","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add checks for driver attach_interfaces capability"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently Ironic driver does not spport attach interfaces"},{"line_number":10,"context_line":"for instances, and the error of NotImplementedError has"},{"line_number":11,"context_line":"not been handled."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"5a18252c_147c8d71","line":9,"range":{"start_line":9,"start_character":33,"end_line":9,"end_character":39},"updated":"2016-04-12 05:03:42.000000000","message":"looks good, but the commit message has a typo","commit_id":"0c37bea74e406809cc6872c21e34253804dd9e49"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6cd4b0a515c68a396dbf6fb1f7f55af19315982d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add checks for driver attach_interfaces capability"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently Ironic driver does not spport attach interfaces"},{"line_number":10,"context_line":"for instances, and the error of NotImplementedError has"},{"line_number":11,"context_line":"not been handled."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"5a18252c_66219cb4","line":9,"range":{"start_line":9,"start_character":33,"end_line":9,"end_character":39},"in_reply_to":"5a18252c_147c8d71","updated":"2016-04-13 03:50:52.000000000","message":"Done","commit_id":"0c37bea74e406809cc6872c21e34253804dd9e49"}],"nova/api/openstack/compute/attach_interfaces.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e430239d5783573e308bbe89f0b8195e0bd2afa5","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        except (exception.PortNotFound,"},{"line_number":130,"context_line":"                exception.NetworkNotFound) as e:"},{"line_number":131,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":132,"context_line":"        except NotImplementedError:"},{"line_number":133,"context_line":"            common.raise_feature_not_supported()"},{"line_number":134,"context_line":"        except exception.InterfaceAttachFailed as e:"},{"line_number":135,"context_line":"            raise webob.exc.HTTPInternalServerError("}],"source_content_type":"text/x-python","patch_set":14,"id":"7a1b2928_306f1894","line":132,"range":{"start_line":132,"start_character":8,"end_line":132,"end_character":35},"updated":"2016-04-13 03:38:56.000000000","message":"This is useless I think?","commit_id":"0c37bea74e406809cc6872c21e34253804dd9e49"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6cd4b0a515c68a396dbf6fb1f7f55af19315982d","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        except (exception.PortNotFound,"},{"line_number":130,"context_line":"                exception.NetworkNotFound) as e:"},{"line_number":131,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":132,"context_line":"        except NotImplementedError:"},{"line_number":133,"context_line":"            common.raise_feature_not_supported()"},{"line_number":134,"context_line":"        except exception.InterfaceAttachFailed as e:"},{"line_number":135,"context_line":"            raise webob.exc.HTTPInternalServerError("}],"source_content_type":"text/x-python","patch_set":14,"id":"5a18252c_e61bec7e","line":132,"range":{"start_line":132,"start_character":8,"end_line":132,"end_character":35},"in_reply_to":"7a1b2928_306f1894","updated":"2016-04-13 03:50:52.000000000","message":"Done","commit_id":"0c37bea74e406809cc6872c21e34253804dd9e49"}],"nova/compute/manager.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"4351840d68c32b6484a1cdaf58e4d30705b31462","unresolved":false,"context_lines":[{"line_number":4960,"context_line":"        except (exception.NovaException,"},{"line_number":4961,"context_line":"                NotImplementedError) as ex:"},{"line_number":4962,"context_line":"            port_id \u003d network_info[0].get(\u0027id\u0027)"},{"line_number":4963,"context_line":"            if isinstance(ex, NotImplementedError):"},{"line_number":4964,"context_line":"                LOG.info(_LI(\"Attach interfaces not supported by \""},{"line_number":4965,"context_line":"                             \"hypervisor.\"))"},{"line_number":4966,"context_line":"            LOG.warn(_LW(\"attach interface failed , try to deallocate \""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_b2e6d5ae","line":4963,"updated":"2016-02-02 13:31:47.000000000","message":"this should really be a dedicated except block, the overload seems really odd.","commit_id":"2dd4e27bd1df4f5bbbda5ed56c4dd92da21da7fe"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"10fe422b5c8d85744348a7a480b88ee0ea8f5330","unresolved":false,"context_lines":[{"line_number":4960,"context_line":"        except (exception.NovaException,"},{"line_number":4961,"context_line":"                NotImplementedError) as ex:"},{"line_number":4962,"context_line":"            port_id \u003d network_info[0].get(\u0027id\u0027)"},{"line_number":4963,"context_line":"            if isinstance(ex, NotImplementedError):"},{"line_number":4964,"context_line":"                LOG.info(_LI(\"Attach interfaces not supported by \""},{"line_number":4965,"context_line":"                             \"hypervisor.\"))"},{"line_number":4966,"context_line":"            LOG.warn(_LW(\"attach interface failed , try to deallocate \""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_bcc67547","line":4963,"in_reply_to":"7a5de9d1_b2e6d5ae","updated":"2016-02-04 03:06:02.000000000","message":"Hm, thanks, I think I can remove this log.info, maybe the orginal log is enough, we just catch this NotImplementedError.","commit_id":"2dd4e27bd1df4f5bbbda5ed56c4dd92da21da7fe"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ce6ed7b59de8bbaa1ef7ea7c83de9221a9b040bc","unresolved":false,"context_lines":[{"line_number":4957,"context_line":"    def attach_interface(self, context, instance, network_id, port_id,"},{"line_number":4958,"context_line":"                         requested_ip):"},{"line_number":4959,"context_line":"        \"\"\"Use hotplug to add an network adapter to an instance.\"\"\""},{"line_number":4960,"context_line":"        bind_host_id \u003d self.driver.network_binding_host_id(context, instance)"},{"line_number":4961,"context_line":"        network_info \u003d self.network_api.allocate_port_for_instance("},{"line_number":4962,"context_line":"            context, instance, port_id, network_id, requested_ip,"},{"line_number":4963,"context_line":"            bind_host_id\u003dbind_host_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_c2719b79","line":4960,"updated":"2016-03-06 19:14:01.000000000","message":"I think this code was specifically added for Ironic, so we should probably be clear on why this is a failure, or do we just have incomplete functionality in the Ironic driver?","commit_id":"d75fa0c26c5efbe2878ae0a5b0252126b3bf0560"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"b2015470513b51e992bf9da9a9821bb40fc66be4","unresolved":false,"context_lines":[{"line_number":4957,"context_line":"    def attach_interface(self, context, instance, network_id, port_id,"},{"line_number":4958,"context_line":"                         requested_ip):"},{"line_number":4959,"context_line":"        \"\"\"Use hotplug to add an network adapter to an instance.\"\"\""},{"line_number":4960,"context_line":"        bind_host_id \u003d self.driver.network_binding_host_id(context, instance)"},{"line_number":4961,"context_line":"        network_info \u003d self.network_api.allocate_port_for_instance("},{"line_number":4962,"context_line":"            context, instance, port_id, network_id, requested_ip,"},{"line_number":4963,"context_line":"            bind_host_id\u003dbind_host_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_90a7fd4e","line":4960,"in_reply_to":"7af24918_c2719b79","updated":"2016-03-07 12:10:10.000000000","message":"This was added as part of that patch, to be consistent in the calls to allocate_port_for_instance. The ironic driver does not yet support attach_interface (because we don\u0027t have a story for configuring it inside the instance), however it could one day.","commit_id":"d75fa0c26c5efbe2878ae0a5b0252126b3bf0560"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ce6ed7b59de8bbaa1ef7ea7c83de9221a9b040bc","unresolved":false,"context_lines":[{"line_number":4971,"context_line":"        try:"},{"line_number":4972,"context_line":"            self.driver.attach_interface(instance, image_meta, network_info[0])"},{"line_number":4973,"context_line":"        except (exception.NovaException,"},{"line_number":4974,"context_line":"                NotImplementedError) as ex:"},{"line_number":4975,"context_line":"            port_id \u003d network_info[0].get(\u0027id\u0027)"},{"line_number":4976,"context_line":"            LOG.warn(_LW(\"attach interface failed , try to deallocate \""},{"line_number":4977,"context_line":"                         \"port %(port_id)s, reason: %(msg)s\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_825793c9","line":4974,"updated":"2016-03-06 19:14:01.000000000","message":"First of all, you\u0027d also need a unit test for this change.\n\nSecond, the REST API handles this and returns a 501:\n\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/compute/attach_interfaces.py#L131-L132\n\nThe problem with that, however, is without this change, it doesn\u0027t deallocate the port created above, so that gets orphaned. So I think we should handle this *somehow*, but that could mean checking a driver capability before we even waste time allocating a port. The other thing is, this would change the REST API response from a 501 to a 500 because InterfaceAttachFailed would be raised now and that\u0027s handled as a 500:\n\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/compute/attach_interfaces.py#L133","commit_id":"d75fa0c26c5efbe2878ae0a5b0252126b3bf0560"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"5c2242940d3bdbe87138762c92c042f4ca0cd538","unresolved":false,"context_lines":[{"line_number":4971,"context_line":"        try:"},{"line_number":4972,"context_line":"            self.driver.attach_interface(instance, image_meta, network_info[0])"},{"line_number":4973,"context_line":"        except (exception.NovaException,"},{"line_number":4974,"context_line":"                NotImplementedError) as ex:"},{"line_number":4975,"context_line":"            port_id \u003d network_info[0].get(\u0027id\u0027)"},{"line_number":4976,"context_line":"            LOG.warn(_LW(\"attach interface failed , try to deallocate \""},{"line_number":4977,"context_line":"                         \"port %(port_id)s, reason: %(msg)s\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_b8074d1b","line":4974,"in_reply_to":"5aef4532_8f521712","updated":"2016-03-08 07:26:55.000000000","message":"Thanks alot for the comments, it is really great, I will look deeper.","commit_id":"d75fa0c26c5efbe2878ae0a5b0252126b3bf0560"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ea9c4f82ac858376f14c827ac80844a5e83d3d5a","unresolved":false,"context_lines":[{"line_number":4971,"context_line":"        try:"},{"line_number":4972,"context_line":"            self.driver.attach_interface(instance, image_meta, network_info[0])"},{"line_number":4973,"context_line":"        except (exception.NovaException,"},{"line_number":4974,"context_line":"                NotImplementedError) as ex:"},{"line_number":4975,"context_line":"            port_id \u003d network_info[0].get(\u0027id\u0027)"},{"line_number":4976,"context_line":"            LOG.warn(_LW(\"attach interface failed , try to deallocate \""},{"line_number":4977,"context_line":"                         \"port %(port_id)s, reason: %(msg)s\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_8f521712","line":4974,"in_reply_to":"7af24918_7355f8c4","updated":"2016-03-07 22:05:11.000000000","message":"Per http://specs.openstack.org/openstack/api-wg/guidelines/http.html#use-of-501-not-implemented - we could return a 400 in the case of the Ironic driver. So we\u0027d convert the NotImplementedError to a 400. But I think that would also mean changing https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/attach_interfaces.py#L131-L132 to a 400 response.\n\nWhat concerns me is today we are orphaning that port that gets created if we don\u0027t handle the NotImplementedError, I think that needs to be fixed.\n\nPersonally I\u0027d like to see a driver capability that says whether or not attach-interface is supported, and if not we don\u0027t even attempt the allocate_port_for_instance call.\n\nSomething here:\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/ironic/driver.py#L125\n\nLike \u0027supports_attach_interface\u0027. That would default to True if not specified but the Ironic driver would override that to be False.","commit_id":"d75fa0c26c5efbe2878ae0a5b0252126b3bf0560"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0f9462964abf1ebcc7381e92d249fa8579f848e1","unresolved":false,"context_lines":[{"line_number":4971,"context_line":"        try:"},{"line_number":4972,"context_line":"            self.driver.attach_interface(instance, image_meta, network_info[0])"},{"line_number":4973,"context_line":"        except (exception.NovaException,"},{"line_number":4974,"context_line":"                NotImplementedError) as ex:"},{"line_number":4975,"context_line":"            port_id \u003d network_info[0].get(\u0027id\u0027)"},{"line_number":4976,"context_line":"            LOG.warn(_LW(\"attach interface failed , try to deallocate \""},{"line_number":4977,"context_line":"                         \"port %(port_id)s, reason: %(msg)s\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_7355f8c4","line":4974,"in_reply_to":"7af24918_825793c9","updated":"2016-03-07 05:06:24.000000000","message":"Matt\u0027s point is great here.\n\nI am not sure current microversion bumping rule is the best, but the rule is not allowing this change(501 -\u003e 500) clearly now.\n\nhttps://github.com/openstack/nova/blob/master/doc/source/api_microversion_dev.rst#when-do-i-need-a-new-microversion\n\nThe part of \"changing a status code on a particular response\"","commit_id":"d75fa0c26c5efbe2878ae0a5b0252126b3bf0560"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d2d2c3f46780e716b58f53b9aa732fc05fe05ed4","unresolved":false,"context_lines":[{"line_number":5001,"context_line":"                         requested_ip):"},{"line_number":5002,"context_line":"        \"\"\"Use hotplug to add an network adapter to an instance.\"\"\""},{"line_number":5003,"context_line":"        if not self.driver.capabilities[\u0027supports_attach_interface\u0027]:"},{"line_number":5004,"context_line":"                raise exception.AttachInterfaceNotSupported("},{"line_number":5005,"context_line":"                    instance_id\u003dinstance.uuid)"},{"line_number":5006,"context_line":"        bind_host_id \u003d self.driver.network_binding_host_id(context, instance)"},{"line_number":5007,"context_line":"        network_info \u003d self.network_api.allocate_port_for_instance("},{"line_number":5008,"context_line":"            context, instance, port_id, network_id, requested_ip,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5aef4532_5878a08f","line":5005,"range":{"start_line":5004,"start_character":16,"end_line":5005,"end_character":46},"updated":"2016-03-08 21:57:23.000000000","message":"Can we remove a tab here, the alignment is off.","commit_id":"835342953bc9d1d17f95e518b521820df73e54d3"}],"nova/exception.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d2d2c3f46780e716b58f53b9aa732fc05fe05ed4","unresolved":false,"context_lines":[{"line_number":2110,"context_line":""},{"line_number":2111,"context_line":""},{"line_number":2112,"context_line":"class AttachInterfaceNotSupported(Invalid):"},{"line_number":2113,"context_line":"    msg_fmt \u003d _(\"Unable to attach interface for instance (%(instance)s).\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"5aef4532_18b6183d","line":2113,"range":{"start_line":2113,"start_character":17,"end_line":2113,"end_character":56},"updated":"2016-03-08 21:57:23.000000000","message":"\"Unable to\" is different from \"not supported\" so maybe we should reword this to something like:\n\n\"Attaching interfaces is not supported for instance %(instance)s\"","commit_id":"835342953bc9d1d17f95e518b521820df73e54d3"}],"nova/tests/unit/virt/ironic/test_driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d2d2c3f46780e716b58f53b9aa732fc05fe05ed4","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.assertFalse(self.driver.capabilities[\u0027supports_recreate\u0027],"},{"line_number":122,"context_line":"                         \u0027Driver capabilities for \\\u0027supports_recreate\\\u0027\u0027"},{"line_number":123,"context_line":"                         \u0027is invalid\u0027)"},{"line_number":124,"context_line":"        self.assertFalse(self.driver.capabilities["},{"line_number":125,"context_line":"                             \u0027supports_migrate_to_same_host\u0027],"},{"line_number":126,"context_line":"                         \u0027Driver capabilities for \u0027"},{"line_number":127,"context_line":"                         \u0027\\\u0027supports_migrate_to_same_host\\\u0027 is invalid\u0027)"},{"line_number":128,"context_line":"        self.assertFalse(self.driver.capabilities["},{"line_number":129,"context_line":"                            \u0027supports_attach_interface\u0027],"},{"line_number":130,"context_line":"                         \u0027Driver capabilities for \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"5aef4532_b87d6470","line":127,"range":{"start_line":124,"start_character":25,"end_line":127,"end_character":72},"updated":"2016-03-08 21:57:23.000000000","message":"I guess you\u0027re just adding this because it was missing?","commit_id":"835342953bc9d1d17f95e518b521820df73e54d3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b699d034addab7772755ce52963e81e1f05e104a","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.assertFalse(self.driver.capabilities[\u0027supports_recreate\u0027],"},{"line_number":122,"context_line":"                         \u0027Driver capabilities for \\\u0027supports_recreate\\\u0027\u0027"},{"line_number":123,"context_line":"                         \u0027is invalid\u0027)"},{"line_number":124,"context_line":"        self.assertFalse(self.driver.capabilities["},{"line_number":125,"context_line":"                             \u0027supports_migrate_to_same_host\u0027],"},{"line_number":126,"context_line":"                         \u0027Driver capabilities for \u0027"},{"line_number":127,"context_line":"                         \u0027\\\u0027supports_migrate_to_same_host\\\u0027 is invalid\u0027)"},{"line_number":128,"context_line":"        self.assertFalse(self.driver.capabilities["},{"line_number":129,"context_line":"                            \u0027supports_attach_interface\u0027],"},{"line_number":130,"context_line":"                         \u0027Driver capabilities for \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"5aef4532_2d4d8b6c","line":127,"range":{"start_line":124,"start_character":25,"end_line":127,"end_character":72},"in_reply_to":"5aef4532_27e76cb1","updated":"2016-03-09 01:55:33.000000000","message":"I was just checking, I\u0027m OK with leaving it in here.","commit_id":"835342953bc9d1d17f95e518b521820df73e54d3"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"94731a34857f4dc1572e61bc375016129e3d5ac2","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.assertFalse(self.driver.capabilities[\u0027supports_recreate\u0027],"},{"line_number":122,"context_line":"                         \u0027Driver capabilities for \\\u0027supports_recreate\\\u0027\u0027"},{"line_number":123,"context_line":"                         \u0027is invalid\u0027)"},{"line_number":124,"context_line":"        self.assertFalse(self.driver.capabilities["},{"line_number":125,"context_line":"                             \u0027supports_migrate_to_same_host\u0027],"},{"line_number":126,"context_line":"                         \u0027Driver capabilities for \u0027"},{"line_number":127,"context_line":"                         \u0027\\\u0027supports_migrate_to_same_host\\\u0027 is invalid\u0027)"},{"line_number":128,"context_line":"        self.assertFalse(self.driver.capabilities["},{"line_number":129,"context_line":"                            \u0027supports_attach_interface\u0027],"},{"line_number":130,"context_line":"                         \u0027Driver capabilities for \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"5aef4532_27e76cb1","line":127,"range":{"start_line":124,"start_character":25,"end_line":127,"end_character":72},"in_reply_to":"5aef4532_b87d6470","updated":"2016-03-09 01:11:22.000000000","message":"yes, so shouldn\u0027t I add this? because this can be considered as an unrelated change.","commit_id":"835342953bc9d1d17f95e518b521820df73e54d3"}],"nova/virt/hyperv/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d2d2c3f46780e716b58f53b9aa732fc05fe05ed4","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        \"has_imagecache\": False,"},{"line_number":96,"context_line":"        \"supports_recreate\": False,"},{"line_number":97,"context_line":"        \"supports_migrate_to_same_host\": True,"},{"line_number":98,"context_line":"        \"supports_attach_interface\": True"},{"line_number":99,"context_line":"    }"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def __init__(self, virtapi):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5aef4532_38e95415","line":98,"range":{"start_line":98,"start_character":8,"end_line":98,"end_character":41},"updated":"2016-03-08 21:57:23.000000000","message":"This should be False for hyper-v right? attach_interface is not implemented for the driver.","commit_id":"835342953bc9d1d17f95e518b521820df73e54d3"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"94731a34857f4dc1572e61bc375016129e3d5ac2","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        \"has_imagecache\": False,"},{"line_number":96,"context_line":"        \"supports_recreate\": False,"},{"line_number":97,"context_line":"        \"supports_migrate_to_same_host\": True,"},{"line_number":98,"context_line":"        \"supports_attach_interface\": True"},{"line_number":99,"context_line":"    }"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def __init__(self, virtapi):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5aef4532_47671825","line":98,"range":{"start_line":98,"start_character":8,"end_line":98,"end_character":41},"in_reply_to":"5aef4532_38e95415","updated":"2016-03-09 01:11:22.000000000","message":"actually, looks like hyper-v supports attach_interface:\nhere, http://git.openstack.org/cgit/openstack/nova/tree/nova/virt/hyperv/driver.py#n326","commit_id":"835342953bc9d1d17f95e518b521820df73e54d3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b699d034addab7772755ce52963e81e1f05e104a","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        \"has_imagecache\": False,"},{"line_number":96,"context_line":"        \"supports_recreate\": False,"},{"line_number":97,"context_line":"        \"supports_migrate_to_same_host\": True,"},{"line_number":98,"context_line":"        \"supports_attach_interface\": True"},{"line_number":99,"context_line":"    }"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def __init__(self, virtapi):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5aef4532_8d72dfab","line":98,"range":{"start_line":98,"start_character":8,"end_line":98,"end_character":41},"in_reply_to":"5aef4532_47671825","updated":"2016-03-09 01:55:33.000000000","message":"Huh, OK, I\u0027m not sure how I messed that up.","commit_id":"835342953bc9d1d17f95e518b521820df73e54d3"}]}
