)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"d21bed1ce8bc3c0e7bca0a80e7b5540ff8aeb310","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Hyper-V driver RDP console access support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Blueprint: hyper-v-rdp-console"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Hyper-V uses RDP to provide graphical console access, unlike most other"},{"line_number":12,"context_line":"hypervisors which use VNC for this purpose."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAATH%2F%2FM3c%3D","line":9,"updated":"2013-10-21 14:47:09.000000000","message":"Correct syntax is Implements or Partial implements or Related to, and the correct location of this line should be the line before Change-Id","commit_id":"b54fb4e3ecc8cd0966baac61c51b393d25b0e68a"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"54577d34d7ecb346904aff0ad2f7e5a8718c5526","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Hyper-V driver RDP console access support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Blueprint: hyper-v-rdp-console"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Hyper-V uses RDP to provide graphical console access, unlike most other"},{"line_number":12,"context_line":"hypervisors which use VNC for this purpose."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAATH%2F%2FMy8%3D","line":9,"in_reply_to":"AAAATH%2F%2FM3c%3D","updated":"2013-10-21 14:59:45.000000000","message":"Done","commit_id":"b54fb4e3ecc8cd0966baac61c51b393d25b0e68a"}],"nova/tests/virt/hyperv/test_hypervapi.py":[{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"d21bed1ce8bc3c0e7bca0a80e7b5540ff8aeb310","unresolved":false,"context_lines":[{"line_number":1475,"context_line":"        connect_info \u003d self._conn.get_rdp_console(instance)"},{"line_number":1476,"context_line":"        self._mox.VerifyAll()"},{"line_number":1477,"context_line":""},{"line_number":1478,"context_line":"        self.assertEquals(CONF.my_ip, connect_info[\u0027host\u0027])"},{"line_number":1479,"context_line":"        self.assertEquals(fake_port, connect_info[\u0027port\u0027])"},{"line_number":1480,"context_line":"        self.assertEquals(fake_vm_id, connect_info[\u0027internal_access_path\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FM4I%3D","line":1478,"updated":"2013-10-21 14:47:09.000000000","message":"assertEqual","commit_id":"b54fb4e3ecc8cd0966baac61c51b393d25b0e68a"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"54577d34d7ecb346904aff0ad2f7e5a8718c5526","unresolved":false,"context_lines":[{"line_number":1475,"context_line":"        connect_info \u003d self._conn.get_rdp_console(instance)"},{"line_number":1476,"context_line":"        self._mox.VerifyAll()"},{"line_number":1477,"context_line":""},{"line_number":1478,"context_line":"        self.assertEquals(CONF.my_ip, connect_info[\u0027host\u0027])"},{"line_number":1479,"context_line":"        self.assertEquals(fake_port, connect_info[\u0027port\u0027])"},{"line_number":1480,"context_line":"        self.assertEquals(fake_vm_id, connect_info[\u0027internal_access_path\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FMy0%3D","line":1478,"in_reply_to":"AAAATH%2F%2FM4I%3D","updated":"2013-10-21 14:59:45.000000000","message":"Done","commit_id":"b54fb4e3ecc8cd0966baac61c51b393d25b0e68a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ca8fe9ef9c9f1b5c4a6e5948cfb8b984438ba6dc","unresolved":false,"context_lines":[{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"        self.assertEqual(CONF.my_ip, connect_info[\u0027host\u0027])"},{"line_number":1665,"context_line":"        self.assertEqual(fake_port, connect_info[\u0027port\u0027])"},{"line_number":1666,"context_line":"        self.assertEqual(fake_vm_id, connect_info[\u0027internal_access_path\u0027])"},{"line_number":1667,"context_line":""},{"line_number":1668,"context_line":""},{"line_number":1669,"context_line":"class VolumeOpsTestCase(HyperVAPITestCase):"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F9UqE%3D","line":1666,"updated":"2014-02-07 18:46:47.000000000","message":"Am I missing how this one method tests both version one and two of RDPConsoleUtils?","commit_id":"37cd23ae09949fac308fe18d657208ae3d18245d"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"9883d7eb99b864e262bbc2512f259dfde2647246","unresolved":false,"context_lines":[{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"        self.assertEqual(CONF.my_ip, connect_info[\u0027host\u0027])"},{"line_number":1665,"context_line":"        self.assertEqual(fake_port, connect_info[\u0027port\u0027])"},{"line_number":1666,"context_line":"        self.assertEqual(fake_vm_id, connect_info[\u0027internal_access_path\u0027])"},{"line_number":1667,"context_line":""},{"line_number":1668,"context_line":""},{"line_number":1669,"context_line":"class VolumeOpsTestCase(HyperVAPITestCase):"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F9UkY%3D","line":1666,"in_reply_to":"AAAAUH%2F9UqE%3D","updated":"2014-02-07 18:59:19.000000000","message":"Like all the other lower layer classes, V1 and V2 RDP utils classes are tested in a separate test file which is... missing. Going to check what happened, sorry about that.","commit_id":"37cd23ae09949fac308fe18d657208ae3d18245d"}],"nova/virt/hyperv/driver.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"b6916a7b3e9de03a71eb9c6ae36b2c7d632c9c00","unresolved":false,"context_lines":[{"line_number":203,"context_line":"    def get_host_ip_addr(self):"},{"line_number":204,"context_line":"        return self._hostops.get_host_ip_addr()"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def get_rdp_console(self, instance):"},{"line_number":207,"context_line":"        return self._rdpconsoleops.get_rdp_console(instance)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2FNI8%3D","line":206,"updated":"2014-01-16 12:07:18.000000000","message":"This needs \u0027context\u0027 added as a parameter per comments on review of the parent class API.","commit_id":"0e7f4235d1d8a0d8684aa58b165cabb68184e634"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"1514944a76b0a079320620f92a5b5242fd73b9c0","unresolved":false,"context_lines":[{"line_number":203,"context_line":"    def get_host_ip_addr(self):"},{"line_number":204,"context_line":"        return self._hostops.get_host_ip_addr()"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def get_rdp_console(self, instance):"},{"line_number":207,"context_line":"        return self._rdpconsoleops.get_rdp_console(instance)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2FNEk%3D","line":206,"in_reply_to":"AAAAUH%2F%2FNI8%3D","updated":"2014-01-16 12:36:52.000000000","message":"Done","commit_id":"0e7f4235d1d8a0d8684aa58b165cabb68184e634"}],"nova/virt/hyperv/rdpconsoleops.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"75dd497ab4470c3cffeec083fdfaf1d2f31f1616","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 Cloudbase Solutions Srl"},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FM%2B0%3D","line":1,"updated":"2014-01-16 13:03:42.000000000","message":"you no longer need this \"vim: ...\"","commit_id":"dea8a78ae72bbb14eaf90d74fc3b587ebd5369d1"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"86a52e7a8eba077ea9069a601da13574353978a6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 Cloudbase Solutions Srl"},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FLjU%3D","line":1,"in_reply_to":"AAAAUH%2F%2FM%2B0%3D","updated":"2014-01-16 17:40:31.000000000","message":"Done","commit_id":"dea8a78ae72bbb14eaf90d74fc3b587ebd5369d1"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"75dd497ab4470c3cffeec083fdfaf1d2f31f1616","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        host \u003d self._hostops.get_host_ip_addr()"},{"line_number":35,"context_line":"        port \u003d self._rdpconsoleutils.get_rdp_console_port()"},{"line_number":36,"context_line":"        vm_id \u003d self._vmutils.get_vm_id(instance[\u0027name\u0027])"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        return {\u0027host\u0027: host,"},{"line_number":39,"context_line":"                \u0027port\u0027: port,"},{"line_number":40,"context_line":"                \u0027internal_access_path\u0027: vm_id}"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FM%2Bc%3D","line":37,"updated":"2014-01-16 13:03:42.000000000","message":"It may be worth while longging the port details - may help debugging","commit_id":"dea8a78ae72bbb14eaf90d74fc3b587ebd5369d1"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"86a52e7a8eba077ea9069a601da13574353978a6","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        host \u003d self._hostops.get_host_ip_addr()"},{"line_number":35,"context_line":"        port \u003d self._rdpconsoleutils.get_rdp_console_port()"},{"line_number":36,"context_line":"        vm_id \u003d self._vmutils.get_vm_id(instance[\u0027name\u0027])"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        return {\u0027host\u0027: host,"},{"line_number":39,"context_line":"                \u0027port\u0027: port,"},{"line_number":40,"context_line":"                \u0027internal_access_path\u0027: vm_id}"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FLjQ%3D","line":37,"in_reply_to":"AAAAUH%2F%2FM%2Bc%3D","updated":"2014-01-16 17:40:31.000000000","message":"Done","commit_id":"dea8a78ae72bbb14eaf90d74fc3b587ebd5369d1"}],"nova/virt/hyperv/rdpconsoleutils.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"75dd497ab4470c3cffeec083fdfaf1d2f31f1616","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 Cloudbase Solutions Srl"},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FM%2BU%3D","line":1,"updated":"2014-01-16 13:03:42.000000000","message":"ditto","commit_id":"dea8a78ae72bbb14eaf90d74fc3b587ebd5369d1"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"86a52e7a8eba077ea9069a601da13574353978a6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 Cloudbase Solutions Srl"},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FLf4%3D","line":1,"in_reply_to":"AAAAUH%2F%2FM%2BU%3D","updated":"2014-01-16 17:40:31.000000000","message":"Done","commit_id":"dea8a78ae72bbb14eaf90d74fc3b587ebd5369d1"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"75dd497ab4470c3cffeec083fdfaf1d2f31f1616","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class RDPConsoleUtils(object):"},{"line_number":20,"context_line":"    _DEFAULT_HYPERV_RDP_PORT \u003d 2179"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def get_rdp_console_port(self):"},{"line_number":23,"context_line":"        return self._DEFAULT_HYPERV_RDP_PORT"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FM%2BM%3D","line":20,"updated":"2014-01-16 13:03:42.000000000","message":"what if the port changes? it may be worthwhile having a configuration variable for this.","commit_id":"dea8a78ae72bbb14eaf90d74fc3b587ebd5369d1"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"86a52e7a8eba077ea9069a601da13574353978a6","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class RDPConsoleUtils(object):"},{"line_number":20,"context_line":"    _DEFAULT_HYPERV_RDP_PORT \u003d 2179"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def get_rdp_console_port(self):"},{"line_number":23,"context_line":"        return self._DEFAULT_HYPERV_RDP_PORT"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FLf8%3D","line":20,"in_reply_to":"AAAAUH%2F%2FM%2BM%3D","updated":"2014-01-16 17:40:31.000000000","message":"The V2 class (see rdpconsoleutilsv2.py in this patchset) gets the port number dynamically, so Hyper-V 2012 and above already support it.  \n\nThis V1 class is only for versions of Hyper-V released before 2012 which do not support the V2 APIs. Adding an option for this scenario is IMO not necessary, considering the limited audience and the fact that there\u0027s no practical reason for changing the default port number.","commit_id":"dea8a78ae72bbb14eaf90d74fc3b587ebd5369d1"}],"nova/virt/hyperv/vmutils.py":[{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"c57eb498cddc28f5fb61889ace3c67795c827a35","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def get_vm_id(self, vm_name):"},{"line_number":156,"context_line":"        vm \u003d self._lookup_vm_check(vm_name)"},{"line_number":157,"context_line":"        return vm.Name"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _get_vm_setting_data(self, vm):"},{"line_number":160,"context_line":"        vmsettings \u003d vm.associators("}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAUX%2F%2FtCE%3D","line":157,"updated":"2014-02-11 11:08:43.000000000","message":"Hmm, that looks strange - get_vm_id() returning vm.Name ?\n\nJust wanted to point it out in case there was some mistake, but I assume this is intentional","commit_id":"4ff1773de7c469c2feabaa8b14b42c387c0d7fe9"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"fa288c890f06e753a7f896030e4d7b5fed74b1f7","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def get_vm_id(self, vm_name):"},{"line_number":156,"context_line":"        vm \u003d self._lookup_vm_check(vm_name)"},{"line_number":157,"context_line":"        return vm.Name"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _get_vm_setting_data(self, vm):"},{"line_number":160,"context_line":"        vmsettings \u003d vm.associators("}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAUX%2F%2Fs20%3D","line":157,"in_reply_to":"AAAAUX%2F%2FtCE%3D","updated":"2014-02-11 11:34:07.000000000","message":"In the CIM based WMI API, the class Msvm_ComputerSystem inherits \"Name\" from CIM_System and sets it to the unique GUID of the VM. The actual name is provided by the \"ElementName\" property (yes, this IS confusing :-)).\n\nThanks for noticing this detail, better providing one extra explanation than a lapsus induced bug! :-)\n\nRef:\nhttp://msdn.microsoft.com/en-us/library/hh850116(v\u003dvs.85).aspx","commit_id":"4ff1773de7c469c2feabaa8b14b42c387c0d7fe9"}]}
