)]}'
{"nova/tests/unit/virt/hyperv/test_vmops.py":[{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"f90a5ae14cf520abcf73ec8acafc95197069ce31","unresolved":false,"context_lines":[{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    @mock.patch(\u0027nova.virt.hyperv.vmutilsv2.VMUtilsV2.enable_secure_boot\u0027)"},{"line_number":371,"context_line":"    @mock.patch(\u0027nova.virt.hyperv.vmops.VMOps._get_secure_boot_config\u0027)"},{"line_number":372,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027requires_vtpm\u0027)"},{"line_number":373,"context_line":"    @mock.patch(\u0027nova.virt.hyperv.volumeops.VolumeOps\u0027"},{"line_number":374,"context_line":"                \u0027.attach_volumes\u0027)"},{"line_number":375,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_attach_drive\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_077f6be0","line":372,"updated":"2015-09-01 12:14:46.000000000","message":"Why not use mock.patch like above?","commit_id":"06287bcc77a7c9f3a74e789aa1eadea762e7b11d"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"925ee47d5ab26874f1a749ea87e6cfabebf37234","unresolved":false,"context_lines":[{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    @mock.patch(\u0027nova.virt.hyperv.vmutilsv2.VMUtilsV2.enable_secure_boot\u0027)"},{"line_number":371,"context_line":"    @mock.patch(\u0027nova.virt.hyperv.vmops.VMOps._get_secure_boot_config\u0027)"},{"line_number":372,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027requires_vtpm\u0027)"},{"line_number":373,"context_line":"    @mock.patch(\u0027nova.virt.hyperv.volumeops.VolumeOps\u0027"},{"line_number":374,"context_line":"                \u0027.attach_volumes\u0027)"},{"line_number":375,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_attach_drive\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_a2978439","line":372,"in_reply_to":"da20952f_077f6be0","updated":"2015-09-01 14:47:30.000000000","message":"Done","commit_id":"06287bcc77a7c9f3a74e789aa1eadea762e7b11d"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"eb115a693d09ca2d38837c2038609388be2ec5da","unresolved":false,"context_lines":[{"line_number":495,"context_line":"                                   enable_instance_metrics\u003dFalse,"},{"line_number":496,"context_line":"                                   vm_gen\u003dconstants.VM_GEN_2,"},{"line_number":497,"context_line":"                                   config_sec_boot\u003dmock.sentinel.CONFIG,"},{"line_number":498,"context_line":"                                   requires_vtpm\u003dFalse)"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"    def test_attach_drive_vm_to_scsi(self):"},{"line_number":501,"context_line":"        self._vmops._attach_drive("}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_d97a1888","line":498,"updated":"2015-09-04 10:18:10.000000000","message":"seems requires_vtpm is always False.","commit_id":"a6e7fdb710bae9493a45d7a1b13b12e16f007581"}],"nova/tests/unit/virt/hyperv/test_vmutils.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"13c3c3c2892874281f2c2a65a8c25dfbe634bfa2","unresolved":false,"context_lines":[{"line_number":372,"context_line":"                               \u0027_add_virt_resource\u0027) as mock_add_virt_res:"},{"line_number":373,"context_line":"            self._vmutils.add_vtpm(self._FAKE_VM_NAME)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"            mock_add_virt_res.assert_called_with(mock_vtpm, self._FAKE_VM_PATH)"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    @mock.patch.object(vmutils.VMUtils, \u0027_get_new_resource_setting_data\u0027)"},{"line_number":378,"context_line":"    def test_attach_volume_to_controller(self, mock_get_new_rsd):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_c85d4548","line":375,"updated":"2015-08-31 08:48:07.000000000","message":"assert_called_once_with","commit_id":"639064a0430c15cce2e144adb702522243643924"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"bfbdb175d049acef9f0510f2cf28c8a44ac7128d","unresolved":false,"context_lines":[{"line_number":372,"context_line":"                               \u0027_add_virt_resource\u0027) as mock_add_virt_res:"},{"line_number":373,"context_line":"            self._vmutils.add_vtpm(self._FAKE_VM_NAME)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"            mock_add_virt_res.assert_called_with(mock_vtpm, self._FAKE_VM_PATH)"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    @mock.patch.object(vmutils.VMUtils, \u0027_get_new_resource_setting_data\u0027)"},{"line_number":378,"context_line":"    def test_attach_volume_to_controller(self, mock_get_new_rsd):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_c2387840","line":375,"in_reply_to":"da20952f_c85d4548","updated":"2015-09-01 14:49:17.000000000","message":"Done","commit_id":"639064a0430c15cce2e144adb702522243643924"}],"nova/virt/hyperv/migrationops.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"eb115a693d09ca2d38837c2038609388be2ec5da","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        self._vmops.create_instance(instance, network_info, block_device_info,"},{"line_number":292,"context_line":"                                    root_vhd_path, eph_vhd_path, vm_gen,"},{"line_number":293,"context_line":"                                    image_meta)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        self._check_and_attach_config_drive(instance, vm_gen)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        if power_on:"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_791d0c61","side":"PARENT","line":294,"updated":"2015-09-04 10:18:10.000000000","message":"unrelated change.","commit_id":"2f46fe48340ac9412c72e83e7bab643e7ff8103a"}],"nova/virt/hyperv/vmops.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"57cb1fd9b04261043d2bbd589632252869aea1c3","unresolved":false,"context_lines":[{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def requires_vtpm(self, instance, image_meta, vm_gen):"},{"line_number":297,"context_line":"        requires_vtpm \u003d False"},{"line_number":298,"context_line":"        flavor \u003d instance.get_flavor()"},{"line_number":299,"context_line":"        flavor_extra_specs \u003d flavor[\u0027extra_specs\u0027]"},{"line_number":300,"context_line":"        flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":301,"context_line":"            constants.FLAVOR_SPEC_TPM, None)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_7f8ba3c3","line":298,"updated":"2015-08-30 12:04:17.000000000","message":"please use instance.flavor","commit_id":"826e65121f93608c89e6a4922a6f4340f2431eb5"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"2dc54a29a91e4cd25aeb59b095b9a03a0ea5b473","unresolved":false,"context_lines":[{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def requires_vtpm(self, instance, image_meta, vm_gen):"},{"line_number":297,"context_line":"        requires_vtpm \u003d False"},{"line_number":298,"context_line":"        flavor \u003d instance.get_flavor()"},{"line_number":299,"context_line":"        flavor_extra_specs \u003d flavor[\u0027extra_specs\u0027]"},{"line_number":300,"context_line":"        flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":301,"context_line":"            constants.FLAVOR_SPEC_TPM, None)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_2ea5fa45","line":298,"in_reply_to":"da20952f_7f8ba3c3","updated":"2015-08-30 15:32:08.000000000","message":"Done","commit_id":"826e65121f93608c89e6a4922a6f4340f2431eb5"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"57cb1fd9b04261043d2bbd589632252869aea1c3","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    def requires_vtpm(self, instance, image_meta, vm_gen):"},{"line_number":297,"context_line":"        requires_vtpm \u003d False"},{"line_number":298,"context_line":"        flavor \u003d instance.get_flavor()"},{"line_number":299,"context_line":"        flavor_extra_specs \u003d flavor[\u0027extra_specs\u0027]"},{"line_number":300,"context_line":"        flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":301,"context_line":"            constants.FLAVOR_SPEC_TPM, None)"},{"line_number":302,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_9f88f7c6","line":299,"updated":"2015-08-30 12:04:17.000000000","message":"here flavor is an object so you can and should use flavor.extra_specs","commit_id":"826e65121f93608c89e6a4922a6f4340f2431eb5"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"2dc54a29a91e4cd25aeb59b095b9a03a0ea5b473","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    def requires_vtpm(self, instance, image_meta, vm_gen):"},{"line_number":297,"context_line":"        requires_vtpm \u003d False"},{"line_number":298,"context_line":"        flavor \u003d instance.get_flavor()"},{"line_number":299,"context_line":"        flavor_extra_specs \u003d flavor[\u0027extra_specs\u0027]"},{"line_number":300,"context_line":"        flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":301,"context_line":"            constants.FLAVOR_SPEC_TPM, None)"},{"line_number":302,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_8e6a06ec","line":299,"in_reply_to":"da20952f_9f88f7c6","updated":"2015-08-30 15:32:08.000000000","message":"Done","commit_id":"826e65121f93608c89e6a4922a6f4340f2431eb5"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"13c3c3c2892874281f2c2a65a8c25dfbe634bfa2","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            self.create_instance(instance, network_info, block_device_info,"},{"line_number":279,"context_line":"                                 root_vhd_path, eph_vhd_path, vm_gen)"},{"line_number":280,"context_line":"            if self.requires_vtpm(instance, image_meta, vm_gen):"},{"line_number":281,"context_line":"                self._vmutils.add_vtpm(instance_name)"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"            if configdrive.required_by(instance):"},{"line_number":284,"context_line":"                configdrive_path \u003d self._create_config_drive(instance,"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_fc224ea2","line":281,"updated":"2015-08-31 08:48:07.000000000","message":"I\u0027d move this to create_instance method instead. This is because create_instance is used by other modules, like migrationops, which would mean that if a vm is migrated, it will be migrated without a vTPM.","commit_id":"639064a0430c15cce2e144adb702522243643924"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"bfbdb175d049acef9f0510f2cf28c8a44ac7128d","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            self.create_instance(instance, network_info, block_device_info,"},{"line_number":279,"context_line":"                                 root_vhd_path, eph_vhd_path, vm_gen)"},{"line_number":280,"context_line":"            if self.requires_vtpm(instance, image_meta, vm_gen):"},{"line_number":281,"context_line":"                self._vmutils.add_vtpm(instance_name)"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"            if configdrive.required_by(instance):"},{"line_number":284,"context_line":"                configdrive_path \u003d self._create_config_drive(instance,"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_823b6038","line":281,"in_reply_to":"da20952f_fc224ea2","updated":"2015-09-01 14:49:17.000000000","message":"Done","commit_id":"639064a0430c15cce2e144adb702522243643924"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"f90a5ae14cf520abcf73ec8acafc95197069ce31","unresolved":false,"context_lines":[{"line_number":370,"context_line":"            self._vmutils.enable_vm_metrics_collection(instance_name)"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        self._create_vm_com_port_pipe(instance)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        config_secure_boot \u003d self._get_secure_boot_config(instance, image_meta,"},{"line_number":375,"context_line":"                                                          vm_gen)"},{"line_number":376,"context_line":"        if config_secure_boot:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_1ae4a2a9","side":"PARENT","line":373,"updated":"2015-09-01 12:14:46.000000000","message":"ditto","commit_id":"70e9dab957354cff4fd13e4df7a21d8649cada6a"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"925ee47d5ab26874f1a749ea87e6cfabebf37234","unresolved":false,"context_lines":[{"line_number":370,"context_line":"            self._vmutils.enable_vm_metrics_collection(instance_name)"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        self._create_vm_com_port_pipe(instance)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        config_secure_boot \u003d self._get_secure_boot_config(instance, image_meta,"},{"line_number":375,"context_line":"                                                          vm_gen)"},{"line_number":376,"context_line":"        if config_secure_boot:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_02baf0c0","side":"PARENT","line":373,"in_reply_to":"da20952f_1ae4a2a9","updated":"2015-09-01 14:47:30.000000000","message":"Done","commit_id":"70e9dab957354cff4fd13e4df7a21d8649cada6a"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"f90a5ae14cf520abcf73ec8acafc95197069ce31","unresolved":false,"context_lines":[{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def create_instance(self, instance, network_info, block_device_info,"},{"line_number":329,"context_line":"                        root_vhd_path, eph_vhd_path, vm_gen, image_meta):"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"        instance_name \u003d instance.name"},{"line_number":332,"context_line":"        instance_path \u003d os.path.join(CONF.instances_path, instance_name)"},{"line_number":333,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_1a4d82c3","line":330,"updated":"2015-09-01 12:14:46.000000000","message":"unrelated change","commit_id":"06287bcc77a7c9f3a74e789aa1eadea762e7b11d"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"925ee47d5ab26874f1a749ea87e6cfabebf37234","unresolved":false,"context_lines":[{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def create_instance(self, instance, network_info, block_device_info,"},{"line_number":329,"context_line":"                        root_vhd_path, eph_vhd_path, vm_gen, image_meta):"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"        instance_name \u003d instance.name"},{"line_number":332,"context_line":"        instance_path \u003d os.path.join(CONF.instances_path, instance_name)"},{"line_number":333,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_22acd48b","line":330,"in_reply_to":"da20952f_1a4d82c3","updated":"2015-09-01 14:47:30.000000000","message":"Done","commit_id":"06287bcc77a7c9f3a74e789aa1eadea762e7b11d"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"eb115a693d09ca2d38837c2038609388be2ec5da","unresolved":false,"context_lines":[{"line_number":394,"context_line":"        elif image_prop_secure_boot \u003d\u003d constants.REQUIRED:"},{"line_number":395,"context_line":"            requires_vtpm \u003d True"},{"line_number":396,"context_line":"        if vm_gen !\u003d constants.VM_GEN_2 and requires_vtpm:"},{"line_number":397,"context_line":"            raise vmutils.HyperVException(_(\u0027VMTPM requires gen 2 VM\u0027))"},{"line_number":398,"context_line":"        return requires_vtpm"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    def _attach_drive(self, instance_name, path, drive_addr, ctrl_disk_addr,"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_f91a7c6e","line":397,"updated":"2015-09-04 10:18:10.000000000","message":"VTPM.","commit_id":"a6e7fdb710bae9493a45d7a1b13b12e16f007581"}],"nova/virt/hyperv/vmutils.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"13c3c3c2892874281f2c2a65a8c25dfbe634bfa2","unresolved":false,"context_lines":[{"line_number":436,"context_line":"        scsicontrl.VirtualSystemIdentifiers \u003d [\u0027{\u0027 + str(uuid.uuid4()) + \u0027}\u0027]"},{"line_number":437,"context_line":"        self._add_virt_resource(scsicontrl, vm.path_())"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    def add_vtpm(self, vm_name):"},{"line_number":440,"context_line":"        vm \u003d self._lookup_vm_check(vm_name)"},{"line_number":441,"context_line":"        vtpm \u003d self._get_new_setting_data(self._TPM_SETTING_DATA)"},{"line_number":442,"context_line":"        self._add_virt_resource(vtpm, vm.path_())"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_dcf0aaff","line":439,"updated":"2015-08-31 08:48:07.000000000","message":"hm, since vTPMs can be added for the new Hyper-V Server, it would make sense to have this in vmutils10, while only raising a NotImplementedError in vmutils.","commit_id":"639064a0430c15cce2e144adb702522243643924"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"bfbdb175d049acef9f0510f2cf28c8a44ac7128d","unresolved":false,"context_lines":[{"line_number":436,"context_line":"        scsicontrl.VirtualSystemIdentifiers \u003d [\u0027{\u0027 + str(uuid.uuid4()) + \u0027}\u0027]"},{"line_number":437,"context_line":"        self._add_virt_resource(scsicontrl, vm.path_())"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    def add_vtpm(self, vm_name):"},{"line_number":440,"context_line":"        vm \u003d self._lookup_vm_check(vm_name)"},{"line_number":441,"context_line":"        vtpm \u003d self._get_new_setting_data(self._TPM_SETTING_DATA)"},{"line_number":442,"context_line":"        self._add_virt_resource(vtpm, vm.path_())"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_e2101cae","line":439,"in_reply_to":"da20952f_dcf0aaff","updated":"2015-09-01 14:49:17.000000000","message":"Done","commit_id":"639064a0430c15cce2e144adb702522243643924"}]}
