)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35c2af8c4ed147f3064e2603e26b046fbb954e78","unresolved":false,"context_lines":[{"line_number":11,"context_line":"guests as well with the upcoming release. This blueprint"},{"line_number":12,"context_line":"implements UEFI SecureBoot for Linux guests."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DocImpact"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Implements: blueprint hyper-v-uefi-secureboot"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":41,"id":"1aa78d24_58025e70","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":9},"updated":"2016-07-05 20:03:24.000000000","message":"What\u0027s the doc impact? Is it something in the manuals? Because this tag will open a nova bug for docs, but what would someone do for addressing that bug? Is this something we\u0027d document in the nova developers docs? Or something with a release note? If it\u0027s just a release note, drop this tag in the commit message and add the release note for the feature with this change.","commit_id":"cec369f5b351390ae2bd1011dd6afbcdbf6941a2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f9b2c1c0eec5f06093cfb88f3d83d5d26249d0bd","unresolved":false,"context_lines":[{"line_number":11,"context_line":"guests as well with the upcoming release. This blueprint"},{"line_number":12,"context_line":"implements UEFI SecureBoot for Linux guests."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DocImpact"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Co-Authored-By: Claudiu Belu \u003ccbelu@cloudbasesolutions.com\u003e"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":42,"id":"1aa78d24_49425269","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":9},"updated":"2016-07-06 21:26:26.000000000","message":"Again, is there something that\u0027s specifically needed to update with this because it\u0027s going to generate a nova bug. Are there docs outside of nova that you know need to be updated as a result of this change? Because if not, remove this tag so we don\u0027t get a bug.\n\nI\u0027m thinking these docs should be updated though:\n\nhttp://docs.openstack.org/admin-guide/compute-flavors.html#extra-specs\n\nand:\n\nhttp://docs.openstack.org/cli-reference/glance.html#image-service-property-keys\n\nPlease point those out specifically for the DocImpact tag so the nova bug has the details on what docs need updating for this.","commit_id":"c493519fe65f8b1da500cbe99f0bce493a527a15"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"0fb8215c8a0c84fbf57be109928e3611784efb84","unresolved":false,"context_lines":[{"line_number":11,"context_line":"guests as well with the upcoming release. This blueprint"},{"line_number":12,"context_line":"implements UEFI SecureBoot for Linux guests."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DocImpact"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Co-Authored-By: Claudiu Belu \u003ccbelu@cloudbasesolutions.com\u003e"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":42,"id":"1aa78d24_2be1ac2d","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":9},"in_reply_to":"1aa78d24_49425269","updated":"2016-07-07 06:19:09.000000000","message":"Done","commit_id":"c493519fe65f8b1da500cbe99f0bce493a527a15"}],"nova/tests/unit/virt/hyperv/test_vmops.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        mock_create_root_vhd.return_value \u003d fake_root_path"},{"line_number":291,"context_line":"        mock_configdrive_required.return_value \u003d configdrive_required"},{"line_number":292,"context_line":"        mock_create_instance.side_effect \u003d fail"},{"line_number":293,"context_line":"        self._vmops.requires_uefi_config \u003d mock.MagicMock()"},{"line_number":294,"context_line":"        if exists:"},{"line_number":295,"context_line":"            self.assertRaises(exception.InstanceExists, self._vmops.spawn,"},{"line_number":296,"context_line":"                              self.context, mock_instance, mock_image_meta,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_944d1f40","line":293,"updated":"2015-08-06 14:36:28.000000000","message":"you mock this the same way any other method is mocked. Check L271 and above.","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        mock_create_root_vhd.return_value \u003d fake_root_path"},{"line_number":291,"context_line":"        mock_configdrive_required.return_value \u003d configdrive_required"},{"line_number":292,"context_line":"        mock_create_instance.side_effect \u003d fail"},{"line_number":293,"context_line":"        self._vmops.requires_uefi_config \u003d mock.MagicMock()"},{"line_number":294,"context_line":"        if exists:"},{"line_number":295,"context_line":"            self.assertRaises(exception.InstanceExists, self._vmops.spawn,"},{"line_number":296,"context_line":"                              self.context, mock_instance, mock_image_meta,"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_67fbc779","line":293,"in_reply_to":"1a4dcd0f_944d1f40","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":923,"context_line":"        else:"},{"line_number":924,"context_line":"            expected_current_worker \u003d fake_existing_worker"},{"line_number":925,"context_line":"        self.assertEqual(expected_current_worker,"},{"line_number":926,"context_line":"                         self._vmops._vm_log_writers[fake_instance_uuid])"},{"line_number":927,"context_line":""},{"line_number":928,"context_line":"    def test_log_vm_serial_output_unexisting_worker(self):"},{"line_number":929,"context_line":"        self._test_log_vm_serial_output()"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_d455e7c1","line":926,"updated":"2015-08-06 14:36:28.000000000","message":"unrelated change","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":923,"context_line":"        else:"},{"line_number":924,"context_line":"            expected_current_worker \u003d fake_existing_worker"},{"line_number":925,"context_line":"        self.assertEqual(expected_current_worker,"},{"line_number":926,"context_line":"                         self._vmops._vm_log_writers[fake_instance_uuid])"},{"line_number":927,"context_line":""},{"line_number":928,"context_line":"    def test_log_vm_serial_output_unexisting_worker(self):"},{"line_number":929,"context_line":"        self._test_log_vm_serial_output()"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_27f14f95","line":926,"in_reply_to":"1a4dcd0f_d455e7c1","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":1102,"context_line":"            self.assertTrue(result)"},{"line_number":1103,"context_line":"        elif flavor_secure_boot \u003d\u003d constants.IMAGE_PROP_SECURE_BOOT_DISABLED:"},{"line_number":1104,"context_line":"            self.assertFalse(result)"},{"line_number":1105,"context_line":"        else:"},{"line_number":1106,"context_line":"            if image_secure_boot \u003d\u003d constants.IMAGE_PROP_SECURE_BOOT_REQUIRED:"},{"line_number":1107,"context_line":"                self.assertTrue(result)"},{"line_number":1108,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_14d58f1a","line":1105,"updated":"2015-08-06 14:36:28.000000000","message":"elif","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":1102,"context_line":"            self.assertTrue(result)"},{"line_number":1103,"context_line":"        elif flavor_secure_boot \u003d\u003d constants.IMAGE_PROP_SECURE_BOOT_DISABLED:"},{"line_number":1104,"context_line":"            self.assertFalse(result)"},{"line_number":1105,"context_line":"        else:"},{"line_number":1106,"context_line":"            if image_secure_boot \u003d\u003d constants.IMAGE_PROP_SECURE_BOOT_REQUIRED:"},{"line_number":1107,"context_line":"                self.assertTrue(result)"},{"line_number":1108,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_0731ab59","line":1105,"in_reply_to":"1a4dcd0f_14d58f1a","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c179b50044f3934f43c1cc1ffc0755b88d745da2","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def setUp(self):"},{"line_number":52,"context_line":"        super(VMOpsTestCase, self).setUp()"},{"line_number":53,"context_line":"        self.context \u003d \u0027fake-context\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self._vmops \u003d vmops.VMOps()"},{"line_number":56,"context_line":"        self._vmops._vmutils \u003d mock.MagicMock()"},{"line_number":57,"context_line":"        self._vmops._vhdutils \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_b0f2336e","side":"PARENT","line":54,"updated":"2015-08-24 11:44:42.000000000","message":"unecessary change.","commit_id":"f42f91cae216f59374029a3f78f97ac3a6862326"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"e07ec233946b3dcbcb15388aeb44894288f7cf62","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def setUp(self):"},{"line_number":52,"context_line":"        super(VMOpsTestCase, self).setUp()"},{"line_number":53,"context_line":"        self.context \u003d \u0027fake-context\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self._vmops \u003d vmops.VMOps()"},{"line_number":56,"context_line":"        self._vmops._vmutils \u003d mock.MagicMock()"},{"line_number":57,"context_line":"        self._vmops._vhdutils \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_6207e381","side":"PARENT","line":54,"in_reply_to":"fa1b9901_b0f2336e","updated":"2015-08-24 15:25:10.000000000","message":"Done","commit_id":"f42f91cae216f59374029a3f78f97ac3a6862326"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"47fde5ad7797202b9d3693c29ce4c4b71b630733","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        mock_configdrive_required.return_value \u003d configdrive_required"},{"line_number":294,"context_line":"        mock_create_instance.side_effect \u003d fail"},{"line_number":295,"context_line":"        mock_get_secure_boot_config.return_value \u003d config_secure_boot"},{"line_number":296,"context_line":"        if fake_vm_gen !\u003d self.FAKE_VM_GEN2 and config_secure_boot is not None:"},{"line_number":297,"context_line":"            self.assertRaises(vmutils.HyperVException, self._vmops.spawn,"},{"line_number":298,"context_line":"                              self.context, mock_instance, mock_image_meta,"},{"line_number":299,"context_line":"                              [mock.sentinel.FILE], mock.sentinel.PASSWORD,"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_0e1ae66e","line":296,"updated":"2015-08-24 10:20:48.000000000","message":"There is no need to define this here, you can just use constants.VM_GEN2","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"e07ec233946b3dcbcb15388aeb44894288f7cf62","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        mock_configdrive_required.return_value \u003d configdrive_required"},{"line_number":294,"context_line":"        mock_create_instance.side_effect \u003d fail"},{"line_number":295,"context_line":"        mock_get_secure_boot_config.return_value \u003d config_secure_boot"},{"line_number":296,"context_line":"        if fake_vm_gen !\u003d self.FAKE_VM_GEN2 and config_secure_boot is not None:"},{"line_number":297,"context_line":"            self.assertRaises(vmutils.HyperVException, self._vmops.spawn,"},{"line_number":298,"context_line":"                              self.context, mock_instance, mock_image_meta,"},{"line_number":299,"context_line":"                              [mock.sentinel.FILE], mock.sentinel.PASSWORD,"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_c2f82f7f","line":296,"in_reply_to":"fa1b9901_0e1ae66e","updated":"2015-08-24 15:25:10.000000000","message":"Done","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"47fde5ad7797202b9d3693c29ce4c4b71b630733","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        mock_create_instance.side_effect \u003d fail"},{"line_number":295,"context_line":"        mock_get_secure_boot_config.return_value \u003d config_secure_boot"},{"line_number":296,"context_line":"        if fake_vm_gen !\u003d self.FAKE_VM_GEN2 and config_secure_boot is not None:"},{"line_number":297,"context_line":"            self.assertRaises(vmutils.HyperVException, self._vmops.spawn,"},{"line_number":298,"context_line":"                              self.context, mock_instance, mock_image_meta,"},{"line_number":299,"context_line":"                              [mock.sentinel.FILE], mock.sentinel.PASSWORD,"},{"line_number":300,"context_line":"                              mock.sentinel.INFO, mock.sentinel.DEV_INFO)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_24ca6950","line":297,"updated":"2015-08-24 10:20:48.000000000","message":"You added this assertion here, but this case is not tested anywhere.","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"e07ec233946b3dcbcb15388aeb44894288f7cf62","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        mock_create_instance.side_effect \u003d fail"},{"line_number":295,"context_line":"        mock_get_secure_boot_config.return_value \u003d config_secure_boot"},{"line_number":296,"context_line":"        if fake_vm_gen !\u003d self.FAKE_VM_GEN2 and config_secure_boot is not None:"},{"line_number":297,"context_line":"            self.assertRaises(vmutils.HyperVException, self._vmops.spawn,"},{"line_number":298,"context_line":"                              self.context, mock_instance, mock_image_meta,"},{"line_number":299,"context_line":"                              [mock.sentinel.FILE], mock.sentinel.PASSWORD,"},{"line_number":300,"context_line":"                              mock.sentinel.INFO, mock.sentinel.DEV_INFO)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_a2edfbb8","line":297,"in_reply_to":"fa1b9901_24ca6950","updated":"2015-08-24 15:25:10.000000000","message":"Done","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def setUp(self):"},{"line_number":52,"context_line":"        super(VMOpsTestCase, self).setUp()"},{"line_number":53,"context_line":"        self.context \u003d \u0027fake-context\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self._vmops \u003d vmops.VMOps()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @mock.patch(\u0027nova.virt.hyperv.vmops.importutils.import_object\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_82f5a084","side":"PARENT","line":54,"updated":"2015-08-26 16:51:23.000000000","message":"unrelated change","commit_id":"85daad6e92a2cddabda2129ef23bc00dee32e691"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def setUp(self):"},{"line_number":52,"context_line":"        super(VMOpsTestCase, self).setUp()"},{"line_number":53,"context_line":"        self.context \u003d \u0027fake-context\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self._vmops \u003d vmops.VMOps()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @mock.patch(\u0027nova.virt.hyperv.vmops.importutils.import_object\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_5029a099","side":"PARENT","line":54,"in_reply_to":"da20952f_82f5a084","updated":"2015-09-01 11:45:40.000000000","message":"Done","commit_id":"85daad6e92a2cddabda2129ef23bc00dee32e691"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def test_spawn(self):"},{"line_number":339,"context_line":"        self._test_spawn(exists\u003dFalse, boot_from_volume\u003dFalse,"},{"line_number":340,"context_line":"                         configdrive_required\u003dTrue, fail\u003dNone, fake_vm_gen\u003d2,"},{"line_number":341,"context_line":"                         config_sec_boot\u003dNone)"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    def test_spawn_exception(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_e2c6dc15","line":340,"updated":"2015-08-26 16:51:23.000000000","message":"fake_vm_gen\u003dconstants.VM_GEN2","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def test_spawn(self):"},{"line_number":339,"context_line":"        self._test_spawn(exists\u003dFalse, boot_from_volume\u003dFalse,"},{"line_number":340,"context_line":"                         configdrive_required\u003dTrue, fail\u003dNone, fake_vm_gen\u003d2,"},{"line_number":341,"context_line":"                         config_sec_boot\u003dNone)"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    def test_spawn_exception(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_5000c001","line":340,"in_reply_to":"da20952f_e2c6dc15","updated":"2015-09-01 11:45:40.000000000","message":"Done","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    def test_spawn_exception(self):"},{"line_number":344,"context_line":"        self._test_spawn(exists\u003dFalse, boot_from_volume\u003dFalse,"},{"line_number":345,"context_line":"                         configdrive_required\u003dTrue, fail\u003dNone, fake_vm_gen\u003d1,"},{"line_number":346,"context_line":"                         config_sec_boot\u003d{"},{"line_number":347,"context_line":"                         \u0027secure_boot\u0027: True, \u0027os\u0027: mock.sentinel.os_type})"},{"line_number":348,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_a2d0e4ca","line":345,"updated":"2015-08-26 16:51:23.000000000","message":"fake_vm_gen\u003dconstants.VM_GEN1","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    def test_spawn_exception(self):"},{"line_number":344,"context_line":"        self._test_spawn(exists\u003dFalse, boot_from_volume\u003dFalse,"},{"line_number":345,"context_line":"                         configdrive_required\u003dTrue, fail\u003dNone, fake_vm_gen\u003d1,"},{"line_number":346,"context_line":"                         config_sec_boot\u003d{"},{"line_number":347,"context_line":"                         \u0027secure_boot\u0027: True, \u0027os\u0027: mock.sentinel.os_type})"},{"line_number":348,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_e4011506","line":345,"in_reply_to":"da20952f_a2d0e4ca","updated":"2015-09-01 11:45:40.000000000","message":"Done","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def test_spawn_instance_exists(self):"},{"line_number":350,"context_line":"        self._test_spawn(exists\u003dTrue, boot_from_volume\u003dFalse,"},{"line_number":351,"context_line":"                         configdrive_required\u003dTrue, fail\u003dNone, fake_vm_gen\u003d2,"},{"line_number":352,"context_line":"                         config_sec_boot\u003d{"},{"line_number":353,"context_line":"                         \u0027secure_boot\u0027: True, \u0027os\u0027: mock.sentinel.os_type})"},{"line_number":354,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_22e5b4a7","line":351,"updated":"2015-08-26 16:51:23.000000000","message":"ditto","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def test_spawn_instance_exists(self):"},{"line_number":350,"context_line":"        self._test_spawn(exists\u003dTrue, boot_from_volume\u003dFalse,"},{"line_number":351,"context_line":"                         configdrive_required\u003dTrue, fail\u003dNone, fake_vm_gen\u003d2,"},{"line_number":352,"context_line":"                         config_sec_boot\u003d{"},{"line_number":353,"context_line":"                         \u0027secure_boot\u0027: True, \u0027os\u0027: mock.sentinel.os_type})"},{"line_number":354,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_6416654d","line":351,"in_reply_to":"da20952f_22e5b4a7","updated":"2015-09-01 11:45:40.000000000","message":"Done","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":355,"context_line":"    def test_spawn_create_instance_exception(self):"},{"line_number":356,"context_line":"        self._test_spawn(exists\u003dFalse, boot_from_volume\u003dFalse,"},{"line_number":357,"context_line":"                         configdrive_required\u003dTrue,"},{"line_number":358,"context_line":"                         fail\u003dvmutils.HyperVException, fake_vm_gen\u003d2,"},{"line_number":359,"context_line":"                         config_sec_boot\u003d{"},{"line_number":360,"context_line":"                         \u0027secure_boot\u0027: True, \u0027os\u0027: mock.sentinel.os_type})"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_6202cc40","line":358,"updated":"2015-08-26 16:51:23.000000000","message":"ditto","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":355,"context_line":"    def test_spawn_create_instance_exception(self):"},{"line_number":356,"context_line":"        self._test_spawn(exists\u003dFalse, boot_from_volume\u003dFalse,"},{"line_number":357,"context_line":"                         configdrive_required\u003dTrue,"},{"line_number":358,"context_line":"                         fail\u003dvmutils.HyperVException, fake_vm_gen\u003d2,"},{"line_number":359,"context_line":"                         config_sec_boot\u003d{"},{"line_number":360,"context_line":"                         \u0027secure_boot\u0027: True, \u0027os\u0027: mock.sentinel.os_type})"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_84113954","line":358,"in_reply_to":"da20952f_6202cc40","updated":"2015-09-01 11:45:40.000000000","message":"Done","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    def test_spawn_not_required(self):"},{"line_number":363,"context_line":"        self._test_spawn(exists\u003dFalse, boot_from_volume\u003dFalse,"},{"line_number":364,"context_line":"                         configdrive_required\u003dFalse, fail\u003dNone, fake_vm_gen\u003d2,"},{"line_number":365,"context_line":"                         config_sec_boot\u003d{"},{"line_number":366,"context_line":"                         \u0027secure_boot\u0027: True, \u0027os\u0027: mock.sentinel.os_type})"},{"line_number":367,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_22fcd43d","line":364,"updated":"2015-08-26 16:51:23.000000000","message":"ditto","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    def test_spawn_not_required(self):"},{"line_number":363,"context_line":"        self._test_spawn(exists\u003dFalse, boot_from_volume\u003dFalse,"},{"line_number":364,"context_line":"                         configdrive_required\u003dFalse, fail\u003dNone, fake_vm_gen\u003d2,"},{"line_number":365,"context_line":"                         config_sec_boot\u003d{"},{"line_number":366,"context_line":"                         \u0027secure_boot\u0027: True, \u0027os\u0027: mock.sentinel.os_type})"},{"line_number":367,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_4417a144","line":364,"in_reply_to":"da20952f_22fcd43d","updated":"2015-09-01 11:45:40.000000000","message":"Done","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def test_spawn_root_in_block(self):"},{"line_number":369,"context_line":"        self._test_spawn(exists\u003dFalse, boot_from_volume\u003dTrue,"},{"line_number":370,"context_line":"                         configdrive_required\u003dFalse, fail\u003dNone, fake_vm_gen\u003d2,"},{"line_number":371,"context_line":"                         config_sec_boot\u003d{"},{"line_number":372,"context_line":"                         \u0027secure_boot\u0027: True, \u0027os\u0027: mock.sentinel.os_type})"},{"line_number":373,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_029af014","line":370,"updated":"2015-08-26 16:51:23.000000000","message":"ditto","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def test_spawn_root_in_block(self):"},{"line_number":369,"context_line":"        self._test_spawn(exists\u003dFalse, boot_from_volume\u003dTrue,"},{"line_number":370,"context_line":"                         configdrive_required\u003dFalse, fail\u003dNone, fake_vm_gen\u003d2,"},{"line_number":371,"context_line":"                         config_sec_boot\u003d{"},{"line_number":372,"context_line":"                         \u0027secure_boot\u0027: True, \u0027os\u0027: mock.sentinel.os_type})"},{"line_number":373,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_042c4997","line":370,"in_reply_to":"da20952f_029af014","updated":"2015-09-01 11:45:40.000000000","message":"Done","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":1116,"context_line":"        result \u003d self._vmops.get_os_type(mock_instance, mock_image_meta)"},{"line_number":1117,"context_line":"        self.assertEqual(expected_result, result)"},{"line_number":1118,"context_line":""},{"line_number":1119,"context_line":"    def _test_get_secure_boot(self, flavor_secure_boot,"},{"line_number":1120,"context_line":"                              image_prop_secure_boot):"},{"line_number":1121,"context_line":"        mock_instance \u003d mock.MagicMock()"},{"line_number":1122,"context_line":"        mock_instance.get_flavor.return_value \u003d {"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_2df125ce","line":1119,"updated":"2015-08-26 16:51:23.000000000","message":"misleading name, this tests get_secure_boot_config, not get_secure_boot","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":1116,"context_line":"        result \u003d self._vmops.get_os_type(mock_instance, mock_image_meta)"},{"line_number":1117,"context_line":"        self.assertEqual(expected_result, result)"},{"line_number":1118,"context_line":""},{"line_number":1119,"context_line":"    def _test_get_secure_boot(self, flavor_secure_boot,"},{"line_number":1120,"context_line":"                              image_prop_secure_boot):"},{"line_number":1121,"context_line":"        mock_instance \u003d mock.MagicMock()"},{"line_number":1122,"context_line":"        mock_instance.get_flavor.return_value \u003d {"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_e44fd568","line":1119,"in_reply_to":"da20952f_2df125ce","updated":"2015-09-01 11:45:40.000000000","message":"Done","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":1125,"context_line":"                           {\u0027os_secure_boot\u0027: image_prop_secure_boot}}"},{"line_number":1126,"context_line":""},{"line_number":1127,"context_line":"        if flavor_secure_boot in (\u0027required\u0027, \u0027disabled\u0027):"},{"line_number":1128,"context_line":"            return constants.SECURE_BOOT_REQUIRED in (flavor_secure_boot)"},{"line_number":1129,"context_line":"        elif image_prop_secure_boot \u003d\u003d \u0027disabled\u0027:"},{"line_number":1130,"context_line":"            return True"},{"line_number":1131,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_422c68ab","line":1128,"updated":"2015-08-26 16:51:23.000000000","message":"why do you return stuff, instead of testing / asserting?  also, flavor_secure_boot is not a list, you can just \u003d\u003d that.","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":1125,"context_line":"                           {\u0027os_secure_boot\u0027: image_prop_secure_boot}}"},{"line_number":1126,"context_line":""},{"line_number":1127,"context_line":"        if flavor_secure_boot in (\u0027required\u0027, \u0027disabled\u0027):"},{"line_number":1128,"context_line":"            return constants.SECURE_BOOT_REQUIRED in (flavor_secure_boot)"},{"line_number":1129,"context_line":"        elif image_prop_secure_boot \u003d\u003d \u0027disabled\u0027:"},{"line_number":1130,"context_line":"            return True"},{"line_number":1131,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_c4589133","line":1128,"in_reply_to":"da20952f_422c68ab","updated":"2015-09-01 11:45:40.000000000","message":"Done","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":1131,"context_line":"        else:"},{"line_number":1132,"context_line":"            return False"},{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"        expected_result \u003d {\u0027secure_boot\u0027: flavor_secure_boot, \u0027os\u0027: os}"},{"line_number":1135,"context_line":""},{"line_number":1136,"context_line":"        result \u003d self._vmops.get_secure_boot_config(mock_instance,"},{"line_number":1137,"context_line":"                                                    mock_image_meta)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_ad5775c9","line":1134,"updated":"2015-08-26 16:51:23.000000000","message":"there is no os. defined anywhere.","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":1131,"context_line":"        else:"},{"line_number":1132,"context_line":"            return False"},{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"        expected_result \u003d {\u0027secure_boot\u0027: flavor_secure_boot, \u0027os\u0027: os}"},{"line_number":1135,"context_line":""},{"line_number":1136,"context_line":"        result \u003d self._vmops.get_secure_boot_config(mock_instance,"},{"line_number":1137,"context_line":"                                                    mock_image_meta)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_64442549","line":1134,"in_reply_to":"da20952f_ad5775c9","updated":"2015-09-01 11:45:40.000000000","message":"Done","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":1164,"context_line":"                                     os_type):"},{"line_number":1165,"context_line":"        mock_get_secure_boot.return_value \u003d secure_boot_enabled"},{"line_number":1166,"context_line":"        mock_get_os_type.return_value \u003d os_type"},{"line_number":1167,"context_line":"        expected_result \u003d {\u0027secure_boot\u0027: True, \u0027os\u0027: os_type}"},{"line_number":1168,"context_line":"        if secure_boot_enabled is False:"},{"line_number":1169,"context_line":"            expected_result \u003d None"},{"line_number":1170,"context_line":"        if os_type is None:"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_2d904595","line":1167,"updated":"2015-08-26 16:51:23.000000000","message":"this could be moved before the assert, since the expected_result is only necessary of os_type !\u003d None","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":1164,"context_line":"                                     os_type):"},{"line_number":1165,"context_line":"        mock_get_secure_boot.return_value \u003d secure_boot_enabled"},{"line_number":1166,"context_line":"        mock_get_os_type.return_value \u003d os_type"},{"line_number":1167,"context_line":"        expected_result \u003d {\u0027secure_boot\u0027: True, \u0027os\u0027: os_type}"},{"line_number":1168,"context_line":"        if secure_boot_enabled is False:"},{"line_number":1169,"context_line":"            expected_result \u003d None"},{"line_number":1170,"context_line":"        if os_type is None:"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_043d298e","line":1167,"in_reply_to":"da20952f_2d904595","updated":"2015-09-01 11:45:40.000000000","message":"expect_result should be overwritten if secure_boot_enabled is False.","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"009da9af9d260d749bfa56c50f43ec3a51e95a95","unresolved":false,"context_lines":[{"line_number":451,"context_line":"        self._test_create_instance(fake_root_path\u003dNone,"},{"line_number":452,"context_line":"                                   fake_ephemeral_path\u003dNone,"},{"line_number":453,"context_line":"                                   enable_instance_metrics\u003dFalse,"},{"line_number":454,"context_line":"                                   vm_gen\u003dconstants.VM_GEN_2)"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def test_attach_drive_vm_to_scsi(self):"},{"line_number":457,"context_line":"        self._vmops._attach_drive("}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_76074118","side":"PARENT","line":454,"updated":"2015-12-03 12:01:31.000000000","message":"unnecessary change.","commit_id":"9c86f18c5cc45061144a307b0b9e806cc438e8a4"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6d87491c37dc31754537940552a27083ea64e7e8","unresolved":false,"context_lines":[{"line_number":451,"context_line":"        self._test_create_instance(fake_root_path\u003dNone,"},{"line_number":452,"context_line":"                                   fake_ephemeral_path\u003dNone,"},{"line_number":453,"context_line":"                                   enable_instance_metrics\u003dFalse,"},{"line_number":454,"context_line":"                                   vm_gen\u003dconstants.VM_GEN_2)"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def test_attach_drive_vm_to_scsi(self):"},{"line_number":457,"context_line":"        self._vmops._attach_drive("}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_8ffc0873","side":"PARENT","line":454,"in_reply_to":"9a8ffd7b_76074118","updated":"2015-12-03 13:00:33.000000000","message":"Done","commit_id":"9c86f18c5cc45061144a307b0b9e806cc438e8a4"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"009da9af9d260d749bfa56c50f43ec3a51e95a95","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                    mock_create_instance, mock_configdrive_required,"},{"line_number":280,"context_line":"                    mock_create_config_drive, mock_attach_config_drive,"},{"line_number":281,"context_line":"                    mock_power_on, mock_destroy, exists, boot_from_volume,"},{"line_number":282,"context_line":"                    configdrive_required, fail, fake_vm_gen):"},{"line_number":283,"context_line":"        mock_instance \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":284,"context_line":"        mock_image_meta \u003d mock.MagicMock()"},{"line_number":285,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_437a81be","line":282,"updated":"2015-12-03 12:01:31.000000000","message":"could be set as a constant.","commit_id":"0b62aaffd35c9b9ad3a875cacf154954eadba7d0"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6d87491c37dc31754537940552a27083ea64e7e8","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                    mock_create_instance, mock_configdrive_required,"},{"line_number":280,"context_line":"                    mock_create_config_drive, mock_attach_config_drive,"},{"line_number":281,"context_line":"                    mock_power_on, mock_destroy, exists, boot_from_volume,"},{"line_number":282,"context_line":"                    configdrive_required, fail, fake_vm_gen):"},{"line_number":283,"context_line":"        mock_instance \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":284,"context_line":"        mock_image_meta \u003d mock.MagicMock()"},{"line_number":285,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_2f707c3f","line":282,"in_reply_to":"9a8ffd7b_437a81be","updated":"2015-12-03 13:00:33.000000000","message":"Done","commit_id":"0b62aaffd35c9b9ad3a875cacf154954eadba7d0"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"009da9af9d260d749bfa56c50f43ec3a51e95a95","unresolved":false,"context_lines":[{"line_number":340,"context_line":"                         configdrive_required\u003dTrue, fail\u003dNone,"},{"line_number":341,"context_line":"                         fake_vm_gen\u003dconstants.VM_GEN_2)"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    def test_spawn_exception(self):"},{"line_number":344,"context_line":"        self._test_spawn(exists\u003dFalse, boot_from_volume\u003dFalse,"},{"line_number":345,"context_line":"                         configdrive_required\u003dTrue, fail\u003dNone,"},{"line_number":346,"context_line":"                         fake_vm_gen\u003dconstants.VM_GEN_1)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_e34ff58f","line":343,"updated":"2015-12-03 12:01:31.000000000","message":"i think a better name would be useful for this..","commit_id":"0b62aaffd35c9b9ad3a875cacf154954eadba7d0"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"009da9af9d260d749bfa56c50f43ec3a51e95a95","unresolved":false,"context_lines":[{"line_number":450,"context_line":"                                   fake_ephemeral_path\u003dfake_ephemeral_path,"},{"line_number":451,"context_line":"                                   enable_instance_metrics\u003dTrue)"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"    def test_create_instance_exception(self):"},{"line_number":454,"context_line":"        # Secure Boot requires Generation 2 VMs. If boot is required while the"},{"line_number":455,"context_line":"        # vm_gen is 1, exception is raised."},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_833949f4","line":453,"updated":"2015-12-03 12:01:31.000000000","message":"ditto.","commit_id":"0b62aaffd35c9b9ad3a875cacf154954eadba7d0"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6d87491c37dc31754537940552a27083ea64e7e8","unresolved":false,"context_lines":[{"line_number":450,"context_line":"                                   fake_ephemeral_path\u003dfake_ephemeral_path,"},{"line_number":451,"context_line":"                                   enable_instance_metrics\u003dTrue)"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"    def test_create_instance_exception(self):"},{"line_number":454,"context_line":"        # Secure Boot requires Generation 2 VMs. If boot is required while the"},{"line_number":455,"context_line":"        # vm_gen is 1, exception is raised."},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_6fcf6456","line":453,"in_reply_to":"9a8ffd7b_833949f4","updated":"2015-12-03 13:00:33.000000000","message":"Done","commit_id":"0b62aaffd35c9b9ad3a875cacf154954eadba7d0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f9b2c1c0eec5f06093cfb88f3d83d5d26249d0bd","unresolved":false,"context_lines":[{"line_number":595,"context_line":"                          image_meta)"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"    def _check_requires_secure_boot("},{"line_number":598,"context_line":"            self, flavor_secure_boot\u003dfields.SecureBoot.REQUIRED,"},{"line_number":599,"context_line":"            image_prop_secure_boot\u003dfields.SecureBoot.REQUIRED,"},{"line_number":600,"context_line":"            vm_gen\u003dconstants.VM_GEN_2, expected_exception\u003dTrue):"},{"line_number":601,"context_line":"        mock_instance \u003d mock.MagicMock()"},{"line_number":602,"context_line":"        mock_instance.flavor.extra_specs \u003d {"}],"source_content_type":"text/x-python","patch_set":42,"id":"1aa78d24_c47589fa","line":599,"range":{"start_line":598,"start_character":18,"end_line":599,"end_character":61},"updated":"2016-07-06 21:26:26.000000000","message":"Because we default these, we don\u0027t test that neither are specified, i.e. say I don\u0027t have extra_specs configured for this but my image property is set, and vice-versa. Could probably just test those with 2 more tests that pass None values for each case.","commit_id":"c493519fe65f8b1da500cbe99f0bce493a527a15"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"0fb8215c8a0c84fbf57be109928e3611784efb84","unresolved":false,"context_lines":[{"line_number":595,"context_line":"                          image_meta)"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"    def _check_requires_secure_boot("},{"line_number":598,"context_line":"            self, flavor_secure_boot\u003dfields.SecureBoot.REQUIRED,"},{"line_number":599,"context_line":"            image_prop_secure_boot\u003dfields.SecureBoot.REQUIRED,"},{"line_number":600,"context_line":"            vm_gen\u003dconstants.VM_GEN_2, expected_exception\u003dTrue):"},{"line_number":601,"context_line":"        mock_instance \u003d mock.MagicMock()"},{"line_number":602,"context_line":"        mock_instance.flavor.extra_specs \u003d {"}],"source_content_type":"text/x-python","patch_set":42,"id":"1aa78d24_2bb36c51","line":599,"range":{"start_line":598,"start_character":18,"end_line":599,"end_character":61},"in_reply_to":"1aa78d24_c47589fa","updated":"2016-07-07 06:19:09.000000000","message":"Done","commit_id":"c493519fe65f8b1da500cbe99f0bce493a527a15"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2286b9073b5a695aa345b5f4f55d9938b1b13d2f","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        self.context \u003d \u0027fake-context\u0027"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        self._vmops \u003d vmops.VMOps()"},{"line_number":65,"context_line":"        self._vmops._vmutils \u003d mock.MagicMock()"},{"line_number":66,"context_line":"        self._vmops._metricsutils \u003d mock.MagicMock()"},{"line_number":67,"context_line":"        self._vmops._vhdutils \u003d mock.MagicMock()"},{"line_number":68,"context_line":"        self._vmops._pathutils \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":43,"id":"1aa78d24_345a8df2","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":47},"updated":"2016-07-07 15:09:37.000000000","message":"Because of the failure pointed out with os-win in the previous patch set, I won\u0027t be happy with this until we\u0027re using a spec with the mock for vmutils from os-win. Then if you\u0027re passing things or calling methods that don\u0027t exist in the os-win that we\u0027re using from requirements.txt, the unit tests will blow up. We don\u0027t want to test the internals of os-win, but we need to test with the real interface.","commit_id":"cc205d75f3567ec8891ae20dc157024258eb3d56"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"fb61d677f369be595684e5f96d6f53d5334678e1","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        self.context \u003d \u0027fake-context\u0027"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        self._vmops \u003d vmops.VMOps()"},{"line_number":65,"context_line":"        self._vmops._vmutils \u003d mock.MagicMock()"},{"line_number":66,"context_line":"        self._vmops._metricsutils \u003d mock.MagicMock()"},{"line_number":67,"context_line":"        self._vmops._vhdutils \u003d mock.MagicMock()"},{"line_number":68,"context_line":"        self._vmops._pathutils \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":43,"id":"1aa78d24_eb5651cd","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":47},"in_reply_to":"1aa78d24_345a8df2","updated":"2016-07-07 20:50:00.000000000","message":"Done, I\u0027ve done it for every *utils used in any of the *ops. It is done in setUp in test_base.HyperVBaseTestCase. I\u0027ve done it in a separate patch, as it is something we have to do, feature freeze or not. [1]\n\n[1] https://review.openstack.org/339232","commit_id":"cc205d75f3567ec8891ae20dc157024258eb3d56"}],"nova/tests/unit/virt/hyperv/test_vmutilsv2.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"01069133edbcd5d58811df3e158fd44aaf9c2151","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        mock_vm.associators.return_value \u003d [mock_settings]"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        ret_val \u003d self._vmutils.get_vm_dvd_disk_paths(self._FAKE_VM_NAME)"},{"line_number":277,"context_line":"        self.assertEqual(mock.sentinel.FAKE_DVD_PATH1, ret_val[0])"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    @mock.patch(\u0027nova.virt.hyperv.vmutils.VMUtils.check_ret_val\u0027)"},{"line_number":280,"context_line":"    def test_modify_virtual_system(self, mock_check_ret_val):"}],"source_content_type":"text/x-python","patch_set":20,"id":"da20952f_36600301","line":277,"updated":"2015-09-04 10:16:27.000000000","message":"missing unit tests.","commit_id":"2f46fe48340ac9412c72e83e7bab643e7ff8103a"}],"nova/virt/hyperv/constants.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":106,"context_line":"FLAVOR_SPEC_SECURE_BOOT \u003d \"os:secure_boot\""},{"line_number":107,"context_line":"FLAVOR_SPEC_SECURE_BOOT_REQUIRED \u003d \"required\""},{"line_number":108,"context_line":"FLAVOR_SPEC_SECURE_BOOT_DISABLED \u003d \"disabled\""},{"line_number":109,"context_line":"FLAVOR_SPEC_SECURE_BOOT_OPTIONAL \u003d \"optional\""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"VM_GEN_1 \u003d 1"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_f4a7c308","line":109,"updated":"2015-08-06 14:36:28.000000000","message":"well, they are the same, FLAVOR_SPEC_blabla and IMAGE_PROP_blabla. no need to have 2 separate sets of constants with the same values.","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":106,"context_line":"FLAVOR_SPEC_SECURE_BOOT \u003d \"os:secure_boot\""},{"line_number":107,"context_line":"FLAVOR_SPEC_SECURE_BOOT_REQUIRED \u003d \"required\""},{"line_number":108,"context_line":"FLAVOR_SPEC_SECURE_BOOT_DISABLED \u003d \"disabled\""},{"line_number":109,"context_line":"FLAVOR_SPEC_SECURE_BOOT_OPTIONAL \u003d \"optional\""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"VM_GEN_1 \u003d 1"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_c7365350","line":109,"in_reply_to":"1a4dcd0f_f4a7c308","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c179b50044f3934f43c1cc1ffc0755b88d745da2","unresolved":false,"context_lines":[{"line_number":104,"context_line":"SECURE_BOOT_DISABLED \u003d \"disabled\""},{"line_number":105,"context_line":"SECURE_BOOT_OPTIONAL \u003d \"optional\""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"VM_GEN_1 \u003d 1"},{"line_number":109,"context_line":"VM_GEN_2 \u003d 2"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_10dbdfee","line":107,"updated":"2015-08-24 11:44:42.000000000","message":"delete one empty line.","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"e07ec233946b3dcbcb15388aeb44894288f7cf62","unresolved":false,"context_lines":[{"line_number":104,"context_line":"SECURE_BOOT_DISABLED \u003d \"disabled\""},{"line_number":105,"context_line":"SECURE_BOOT_OPTIONAL \u003d \"optional\""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"VM_GEN_1 \u003d 1"},{"line_number":109,"context_line":"VM_GEN_2 \u003d 2"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_622e03fc","line":107,"in_reply_to":"fa1b9901_10dbdfee","updated":"2015-08-24 15:25:10.000000000","message":"Done","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"773f68954286876d38dfcedc64735c6496626df2","unresolved":false,"context_lines":[{"line_number":97,"context_line":"IMAGE_PROP_VM_GEN_1 \u003d \"hyperv-gen1\""},{"line_number":98,"context_line":"IMAGE_PROP_VM_GEN_2 \u003d \"hyperv-gen2\""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"IMAGE_PROP_SECURE_BOOT \u003d \"os_secure_boot\""},{"line_number":101,"context_line":"FLAVOR_SPEC_SECURE_BOOT \u003d \"os:secure_boot\""},{"line_number":102,"context_line":"REQUIRED \u003d \"required\""},{"line_number":103,"context_line":"DISABLED \u003d \"disabled\""}],"source_content_type":"text/x-python","patch_set":21,"id":"3a29b11f_632270bb","line":100,"range":{"start_line":100,"start_character":5,"end_line":100,"end_character":41},"updated":"2015-10-20 12:14:04.000000000","message":"you won\u0027t need this anymore, you will get it by: \n\n    image_meta.properties.os_secure_boot","commit_id":"957d2bc23778270d51fe6e4de9c36af01bf78a5d"}],"nova/virt/hyperv/utilsfactory.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"#    #  noqa is used in order to not issue warnings during flake8 tests."},{"line_number":17,"context_line":"#    Modules are imported and used in _get_class method which returns an"},{"line_number":18,"context_line":"#    instance of a class from one of this modules."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from nova.i18n import _"},{"line_number":21,"context_line":"from nova.virt.hyperv import hostutils"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_d9e520a4","line":18,"updated":"2015-08-06 14:36:28.000000000","message":"these comments are overindented. No need to have more than 1 space after #","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"#    #  noqa is used in order to not issue warnings during flake8 tests."},{"line_number":17,"context_line":"#    Modules are imported and used in _get_class method which returns an"},{"line_number":18,"context_line":"#    instance of a class from one of this modules."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from nova.i18n import _"},{"line_number":21,"context_line":"from nova.virt.hyperv import hostutils"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_6742e7af","line":18,"in_reply_to":"1a4dcd0f_d9e520a4","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    module_name \u003d found_class.lower()"},{"line_number":90,"context_line":"    module \u003d globals()[module_name]"},{"line_number":91,"context_line":"    instance \u003d getattr(module, found_class)()"},{"line_number":92,"context_line":"    return instance"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"def get_vmutils(host\u003d\u0027.\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_d41de762","line":92,"updated":"2015-08-06 14:36:28.000000000","message":"I get the point and I\u0027m ok with the utilsfactory. But this change is not mentioned in the commit message. Also, those 2 changes are 90% unrelated (uefi one and utilsfactory refactoring), so I\u0027d suggest having 2 commits, one for each.","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    module_name \u003d found_class.lower()"},{"line_number":90,"context_line":"    module \u003d globals()[module_name]"},{"line_number":91,"context_line":"    instance \u003d getattr(module, found_class)()"},{"line_number":92,"context_line":"    return instance"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"def get_vmutils(host\u003d\u0027.\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_27486fcb","line":92,"in_reply_to":"1a4dcd0f_d41de762","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"}],"nova/virt/hyperv/vmops.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                                                             network_info)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"                self.attach_config_drive(instance, configdrive_path, vm_gen)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"            self.power_on(instance)"},{"line_number":290,"context_line":"        except Exception:"},{"line_number":291,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_190708cb","side":"PARENT","line":288,"updated":"2015-08-06 14:36:28.000000000","message":"unnecessary change.","commit_id":"decb6eff36b18cc9d227ac4d0fd02ffe0ec57cc8"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":367,"context_line":"            raise vmutils.HyperVException("},{"line_number":368,"context_line":"                _(\u0027Requested VM Generation %s, but provided VHD instead of \u0027"},{"line_number":369,"context_line":"                  \u0027VHDX.\u0027) % vm_gen)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        return vm_gen"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def _create_config_drive(self, instance, injected_files, admin_password,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_79508cd4","side":"PARENT","line":370,"updated":"2015-08-06 14:36:28.000000000","message":"unnecessary change","commit_id":"decb6eff36b18cc9d227ac4d0fd02ffe0ec57cc8"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            config_secure_boot \u003d self.requires_uefi_config(instance,"},{"line_number":279,"context_line":"                                                           image_meta)"},{"line_number":280,"context_line":"        else:"},{"line_number":281,"context_line":"            config_secure_boot \u003d False"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        try:"},{"line_number":284,"context_line":"            self.create_instance(instance, network_info, block_device_info,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_193948a4","line":281,"updated":"2015-08-06 14:36:28.000000000","message":"indeed, secure boot is only available for gen 2 VMs. Which is why you must make sure that if the instance requires secure boot, it MUST be gen 2 VM. Raise exception if not.","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            config_secure_boot \u003d self.requires_uefi_config(instance,"},{"line_number":279,"context_line":"                                                           image_meta)"},{"line_number":280,"context_line":"        else:"},{"line_number":281,"context_line":"            config_secure_boot \u003d False"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        try:"},{"line_number":284,"context_line":"            self.create_instance(instance, network_info, block_device_info,"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_a70a3f77","line":281,"in_reply_to":"1a4dcd0f_193948a4","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":307,"context_line":"        os_type \u003d image_props.get(\u0027os_type\u0027, None)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        if os_type !\u003d \u0027linux\u0027:"},{"line_number":310,"context_line":"            return False"},{"line_number":311,"context_line":"        if \u0027os:secure_boot\u0027 in flavor[\u0027extra_specs\u0027]:"},{"line_number":312,"context_line":"            flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":313,"context_line":"                constants.FLAVOR_SPEC_SECURE_BOOT, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_b91ff406","line":310,"updated":"2015-08-06 14:36:28.000000000","message":"if it\u0027s windows, it doesn\u0027t mean it doesn\u0027t need secure boot. Secure boot is available for both types of guests.","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":307,"context_line":"        os_type \u003d image_props.get(\u0027os_type\u0027, None)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        if os_type !\u003d \u0027linux\u0027:"},{"line_number":310,"context_line":"            return False"},{"line_number":311,"context_line":"        if \u0027os:secure_boot\u0027 in flavor[\u0027extra_specs\u0027]:"},{"line_number":312,"context_line":"            flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":313,"context_line":"                constants.FLAVOR_SPEC_SECURE_BOOT, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_c70df38f","line":310,"in_reply_to":"1a4dcd0f_b91ff406","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":312,"context_line":"            flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":313,"context_line":"                constants.FLAVOR_SPEC_SECURE_BOOT, None)"},{"line_number":314,"context_line":"        if flavor_secure_boot \u003d\u003d ("},{"line_number":315,"context_line":"                constants.FLAVOR_SPEC_SECURE_BOOT_REQUIRED):"},{"line_number":316,"context_line":"            return True"},{"line_number":317,"context_line":"        elif flavor_secure_boot \u003d\u003d ("},{"line_number":318,"context_line":"                constants.IMAGE_PROP_SECURE_BOOT_DISABLED):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_d9e440e1","line":315,"updated":"2015-08-06 14:36:28.000000000","message":"hm, you should have it the other way around... \u003d\u003d is actually a magic method called __eq__. Since flavor_secure_boot can be None, calling None.__eq__ can be bad.\n\n    if (constants.FLAVOR_SPEC_SECURE_BOOT_REQUIRED \u003d\u003d\n            flavor_secure_boot):","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":312,"context_line":"            flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":313,"context_line":"                constants.FLAVOR_SPEC_SECURE_BOOT, None)"},{"line_number":314,"context_line":"        if flavor_secure_boot \u003d\u003d ("},{"line_number":315,"context_line":"                constants.FLAVOR_SPEC_SECURE_BOOT_REQUIRED):"},{"line_number":316,"context_line":"            return True"},{"line_number":317,"context_line":"        elif flavor_secure_boot \u003d\u003d ("},{"line_number":318,"context_line":"                constants.IMAGE_PROP_SECURE_BOOT_DISABLED):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_274dcfc3","line":315,"in_reply_to":"1a4dcd0f_d9e440e1","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                constants.FLAVOR_SPEC_SECURE_BOOT_REQUIRED):"},{"line_number":316,"context_line":"            return True"},{"line_number":317,"context_line":"        elif flavor_secure_boot \u003d\u003d ("},{"line_number":318,"context_line":"                constants.IMAGE_PROP_SECURE_BOOT_DISABLED):"},{"line_number":319,"context_line":"            return False"},{"line_number":320,"context_line":"        else:"},{"line_number":321,"context_line":"            if image_prop_uefi \u003d\u003d ("}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_99fa3874","line":318,"updated":"2015-08-06 14:36:28.000000000","message":"ditto","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                constants.FLAVOR_SPEC_SECURE_BOOT_REQUIRED):"},{"line_number":316,"context_line":"            return True"},{"line_number":317,"context_line":"        elif flavor_secure_boot \u003d\u003d ("},{"line_number":318,"context_line":"                constants.IMAGE_PROP_SECURE_BOOT_DISABLED):"},{"line_number":319,"context_line":"            return False"},{"line_number":320,"context_line":"        else:"},{"line_number":321,"context_line":"            if image_prop_uefi \u003d\u003d ("}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_e7c91727","line":318,"in_reply_to":"1a4dcd0f_99fa3874","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            return False"},{"line_number":320,"context_line":"        else:"},{"line_number":321,"context_line":"            if image_prop_uefi \u003d\u003d ("},{"line_number":322,"context_line":"                    constants.IMAGE_PROP_SECURE_BOOT_REQUIRED):"},{"line_number":323,"context_line":"                return True"},{"line_number":324,"context_line":"            else:"},{"line_number":325,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_192dc8fd","line":322,"updated":"2015-08-06 14:36:28.000000000","message":"ditto","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            return False"},{"line_number":320,"context_line":"        else:"},{"line_number":321,"context_line":"            if image_prop_uefi \u003d\u003d ("},{"line_number":322,"context_line":"                    constants.IMAGE_PROP_SECURE_BOOT_REQUIRED):"},{"line_number":323,"context_line":"                return True"},{"line_number":324,"context_line":"            else:"},{"line_number":325,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_07cd2b30","line":322,"in_reply_to":"1a4dcd0f_192dc8fd","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":322,"context_line":"                    constants.IMAGE_PROP_SECURE_BOOT_REQUIRED):"},{"line_number":323,"context_line":"                return True"},{"line_number":324,"context_line":"            else:"},{"line_number":325,"context_line":"                return False"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def create_instance(self, instance, network_info, block_device_info,"},{"line_number":328,"context_line":"                        root_vhd_path, eph_vhd_path, vm_gen,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_3919a4d7","line":325,"updated":"2015-08-06 14:36:28.000000000","message":"i think that in stead of the lines L317-L325, it would be neater to just have:\n\n    return constants.IMAGE_PROP_SECURE_BOOT_REQUIRED \u003d\u003d image_prop_uefi","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":322,"context_line":"                    constants.IMAGE_PROP_SECURE_BOOT_REQUIRED):"},{"line_number":323,"context_line":"                return True"},{"line_number":324,"context_line":"            else:"},{"line_number":325,"context_line":"                return False"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def create_instance(self, instance, network_info, block_device_info,"},{"line_number":328,"context_line":"                        root_vhd_path, eph_vhd_path, vm_gen,"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_67de67de","line":325,"in_reply_to":"1a4dcd0f_3919a4d7","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                                        default_vm_gen)"},{"line_number":388,"context_line":"        if image_prop_vm not in self._hostutils.get_supported_vm_types():"},{"line_number":389,"context_line":"            LOG.error(_LE(\u0027Requested VM Generation %s is not supported on \u0027"},{"line_number":390,"context_line":"                          \u0027 this OS.\u0027), image_prop_vm)"},{"line_number":391,"context_line":"            raise vmutils.HyperVException("},{"line_number":392,"context_line":"                _(\u0027Requested VM Generation %s is not supported on this \u0027"},{"line_number":393,"context_line":"                  \u0027OS.\u0027) % image_prop_vm)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_b953746a","line":390,"updated":"2015-08-06 14:36:28.000000000","message":"unnecessary change.","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                                        default_vm_gen)"},{"line_number":388,"context_line":"        if image_prop_vm not in self._hostutils.get_supported_vm_types():"},{"line_number":389,"context_line":"            LOG.error(_LE(\u0027Requested VM Generation %s is not supported on \u0027"},{"line_number":390,"context_line":"                          \u0027 this OS.\u0027), image_prop_vm)"},{"line_number":391,"context_line":"            raise vmutils.HyperVException("},{"line_number":392,"context_line":"                _(\u0027Requested VM Generation %s is not supported on this \u0027"},{"line_number":393,"context_line":"                  \u0027OS.\u0027) % image_prop_vm)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_47dfa3d5","line":390,"in_reply_to":"1a4dcd0f_b953746a","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"9590df41e9d3a2e0e7475a9e8220aadb7a772b87","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            constants.IMAGE_PROP_SECURE_BOOT,"},{"line_number":305,"context_line":"            constants.SECURE_BOOT_DISABLED)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        os_type \u003d image_props.get(\u0027os_type\u0027, None)"},{"line_number":308,"context_line":"        flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":309,"context_line":"            constants.FLAVOR_SPEC_SECURE_BOOT, None)"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_467de86c","line":307,"updated":"2015-08-19 12:25:46.000000000","message":"Since we also use os_type now, should we also modify the docs[1] to reflect that?\n\n[1]http://docs.openstack.org/cli-reference/content/chapter_cli-glance-property.html","commit_id":"c0403b8519398e3d94d73c1608ad08afc52a2bea"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"d8a2ca85d419284f5be81923fb3a221abc2306d2","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            constants.IMAGE_PROP_SECURE_BOOT,"},{"line_number":305,"context_line":"            constants.SECURE_BOOT_DISABLED)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        os_type \u003d image_props.get(\u0027os_type\u0027, None)"},{"line_number":308,"context_line":"        flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":309,"context_line":"            constants.FLAVOR_SPEC_SECURE_BOOT, None)"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_e7335712","line":307,"in_reply_to":"fa1b9901_467de86c","updated":"2015-09-01 12:01:48.000000000","message":"Done","commit_id":"c0403b8519398e3d94d73c1608ad08afc52a2bea"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"9590df41e9d3a2e0e7475a9e8220aadb7a772b87","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":309,"context_line":"            constants.FLAVOR_SPEC_SECURE_BOOT, None)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":312,"context_line":"            constants.FLAVOR_SPEC_SECURE_BOOT, None)"},{"line_number":313,"context_line":"        if constants.SECURE_BOOT_REQUIRED \u003d\u003d flavor_secure_boot:"},{"line_number":314,"context_line":"            secure_boot_enabled \u003d True"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_e6167cf0","line":311,"updated":"2015-08-19 12:25:46.000000000","message":"Either there\u0027s a glitch in the matrix or this line is here twice :)","commit_id":"c0403b8519398e3d94d73c1608ad08afc52a2bea"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"d8a2ca85d419284f5be81923fb3a221abc2306d2","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":309,"context_line":"            constants.FLAVOR_SPEC_SECURE_BOOT, None)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":312,"context_line":"            constants.FLAVOR_SPEC_SECURE_BOOT, None)"},{"line_number":313,"context_line":"        if constants.SECURE_BOOT_REQUIRED \u003d\u003d flavor_secure_boot:"},{"line_number":314,"context_line":"            secure_boot_enabled \u003d True"}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_a739dff3","line":311,"in_reply_to":"fa1b9901_e6167cf0","updated":"2015-09-01 12:01:48.000000000","message":"Done","commit_id":"c0403b8519398e3d94d73c1608ad08afc52a2bea"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"9590df41e9d3a2e0e7475a9e8220aadb7a772b87","unresolved":false,"context_lines":[{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":312,"context_line":"            constants.FLAVOR_SPEC_SECURE_BOOT, None)"},{"line_number":313,"context_line":"        if constants.SECURE_BOOT_REQUIRED \u003d\u003d flavor_secure_boot:"},{"line_number":314,"context_line":"            secure_boot_enabled \u003d True"},{"line_number":315,"context_line":"        elif constants.SECURE_BOOT_DISABLED \u003d\u003d flavor_secure_boot:"},{"line_number":316,"context_line":"            secure_boot_enabled \u003d False"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_e672fc48","line":313,"updated":"2015-08-19 12:25:46.000000000","message":"You could shorthand this like so:\n\nsecure_boot_enabled \u003d constants.SECURE_BOOT_REQUIRED \u003d\u003d flavor_secure_boot","commit_id":"c0403b8519398e3d94d73c1608ad08afc52a2bea"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"d8a2ca85d419284f5be81923fb3a221abc2306d2","unresolved":false,"context_lines":[{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":312,"context_line":"            constants.FLAVOR_SPEC_SECURE_BOOT, None)"},{"line_number":313,"context_line":"        if constants.SECURE_BOOT_REQUIRED \u003d\u003d flavor_secure_boot:"},{"line_number":314,"context_line":"            secure_boot_enabled \u003d True"},{"line_number":315,"context_line":"        elif constants.SECURE_BOOT_DISABLED \u003d\u003d flavor_secure_boot:"},{"line_number":316,"context_line":"            secure_boot_enabled \u003d False"}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_272e2fa5","line":313,"in_reply_to":"fa1b9901_e672fc48","updated":"2015-09-01 12:01:48.000000000","message":"Done","commit_id":"c0403b8519398e3d94d73c1608ad08afc52a2bea"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"9590df41e9d3a2e0e7475a9e8220aadb7a772b87","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            secure_boot_enabled \u003d True"},{"line_number":315,"context_line":"        elif constants.SECURE_BOOT_DISABLED \u003d\u003d flavor_secure_boot:"},{"line_number":316,"context_line":"            secure_boot_enabled \u003d False"},{"line_number":317,"context_line":"        elif constants.SECURE_BOOT_REQUIRED \u003d\u003d image_prop_uefi:"},{"line_number":318,"context_line":"            secure_boot_enabled \u003d True"},{"line_number":319,"context_line":"        else:"},{"line_number":320,"context_line":"            secure_boot_enabled \u003d False"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_46e888b4","line":317,"updated":"2015-08-19 12:25:46.000000000","message":"Idem","commit_id":"c0403b8519398e3d94d73c1608ad08afc52a2bea"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"d8a2ca85d419284f5be81923fb3a221abc2306d2","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            secure_boot_enabled \u003d True"},{"line_number":315,"context_line":"        elif constants.SECURE_BOOT_DISABLED \u003d\u003d flavor_secure_boot:"},{"line_number":316,"context_line":"            secure_boot_enabled \u003d False"},{"line_number":317,"context_line":"        elif constants.SECURE_BOOT_REQUIRED \u003d\u003d image_prop_uefi:"},{"line_number":318,"context_line":"            secure_boot_enabled \u003d True"},{"line_number":319,"context_line":"        else:"},{"line_number":320,"context_line":"            secure_boot_enabled \u003d False"}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_fa2bee7f","line":317,"in_reply_to":"fa1b9901_46e888b4","updated":"2015-09-01 12:01:48.000000000","message":"The flavor extra spec value must override the image property value.","commit_id":"c0403b8519398e3d94d73c1608ad08afc52a2bea"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"10d17b42ba1235b0f2254f4f15e767ca33a51291","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                                                             network_info)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"                self.attach_config_drive(instance, configdrive_path, vm_gen)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"            self.power_on(instance)"},{"line_number":290,"context_line":"        except Exception:"},{"line_number":291,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_d7396cd8","side":"PARENT","line":288,"updated":"2015-08-20 11:47:58.000000000","message":"Unrelated change.","commit_id":"049b13309ba3a8f2f39af56e46862455511de37f"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"40067583df05067f0f19751ac085a999d1a6b422","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                                                             network_info)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"                self.attach_config_drive(instance, configdrive_path, vm_gen)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"            self.power_on(instance)"},{"line_number":290,"context_line":"        except Exception:"},{"line_number":291,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_dc9f0164","side":"PARENT","line":288,"in_reply_to":"fa1b9901_d7396cd8","updated":"2015-09-01 14:08:53.000000000","message":"Done","commit_id":"049b13309ba3a8f2f39af56e46862455511de37f"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"10d17b42ba1235b0f2254f4f15e767ca33a51291","unresolved":false,"context_lines":[{"line_number":367,"context_line":"            raise vmutils.HyperVException("},{"line_number":368,"context_line":"                _(\u0027Requested VM Generation %s, but provided VHD instead of \u0027"},{"line_number":369,"context_line":"                  \u0027VHDX.\u0027) % vm_gen)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        return vm_gen"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def _create_config_drive(self, instance, injected_files, admin_password,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_f4382ef0","side":"PARENT","line":370,"updated":"2015-08-20 11:47:58.000000000","message":"Unrelated change.","commit_id":"049b13309ba3a8f2f39af56e46862455511de37f"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"10d17b42ba1235b0f2254f4f15e767ca33a51291","unresolved":false,"context_lines":[{"line_number":296,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":297,"context_line":"                self.destroy(instance)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def requires_uefi_config(self, instance, image_meta):"},{"line_number":300,"context_line":"        flavor \u003d instance.get_flavor()"},{"line_number":301,"context_line":"        flavor_extra_specs \u003d flavor[\u0027extra_specs\u0027]"},{"line_number":302,"context_line":"        image_props \u003d image_meta[\u0027properties\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_b715d840","line":299,"updated":"2015-08-20 11:47:58.000000000","message":"This is also misleading. How about \"get_secure_boot_config\"?","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"40067583df05067f0f19751ac085a999d1a6b422","unresolved":false,"context_lines":[{"line_number":296,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":297,"context_line":"                self.destroy(instance)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def requires_uefi_config(self, instance, image_meta):"},{"line_number":300,"context_line":"        flavor \u003d instance.get_flavor()"},{"line_number":301,"context_line":"        flavor_extra_specs \u003d flavor[\u0027extra_specs\u0027]"},{"line_number":302,"context_line":"        image_props \u003d image_meta[\u0027properties\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_5c1f7109","line":299,"in_reply_to":"fa1b9901_b715d840","updated":"2015-09-01 14:08:53.000000000","message":"Done","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"10d17b42ba1235b0f2254f4f15e767ca33a51291","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        flavor \u003d instance.get_flavor()"},{"line_number":301,"context_line":"        flavor_extra_specs \u003d flavor[\u0027extra_specs\u0027]"},{"line_number":302,"context_line":"        image_props \u003d image_meta[\u0027properties\u0027]"},{"line_number":303,"context_line":"        image_prop_uefi \u003d image_props.get("},{"line_number":304,"context_line":"            constants.IMAGE_PROP_SECURE_BOOT,"},{"line_number":305,"context_line":"            constants.SECURE_BOOT_DISABLED)"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_34bea665","line":303,"updated":"2015-08-20 11:47:58.000000000","message":"This is a bit misleading. How about image_prop_sec_boot?","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"40067583df05067f0f19751ac085a999d1a6b422","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        flavor \u003d instance.get_flavor()"},{"line_number":301,"context_line":"        flavor_extra_specs \u003d flavor[\u0027extra_specs\u0027]"},{"line_number":302,"context_line":"        image_props \u003d image_meta[\u0027properties\u0027]"},{"line_number":303,"context_line":"        image_prop_uefi \u003d image_props.get("},{"line_number":304,"context_line":"            constants.IMAGE_PROP_SECURE_BOOT,"},{"line_number":305,"context_line":"            constants.SECURE_BOOT_DISABLED)"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_3a5c0618","line":303,"in_reply_to":"fa1b9901_34bea665","updated":"2015-09-01 14:08:53.000000000","message":"Done","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"10d17b42ba1235b0f2254f4f15e767ca33a51291","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            constants.IMAGE_PROP_SECURE_BOOT,"},{"line_number":305,"context_line":"            constants.SECURE_BOOT_DISABLED)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        os_type \u003d image_props.get(\u0027os_type\u0027, None)"},{"line_number":308,"context_line":"        flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":309,"context_line":"            constants.FLAVOR_SPEC_SECURE_BOOT, None)"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_579c7c0e","line":307,"updated":"2015-08-20 11:47:58.000000000","message":"Should the image os_type property be mandatory? I\u0027m asking as the following steps depend on it.","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"40067583df05067f0f19751ac085a999d1a6b422","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            constants.IMAGE_PROP_SECURE_BOOT,"},{"line_number":305,"context_line":"            constants.SECURE_BOOT_DISABLED)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        os_type \u003d image_props.get(\u0027os_type\u0027, None)"},{"line_number":308,"context_line":"        flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":309,"context_line":"            constants.FLAVOR_SPEC_SECURE_BOOT, None)"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_5c6771ea","line":307,"in_reply_to":"fa1b9901_579c7c0e","updated":"2015-09-01 14:08:53.000000000","message":"os_type is mandatory. Depending on it, a Microsoft UEFI Certificate Authority will be used or not when the vm boots.","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"10d17b42ba1235b0f2254f4f15e767ca33a51291","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":309,"context_line":"            constants.FLAVOR_SPEC_SECURE_BOOT, None)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        if constants.SECURE_BOOT_REQUIRED \u003d\u003d flavor_secure_boot:"},{"line_number":312,"context_line":"            secure_boot_enabled \u003d True"},{"line_number":313,"context_line":"        elif constants.SECURE_BOOT_DISABLED \u003d\u003d flavor_secure_boot:"},{"line_number":314,"context_line":"            secure_boot_enabled \u003d False"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_549c7a0e","line":311,"updated":"2015-08-20 11:47:58.000000000","message":"This can be written as:\nsecure_boot_enabled \u003d constants.SECURE_BOOT_REQUIRED in (flavor_secure_boot, image_prop_uefi)","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"40067583df05067f0f19751ac085a999d1a6b422","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        flavor_secure_boot \u003d flavor_extra_specs.get("},{"line_number":309,"context_line":"            constants.FLAVOR_SPEC_SECURE_BOOT, None)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        if constants.SECURE_BOOT_REQUIRED \u003d\u003d flavor_secure_boot:"},{"line_number":312,"context_line":"            secure_boot_enabled \u003d True"},{"line_number":313,"context_line":"        elif constants.SECURE_BOOT_DISABLED \u003d\u003d flavor_secure_boot:"},{"line_number":314,"context_line":"            secure_boot_enabled \u003d False"}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_5ab21a4d","line":311,"in_reply_to":"fa1b9901_549c7a0e","updated":"2015-09-01 14:08:53.000000000","message":"Done","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c179b50044f3934f43c1cc1ffc0755b88d745da2","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                                                             network_info)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"                self.attach_config_drive(instance, configdrive_path, vm_gen)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"            self.power_on(instance)"},{"line_number":290,"context_line":"        except Exception:"},{"line_number":291,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_306aa31b","side":"PARENT","line":288,"updated":"2015-08-24 11:44:42.000000000","message":"unecessary deleted line.","commit_id":"f42f91cae216f59374029a3f78f97ac3a6862326"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"e07ec233946b3dcbcb15388aeb44894288f7cf62","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                                                             network_info)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"                self.attach_config_drive(instance, configdrive_path, vm_gen)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"            self.power_on(instance)"},{"line_number":290,"context_line":"        except Exception:"},{"line_number":291,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_020ce792","side":"PARENT","line":288,"in_reply_to":"fa1b9901_306aa31b","updated":"2015-08-24 15:25:10.000000000","message":"Done","commit_id":"f42f91cae216f59374029a3f78f97ac3a6862326"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c179b50044f3934f43c1cc1ffc0755b88d745da2","unresolved":false,"context_lines":[{"line_number":367,"context_line":"            raise vmutils.HyperVException("},{"line_number":368,"context_line":"                _(\u0027Requested VM Generation %s, but provided VHD instead of \u0027"},{"line_number":369,"context_line":"                  \u0027VHDX.\u0027) % vm_gen)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        return vm_gen"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def _create_config_drive(self, instance, injected_files, admin_password,"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_d076c705","side":"PARENT","line":370,"updated":"2015-08-24 11:44:42.000000000","message":"unecessary new line.","commit_id":"f42f91cae216f59374029a3f78f97ac3a6862326"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"e07ec233946b3dcbcb15388aeb44894288f7cf62","unresolved":false,"context_lines":[{"line_number":367,"context_line":"            raise vmutils.HyperVException("},{"line_number":368,"context_line":"                _(\u0027Requested VM Generation %s, but provided VHD instead of \u0027"},{"line_number":369,"context_line":"                  \u0027VHDX.\u0027) % vm_gen)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        return vm_gen"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def _create_config_drive(self, instance, injected_files, admin_password,"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_4212dfb5","side":"PARENT","line":370,"in_reply_to":"fa1b9901_d076c705","updated":"2015-08-24 15:25:10.000000000","message":"Done","commit_id":"f42f91cae216f59374029a3f78f97ac3a6862326"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"47fde5ad7797202b9d3693c29ce4c4b71b630733","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        vm_gen \u003d self.get_image_vm_generation(root_vhd_path, image_meta)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        config_secure_boot \u003d self.get_secure_boot_config(instance, image_meta)"},{"line_number":278,"context_line":"        if vm_gen !\u003d constants.VM_GEN_2 and config_secure_boot is not None:"},{"line_number":279,"context_line":"            raise vmutils.HyperVException(_(\u0027Secure boot requires gen 2 VM\u0027))"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_847255ac","line":278,"updated":"2015-08-24 10:20:48.000000000","message":"what about if vm_gen is 1 and config_secure_boot is false? It will still error out,but that is a valid vm IMO, but in this case it will raise an Exception.","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"e07ec233946b3dcbcb15388aeb44894288f7cf62","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        vm_gen \u003d self.get_image_vm_generation(root_vhd_path, image_meta)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        config_secure_boot \u003d self.get_secure_boot_config(instance, image_meta)"},{"line_number":278,"context_line":"        if vm_gen !\u003d constants.VM_GEN_2 and config_secure_boot is not None:"},{"line_number":279,"context_line":"            raise vmutils.HyperVException(_(\u0027Secure boot requires gen 2 VM\u0027))"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_e23a1334","line":278,"in_reply_to":"fa1b9901_847255ac","updated":"2015-08-24 15:25:10.000000000","message":"Done","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        vm_gen \u003d self.get_image_vm_generation(root_vhd_path, image_meta)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        config_secure_boot \u003d self.get_secure_boot_config(instance, image_meta)"},{"line_number":278,"context_line":"        if vm_gen !\u003d constants.VM_GEN_2 and config_secure_boot is not None:"},{"line_number":279,"context_line":"            raise vmutils.HyperVException(_(\u0027Secure boot requires gen 2 VM\u0027))"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_bf39df43","line":278,"updated":"2015-08-26 16:51:23.000000000","message":"if vm_gen !\u003d constants.VM_GEN2 and config_secure_boot:","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        vm_gen \u003d self.get_image_vm_generation(root_vhd_path, image_meta)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        config_secure_boot \u003d self.get_secure_boot_config(instance, image_meta)"},{"line_number":278,"context_line":"        if vm_gen !\u003d constants.VM_GEN_2 and config_secure_boot is not None:"},{"line_number":279,"context_line":"            raise vmutils.HyperVException(_(\u0027Secure boot requires gen 2 VM\u0027))"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_44fd61af","line":278,"in_reply_to":"da20952f_bf39df43","updated":"2015-09-01 11:45:40.000000000","message":"Done","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":296,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":297,"context_line":"                self.destroy(instance)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def get_secure_boot_config(self, instance, image_meta):"},{"line_number":300,"context_line":"        secure_boot_enabled \u003d self.get_secure_boot(instance, image_meta)"},{"line_number":301,"context_line":"        os_type \u003d self.get_os_type(instance, image_meta)"},{"line_number":302,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_6213ac5d","line":299,"updated":"2015-08-26 16:51:23.000000000","message":"since this is only used in this class, this should be a private method, meaning it should be named _get_secure_boot_config.","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":296,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":297,"context_line":"                self.destroy(instance)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def get_secure_boot_config(self, instance, image_meta):"},{"line_number":300,"context_line":"        secure_boot_enabled \u003d self.get_secure_boot(instance, image_meta)"},{"line_number":301,"context_line":"        os_type \u003d self.get_os_type(instance, image_meta)"},{"line_number":302,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_c4273161","line":299,"in_reply_to":"da20952f_6213ac5d","updated":"2015-09-01 11:45:40.000000000","message":"Done","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def get_secure_boot_config(self, instance, image_meta):"},{"line_number":300,"context_line":"        secure_boot_enabled \u003d self.get_secure_boot(instance, image_meta)"},{"line_number":301,"context_line":"        os_type \u003d self.get_os_type(instance, image_meta)"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        if secure_boot_enabled is False:"},{"line_number":304,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_221a9418","line":301,"updated":"2015-08-26 16:51:23.000000000","message":"don\u0027t see the point to this 2 lines method, when you can just do:\n\n    os_type \u003d image_meta.get(\u0027properties\u0027, {}).get(\u0027os_type\u0027, None)","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def get_secure_boot_config(self, instance, image_meta):"},{"line_number":300,"context_line":"        secure_boot_enabled \u003d self.get_secure_boot(instance, image_meta)"},{"line_number":301,"context_line":"        os_type \u003d self.get_os_type(instance, image_meta)"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        if secure_boot_enabled is False:"},{"line_number":304,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_841e190a","line":301,"in_reply_to":"da20952f_221a9418","updated":"2015-09-01 11:45:40.000000000","message":"Done","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            return None"},{"line_number":305,"context_line":"        if os_type is None:"},{"line_number":306,"context_line":"            LOG.error(_LE(\u0027For secure boot, os type must be specified in \u0027"},{"line_number":307,"context_line":"                          \u0027flavor or image properties.\u0027))"},{"line_number":308,"context_line":"            raise vmutils.HyperVException("},{"line_number":309,"context_line":"                _(\u0027For secure boot, os type must be specified in flavor or \u0027"},{"line_number":310,"context_line":"                  \u0027image properties\u0027))"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_0252f013","line":307,"updated":"2015-08-26 16:51:23.000000000","message":"os_type must be specified in the image properties, not flavor extra specs.","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            return None"},{"line_number":305,"context_line":"        if os_type is None:"},{"line_number":306,"context_line":"            LOG.error(_LE(\u0027For secure boot, os type must be specified in \u0027"},{"line_number":307,"context_line":"                          \u0027flavor or image properties.\u0027))"},{"line_number":308,"context_line":"            raise vmutils.HyperVException("},{"line_number":309,"context_line":"                _(\u0027For secure boot, os type must be specified in flavor or \u0027"},{"line_number":310,"context_line":"                  \u0027image properties\u0027))"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_24194d22","line":307,"in_reply_to":"da20952f_0252f013","updated":"2015-09-01 11:45:40.000000000","message":"Done","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                          \u0027flavor or image properties.\u0027))"},{"line_number":308,"context_line":"            raise vmutils.HyperVException("},{"line_number":309,"context_line":"                _(\u0027For secure boot, os type must be specified in flavor or \u0027"},{"line_number":310,"context_line":"                  \u0027image properties\u0027))"},{"line_number":311,"context_line":"            return"},{"line_number":312,"context_line":"        return {\u0027secure_boot\u0027: True, \u0027os\u0027: os_type}"},{"line_number":313,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_02a0b0f3","line":310,"updated":"2015-08-26 16:51:23.000000000","message":"since the message is the same, I suggest:\n\n    err_msg \u003d _(\".....\")\n    LOG.error(err_msg)\n    raise vmutils.HyperVException(err_msg)","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                          \u0027flavor or image properties.\u0027))"},{"line_number":308,"context_line":"            raise vmutils.HyperVException("},{"line_number":309,"context_line":"                _(\u0027For secure boot, os type must be specified in flavor or \u0027"},{"line_number":310,"context_line":"                  \u0027image properties\u0027))"},{"line_number":311,"context_line":"            return"},{"line_number":312,"context_line":"        return {\u0027secure_boot\u0027: True, \u0027os\u0027: os_type}"},{"line_number":313,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_441481e7","line":310,"in_reply_to":"da20952f_02a0b0f3","updated":"2015-09-01 11:45:40.000000000","message":"Done","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":308,"context_line":"            raise vmutils.HyperVException("},{"line_number":309,"context_line":"                _(\u0027For secure boot, os type must be specified in flavor or \u0027"},{"line_number":310,"context_line":"                  \u0027image properties\u0027))"},{"line_number":311,"context_line":"            return"},{"line_number":312,"context_line":"        return {\u0027secure_boot\u0027: True, \u0027os\u0027: os_type}"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    # Secure Boot feature will be enabled by setting the \"os_secure_boot\""}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_02875062","line":311,"updated":"2015-08-26 16:51:23.000000000","message":"you don\u0027t return after a raise. remove.","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":308,"context_line":"            raise vmutils.HyperVException("},{"line_number":309,"context_line":"                _(\u0027For secure boot, os type must be specified in flavor or \u0027"},{"line_number":310,"context_line":"                  \u0027image properties\u0027))"},{"line_number":311,"context_line":"            return"},{"line_number":312,"context_line":"        return {\u0027secure_boot\u0027: True, \u0027os\u0027: os_type}"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    # Secure Boot feature will be enabled by setting the \"os_secure_boot\""}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_a4db1d4e","line":311,"in_reply_to":"da20952f_02875062","updated":"2015-09-01 11:45:40.000000000","message":"Done","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                _(\u0027For secure boot, os type must be specified in flavor or \u0027"},{"line_number":310,"context_line":"                  \u0027image properties\u0027))"},{"line_number":311,"context_line":"            return"},{"line_number":312,"context_line":"        return {\u0027secure_boot\u0027: True, \u0027os\u0027: os_type}"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    # Secure Boot feature will be enabled by setting the \"os_secure_boot\""},{"line_number":315,"context_line":"    # image property or the \"os:secure_boot\" flavor extra spec to required."}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_c202b86f","line":312,"updated":"2015-08-26 16:51:23.000000000","message":"it\u0027s fine until this point, just one more validation is missing, and with that I\u0027m Ok:\n\n    if os_type !\u003d \u0027windows\u0027 and self._hostutils.check_min_version(6, 3):\n        err_msg \u003d _(\"Only Windows instances can have secure boot on Windows / Hyper-V 2012 R2\").\n        LOG.error(err_msg)\n        raise vmutils.HyperVException(err_msg)","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                _(\u0027For secure boot, os type must be specified in flavor or \u0027"},{"line_number":310,"context_line":"                  \u0027image properties\u0027))"},{"line_number":311,"context_line":"            return"},{"line_number":312,"context_line":"        return {\u0027secure_boot\u0027: True, \u0027os\u0027: os_type}"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    # Secure Boot feature will be enabled by setting the \"os_secure_boot\""},{"line_number":315,"context_line":"    # image property or the \"os:secure_boot\" flavor extra spec to required."}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_84ae192c","line":312,"in_reply_to":"da20952f_c202b86f","updated":"2015-09-01 11:45:40.000000000","message":"This validation it would also raise this exception on WS2008R2 where is no secure boot. \u0027Secure boot requires gen 2 VM\u0027 exception is raised in spawn method if secure boot is required on WS2008R2.","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":314,"context_line":"    # Secure Boot feature will be enabled by setting the \"os_secure_boot\""},{"line_number":315,"context_line":"    # image property or the \"os:secure_boot\" flavor extra spec to required."},{"line_number":316,"context_line":"    # The flavor extra spec value overrides the image property value."},{"line_number":317,"context_line":"    def get_secure_boot(self, instance, image_meta):"},{"line_number":318,"context_line":"        flavor \u003d instance.get_flavor()"},{"line_number":319,"context_line":"        flavor_extra_specs \u003d flavor[\u0027extra_specs\u0027]"},{"line_number":320,"context_line":"        flavor_secure_boot \u003d flavor_extra_specs.get("}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_8df631d6","line":317,"updated":"2015-08-26 16:51:23.000000000","message":"i think a better name would be requires_secure_boot, since it returns a boolean.","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":314,"context_line":"    # Secure Boot feature will be enabled by setting the \"os_secure_boot\""},{"line_number":315,"context_line":"    # image property or the \"os:secure_boot\" flavor extra spec to required."},{"line_number":316,"context_line":"    # The flavor extra spec value overrides the image property value."},{"line_number":317,"context_line":"    def get_secure_boot(self, instance, image_meta):"},{"line_number":318,"context_line":"        flavor \u003d instance.get_flavor()"},{"line_number":319,"context_line":"        flavor_extra_specs \u003d flavor[\u0027extra_specs\u0027]"},{"line_number":320,"context_line":"        flavor_secure_boot \u003d flavor_extra_specs.get("}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_0418c9d1","line":317,"in_reply_to":"da20952f_8df631d6","updated":"2015-09-01 11:45:40.000000000","message":"Done","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"01069133edbcd5d58811df3e158fd44aaf9c2151","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        if secure_boot_enabled is False:"},{"line_number":300,"context_line":"            return None"},{"line_number":301,"context_line":"        if vm_gen !\u003d constants.VM_GEN_2 and os_type is not None:"},{"line_number":302,"context_line":"            raise vmutils.HyperVException(_(\u0027Secure boot requires gen 2 VM\u0027))"},{"line_number":303,"context_line":"        if os_type is None:"},{"line_number":304,"context_line":"            raise vmutils.HyperVException("}],"source_content_type":"text/x-python","patch_set":20,"id":"da20952f_96146f4d","line":301,"updated":"2015-09-04 10:16:27.000000000","message":"os_type should not be in this if, as it should just check vm_gen.\n\nalso, the case vm_gen \u003d gen 1 and os_type is None would not raise an exception, and it should.","commit_id":"2f46fe48340ac9412c72e83e7bab643e7ff8103a"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"009da9af9d260d749bfa56c50f43ec3a51e95a95","unresolved":false,"context_lines":[{"line_number":778,"context_line":"    def _requires_certificate(self, image_meta):"},{"line_number":779,"context_line":"        os_type \u003d image_meta.properties.get(\u0027os_type\u0027)"},{"line_number":780,"context_line":"        if not os_type:"},{"line_number":781,"context_line":"            raise vmutils.HyperVException("},{"line_number":782,"context_line":"                _(\u0027For secure boot, os_type must be specified in image \u0027"},{"line_number":783,"context_line":"                  \u0027properties.\u0027))"},{"line_number":784,"context_line":"        elif os_type \u003d\u003d \u0027windows\u0027:"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_034d59c3","line":781,"updated":"2015-12-03 12:01:31.000000000","message":"should raise exception.InstanceUnacceptable instead.","commit_id":"0b62aaffd35c9b9ad3a875cacf154954eadba7d0"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6d87491c37dc31754537940552a27083ea64e7e8","unresolved":false,"context_lines":[{"line_number":778,"context_line":"    def _requires_certificate(self, image_meta):"},{"line_number":779,"context_line":"        os_type \u003d image_meta.properties.get(\u0027os_type\u0027)"},{"line_number":780,"context_line":"        if not os_type:"},{"line_number":781,"context_line":"            raise vmutils.HyperVException("},{"line_number":782,"context_line":"                _(\u0027For secure boot, os_type must be specified in image \u0027"},{"line_number":783,"context_line":"                  \u0027properties.\u0027))"},{"line_number":784,"context_line":"        elif os_type \u003d\u003d \u0027windows\u0027:"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_ef1d9473","line":781,"in_reply_to":"9a8ffd7b_034d59c3","updated":"2015-12-03 13:00:33.000000000","message":"Done","commit_id":"0b62aaffd35c9b9ad3a875cacf154954eadba7d0"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"009da9af9d260d749bfa56c50f43ec3a51e95a95","unresolved":false,"context_lines":[{"line_number":801,"context_line":"        else:"},{"line_number":802,"context_line":"            requires_secure_boot \u003d image_prop_secure_boot \u003d\u003d constants.REQUIRED"},{"line_number":803,"context_line":"        if vm_gen !\u003d constants.VM_GEN_2 and requires_secure_boot:"},{"line_number":804,"context_line":"            raise vmutils.HyperVException(_(\u0027Secure boot requires gen 2 VM.\u0027))"},{"line_number":805,"context_line":"        return requires_secure_boot"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_4357e157","line":804,"updated":"2015-12-03 12:01:31.000000000","message":"should raise exception.InstanceUnacceptable instead.","commit_id":"0b62aaffd35c9b9ad3a875cacf154954eadba7d0"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6d87491c37dc31754537940552a27083ea64e7e8","unresolved":false,"context_lines":[{"line_number":801,"context_line":"        else:"},{"line_number":802,"context_line":"            requires_secure_boot \u003d image_prop_secure_boot \u003d\u003d constants.REQUIRED"},{"line_number":803,"context_line":"        if vm_gen !\u003d constants.VM_GEN_2 and requires_secure_boot:"},{"line_number":804,"context_line":"            raise vmutils.HyperVException(_(\u0027Secure boot requires gen 2 VM.\u0027))"},{"line_number":805,"context_line":"        return requires_secure_boot"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_8f10885a","line":804,"in_reply_to":"9a8ffd7b_4357e157","updated":"2015-12-03 13:00:33.000000000","message":"Done","commit_id":"0b62aaffd35c9b9ad3a875cacf154954eadba7d0"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"a5c3163e1a6ddbd6a12431b93c5d0a80af8cade1","unresolved":false,"context_lines":[{"line_number":377,"context_line":"        flavor_secure_boot \u003d instance.flavor.extra_specs.get("},{"line_number":378,"context_line":"            constants.FLAVOR_SPEC_SECURE_BOOT, None)"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        if flavor_secure_boot in ("},{"line_number":381,"context_line":"                fields.SecureBoot.REQUIRED, fields.SecureBoot.DISABLED):"},{"line_number":382,"context_line":"            requires_sb \u003d fields.SecureBoot.REQUIRED \u003d\u003d flavor_secure_boot"},{"line_number":383,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":35,"id":"bab6814e_2e07e782","line":380,"range":{"start_line":380,"start_character":11,"end_line":380,"end_character":29},"updated":"2016-05-23 12:17:25.000000000","message":"From the spec [1]: L52: \"The flavor extra spec acceptable value is: ``required``. Any other value will\nbe ignored.\"\n\nIt seems to me that we are accepting DISABLED here as well.\nWouldn\u0027t it be easier to set requires_sb to whatever the image_meta says and the just override it in case the flavor sets it to \"Required\" ?\n\n[1] https://review.openstack.org/#/c/190997/7/specs/mitaka/approved/hyper-v-uefi-secureboot.rst","commit_id":"1314a5119e6b1c899835dd561adccd87b262fce4"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"854f7ad574ddf69768c8dd3db651fe78aad42b6a","unresolved":false,"context_lines":[{"line_number":383,"context_line":"        else:"},{"line_number":384,"context_line":"            requires_sb \u003d img_secure_boot \u003d\u003d fields.SecureBoot.REQUIRED"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        if vm_gen !\u003d constants.VM_GEN_2 and requires_sb:"},{"line_number":387,"context_line":"            reason \u003d _(\u0027Secure boot requires generation 2 VM.\u0027)"},{"line_number":388,"context_line":"            raise exception.InstanceUnacceptable(instance_id\u003dinstance.id,"},{"line_number":389,"context_line":"                                                 reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":35,"id":"bab6814e_2366e029","line":386,"updated":"2016-05-23 12:03:44.000000000","message":"Kind of a micro nit, but I don\u0027t think this check belongs here. The job of this method is to determine from the image meta or flavor if the user asked for secure boot or not. The check weather it can be enabled or not should be performed before the instance is created IMO.","commit_id":"1314a5119e6b1c899835dd561adccd87b262fce4"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"11046525c9f0fd2264117199c2d35b1702b6d733","unresolved":false,"context_lines":[{"line_number":383,"context_line":"        else:"},{"line_number":384,"context_line":"            requires_sb \u003d img_secure_boot \u003d\u003d fields.SecureBoot.REQUIRED"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        if vm_gen !\u003d constants.VM_GEN_2 and requires_sb:"},{"line_number":387,"context_line":"            reason \u003d _(\u0027Secure boot requires generation 2 VM.\u0027)"},{"line_number":388,"context_line":"            raise exception.InstanceUnacceptable(instance_id\u003dinstance.id,"},{"line_number":389,"context_line":"                                                 reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":35,"id":"bab6814e_49e985b6","line":386,"in_reply_to":"bab6814e_2366e029","updated":"2016-05-23 12:30:12.000000000","message":"Yeah, took a better look, this should really not go in here. We only do this check after the machine is built, in case it\u0027s not a gen 2 then we would have created a VM for nothing. Should be done before creation.","commit_id":"1314a5119e6b1c899835dd561adccd87b262fce4"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"d837d626ef4e5e930359e305f557a489b8ca81be","unresolved":false,"context_lines":[{"line_number":394,"context_line":"            raise exception.InstanceUnacceptable(instance_id\u003dinstance.id,"},{"line_number":395,"context_line":"                                                 reason\u003dreason)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"        if vm_gen !\u003d constants.VM_GEN_2 and requires_sb:"},{"line_number":398,"context_line":"            reason \u003d _(\u0027Secure boot requires generation 2 VM.\u0027)"},{"line_number":399,"context_line":"            raise exception.InstanceUnacceptable(instance_id\u003dinstance.id,"},{"line_number":400,"context_line":"                                                 reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":38,"id":"bab6814e_b8b3484c","line":397,"range":{"start_line":397,"start_character":11,"end_line":397,"end_character":17},"updated":"2016-05-26 17:52:07.000000000","message":"I still insist that this check should not be done here. As stated previously, from the name, I think the role of this method is only to determine from the image_meta and flavor extra specs if secure boot has been requested or not. Adding this check here doesn\u0027t seem to fit IMO. But I see that _requires_secure_boot method is called before creating the VM now, so at least we won\u0027t have created the VM for nothing.","commit_id":"636c6ea67b08955f488b9760dacd1a1e4fc0f681"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"dea416ff432943ab6020def166be0a27d9fa3588","unresolved":false,"context_lines":[{"line_number":394,"context_line":"            raise exception.InstanceUnacceptable(instance_id\u003dinstance.id,"},{"line_number":395,"context_line":"                                                 reason\u003dreason)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"        if vm_gen !\u003d constants.VM_GEN_2 and requires_sb:"},{"line_number":398,"context_line":"            reason \u003d _(\u0027Secure boot requires generation 2 VM.\u0027)"},{"line_number":399,"context_line":"            raise exception.InstanceUnacceptable(instance_id\u003dinstance.id,"},{"line_number":400,"context_line":"                                                 reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":38,"id":"9abb7d3a_73db9c7c","line":397,"range":{"start_line":397,"start_character":11,"end_line":397,"end_character":17},"in_reply_to":"9abb7d3a_bdb31d97","updated":"2016-06-01 17:11:29.000000000","message":"the alternative would be to move this check to create_instance, but I think that would just add more complexity to an already complex method. Not to mention the messy code in its unit tests. Plus, having more code in create_instance increases the chances of merge conflict, also increasing their complexity. I for one, am tired of merge conflicts. :)\n\nI think this check is fine where it is.\n\n@Lucian: yeah, agreed. I am already thinking of a better way, but it requires that some host capabilities code to merge first.","commit_id":"636c6ea67b08955f488b9760dacd1a1e4fc0f681"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"165d4899e4a0b285ac11890c93e31ef442692c9f","unresolved":false,"context_lines":[{"line_number":394,"context_line":"            raise exception.InstanceUnacceptable(instance_id\u003dinstance.id,"},{"line_number":395,"context_line":"                                                 reason\u003dreason)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"        if vm_gen !\u003d constants.VM_GEN_2 and requires_sb:"},{"line_number":398,"context_line":"            reason \u003d _(\u0027Secure boot requires generation 2 VM.\u0027)"},{"line_number":399,"context_line":"            raise exception.InstanceUnacceptable(instance_id\u003dinstance.id,"},{"line_number":400,"context_line":"                                                 reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":38,"id":"9abb7d3a_bdb31d97","line":397,"range":{"start_line":397,"start_character":11,"end_line":397,"end_character":17},"in_reply_to":"bab6814e_b8b3484c","updated":"2016-06-01 14:21:44.000000000","message":"Yeah, I guess you could move this check outside this method. Anyway, maybe in the future we\u0027ll find a better/more unified way of validating extra specs.","commit_id":"636c6ea67b08955f488b9760dacd1a1e4fc0f681"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a65c1334c4a1f44b5f676dbed2ded49a3eac84b4","unresolved":false,"context_lines":[{"line_number":421,"context_line":"    # Secure Boot feature will be enabled by setting the \"os_secure_boot\""},{"line_number":422,"context_line":"    # image property or the \"os:secure_boot\" flavor extra spec to required."},{"line_number":423,"context_line":"    def _requires_secure_boot(self, instance, image_meta, vm_gen):"},{"line_number":424,"context_line":"        img_secure_boot \u003d image_meta.properties.get(\u0027os_secure_boot\u0027)"},{"line_number":425,"context_line":"        flavor_secure_boot \u003d instance.flavor.extra_specs.get("},{"line_number":426,"context_line":"            constants.FLAVOR_SPEC_SECURE_BOOT)"},{"line_number":427,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"1aa78d24_142356a8","line":424,"updated":"2016-07-06 14:28:52.000000000","message":"Note to self: this property is already defined in image_meta.properties, so good to go.","commit_id":"cec369f5b351390ae2bd1011dd6afbcdbf6941a2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f9b2c1c0eec5f06093cfb88f3d83d5d26249d0bd","unresolved":false,"context_lines":[{"line_number":333,"context_line":"            self._metricsutils.enable_vm_metrics_collection(instance_name)"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        if secure_boot_enabled:"},{"line_number":336,"context_line":"            certificate_required \u003d self._requires_certificate("},{"line_number":337,"context_line":"                instance.id, image_meta)"},{"line_number":338,"context_line":"            self._vmutils.enable_secure_boot("},{"line_number":339,"context_line":"                instance.name, certificate_required\u003dcertificate_required)"}],"source_content_type":"text/x-python","patch_set":42,"id":"1aa78d24_84b26192","line":336,"range":{"start_line":336,"start_character":40,"end_line":336,"end_character":61},"updated":"2016-07-06 21:26:26.000000000","message":"This can raise an exception if the image doesn\u0027t have the os_type property, so why don\u0027t we check this above after getting the secure_boot_enabled variable? Then we don\u0027t actually create the VM if the os_type isn\u0027t specified, and we\u0027d need to get this regardless if secure_boot_enabled\u003dTrue.","commit_id":"c493519fe65f8b1da500cbe99f0bce493a527a15"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"0fb8215c8a0c84fbf57be109928e3611784efb84","unresolved":false,"context_lines":[{"line_number":333,"context_line":"            self._metricsutils.enable_vm_metrics_collection(instance_name)"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        if secure_boot_enabled:"},{"line_number":336,"context_line":"            certificate_required \u003d self._requires_certificate("},{"line_number":337,"context_line":"                instance.id, image_meta)"},{"line_number":338,"context_line":"            self._vmutils.enable_secure_boot("},{"line_number":339,"context_line":"                instance.name, certificate_required\u003dcertificate_required)"}],"source_content_type":"text/x-python","patch_set":42,"id":"1aa78d24_0b6790e9","line":336,"range":{"start_line":336,"start_character":40,"end_line":336,"end_character":61},"in_reply_to":"1aa78d24_84b26192","updated":"2016-07-07 06:19:09.000000000","message":"Done","commit_id":"c493519fe65f8b1da500cbe99f0bce493a527a15"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f9b2c1c0eec5f06093cfb88f3d83d5d26249d0bd","unresolved":false,"context_lines":[{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        if secure_boot_enabled:"},{"line_number":336,"context_line":"            certificate_required \u003d self._requires_certificate("},{"line_number":337,"context_line":"                instance.id, image_meta)"},{"line_number":338,"context_line":"            self._vmutils.enable_secure_boot("},{"line_number":339,"context_line":"                instance.name, certificate_required\u003dcertificate_required)"},{"line_number":340,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"1aa78d24_84dd41e2","line":337,"range":{"start_line":337,"start_character":16,"end_line":337,"end_character":27},"updated":"2016-07-06 21:26:26.000000000","message":"Just pass the instance object in since this is just used for the error message, and we should use instance.uuid.","commit_id":"c493519fe65f8b1da500cbe99f0bce493a527a15"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"0fb8215c8a0c84fbf57be109928e3611784efb84","unresolved":false,"context_lines":[{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        if secure_boot_enabled:"},{"line_number":336,"context_line":"            certificate_required \u003d self._requires_certificate("},{"line_number":337,"context_line":"                instance.id, image_meta)"},{"line_number":338,"context_line":"            self._vmutils.enable_secure_boot("},{"line_number":339,"context_line":"                instance.name, certificate_required\u003dcertificate_required)"},{"line_number":340,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"1aa78d24_50f78558","line":337,"range":{"start_line":337,"start_character":16,"end_line":337,"end_character":27},"in_reply_to":"1aa78d24_84dd41e2","updated":"2016-07-07 06:19:09.000000000","message":"Done","commit_id":"c493519fe65f8b1da500cbe99f0bce493a527a15"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f9b2c1c0eec5f06093cfb88f3d83d5d26249d0bd","unresolved":false,"context_lines":[{"line_number":336,"context_line":"            certificate_required \u003d self._requires_certificate("},{"line_number":337,"context_line":"                instance.id, image_meta)"},{"line_number":338,"context_line":"            self._vmutils.enable_secure_boot("},{"line_number":339,"context_line":"                instance.name, certificate_required\u003dcertificate_required)"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def _configure_remotefx(self, instance, vm_gen):"},{"line_number":342,"context_line":"        extra_specs \u003d instance.flavor.extra_specs"}],"source_content_type":"text/x-python","patch_set":42,"id":"1aa78d24_5f3960d6","line":339,"range":{"start_line":339,"start_character":31,"end_line":339,"end_character":51},"updated":"2016-07-06 21:26:26.000000000","message":"Looking at this:\n\nhttp://git.openstack.org/cgit/openstack/os-win/tree/os_win/utils/compute/vmutils.py#n921\n\nThe kwarg is msft_ca_required so how does this work?","commit_id":"c493519fe65f8b1da500cbe99f0bce493a527a15"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"0fb8215c8a0c84fbf57be109928e3611784efb84","unresolved":false,"context_lines":[{"line_number":336,"context_line":"            certificate_required \u003d self._requires_certificate("},{"line_number":337,"context_line":"                instance.id, image_meta)"},{"line_number":338,"context_line":"            self._vmutils.enable_secure_boot("},{"line_number":339,"context_line":"                instance.name, certificate_required\u003dcertificate_required)"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def _configure_remotefx(self, instance, vm_gen):"},{"line_number":342,"context_line":"        extra_specs \u003d instance.flavor.extra_specs"}],"source_content_type":"text/x-python","patch_set":42,"id":"1aa78d24_b07ce9ec","line":339,"range":{"start_line":339,"start_character":31,"end_line":339,"end_character":51},"in_reply_to":"1aa78d24_3f33b463","updated":"2016-07-07 06:19:09.000000000","message":"Done","commit_id":"c493519fe65f8b1da500cbe99f0bce493a527a15"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5149c79aa5af6cfbab4ce085e76d91b5c3bd3465","unresolved":false,"context_lines":[{"line_number":336,"context_line":"            certificate_required \u003d self._requires_certificate("},{"line_number":337,"context_line":"                instance.id, image_meta)"},{"line_number":338,"context_line":"            self._vmutils.enable_secure_boot("},{"line_number":339,"context_line":"                instance.name, certificate_required\u003dcertificate_required)"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def _configure_remotefx(self, instance, vm_gen):"},{"line_number":342,"context_line":"        extra_specs \u003d instance.flavor.extra_specs"}],"source_content_type":"text/x-python","patch_set":42,"id":"1aa78d24_3f33b463","line":339,"range":{"start_line":339,"start_character":31,"end_line":339,"end_character":51},"in_reply_to":"1aa78d24_5f3960d6","updated":"2016-07-06 21:37:53.000000000","message":"I see:\n\nhttps://review.openstack.org/#/c/216769/14/hyperv/nova/vmutilsv2.py\n\nThis is the code from the nova fork of this code, from 10 months ago, and os-win has changed, so this is obviously not tested.","commit_id":"c493519fe65f8b1da500cbe99f0bce493a527a15"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f9b2c1c0eec5f06093cfb88f3d83d5d26249d0bd","unresolved":false,"context_lines":[{"line_number":414,"context_line":"                       \u0027properties.\u0027)"},{"line_number":415,"context_line":"            raise exception.InstanceUnacceptable(instance_id\u003dinstance_id,"},{"line_number":416,"context_line":"                                                 reason\u003dreason)"},{"line_number":417,"context_line":"        elif os_type \u003d\u003d \u0027windows\u0027:"},{"line_number":418,"context_line":"            return False"},{"line_number":419,"context_line":"        return True"},{"line_number":420,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"1aa78d24_e49b6516","line":417,"range":{"start_line":417,"start_character":24,"end_line":417,"end_character":33},"updated":"2016-07-06 21:26:26.000000000","message":"Use: fields.OSType.WINDOWS","commit_id":"c493519fe65f8b1da500cbe99f0bce493a527a15"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"0fb8215c8a0c84fbf57be109928e3611784efb84","unresolved":false,"context_lines":[{"line_number":414,"context_line":"                       \u0027properties.\u0027)"},{"line_number":415,"context_line":"            raise exception.InstanceUnacceptable(instance_id\u003dinstance_id,"},{"line_number":416,"context_line":"                                                 reason\u003dreason)"},{"line_number":417,"context_line":"        elif os_type \u003d\u003d \u0027windows\u0027:"},{"line_number":418,"context_line":"            return False"},{"line_number":419,"context_line":"        return True"},{"line_number":420,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"1aa78d24_b092294a","line":417,"range":{"start_line":417,"start_character":24,"end_line":417,"end_character":33},"in_reply_to":"1aa78d24_e49b6516","updated":"2016-07-07 06:19:09.000000000","message":"Done","commit_id":"c493519fe65f8b1da500cbe99f0bce493a527a15"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f9b2c1c0eec5f06093cfb88f3d83d5d26249d0bd","unresolved":false,"context_lines":[{"line_number":438,"context_line":"                conflicting_values \u003d True"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        if conflicting_values:"},{"line_number":441,"context_line":"            reason \u003d _(\"Conflicting image metadata property and flavor \""},{"line_number":442,"context_line":"                       \"extra_specs values: os_secure_boot / os:secure_boot\")"},{"line_number":443,"context_line":"            raise exception.InstanceUnacceptable(instance_id\u003dinstance.id,"},{"line_number":444,"context_line":"                                                 reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":42,"id":"1aa78d24_a415dde5","line":441,"updated":"2016-07-06 21:26:26.000000000","message":"It would probably be more helpful to also include, maybe in parenthesis, the actual values, e.g.:\n\n\"Conflicting image metadata property and flavor extra_specs values: os_secure_boot (%(image_secure_boot)s) / os:secure_boot (%(flavor_secure_boot)s)\"","commit_id":"c493519fe65f8b1da500cbe99f0bce493a527a15"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"0fb8215c8a0c84fbf57be109928e3611784efb84","unresolved":false,"context_lines":[{"line_number":438,"context_line":"                conflicting_values \u003d True"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        if conflicting_values:"},{"line_number":441,"context_line":"            reason \u003d _(\"Conflicting image metadata property and flavor \""},{"line_number":442,"context_line":"                       \"extra_specs values: os_secure_boot / os:secure_boot\")"},{"line_number":443,"context_line":"            raise exception.InstanceUnacceptable(instance_id\u003dinstance.id,"},{"line_number":444,"context_line":"                                                 reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":42,"id":"1aa78d24_7049e1cf","line":441,"in_reply_to":"1aa78d24_a415dde5","updated":"2016-07-07 06:19:09.000000000","message":"Done","commit_id":"c493519fe65f8b1da500cbe99f0bce493a527a15"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f9b2c1c0eec5f06093cfb88f3d83d5d26249d0bd","unresolved":false,"context_lines":[{"line_number":440,"context_line":"        if conflicting_values:"},{"line_number":441,"context_line":"            reason \u003d _(\"Conflicting image metadata property and flavor \""},{"line_number":442,"context_line":"                       \"extra_specs values: os_secure_boot / os:secure_boot\")"},{"line_number":443,"context_line":"            raise exception.InstanceUnacceptable(instance_id\u003dinstance.id,"},{"line_number":444,"context_line":"                                                 reason\u003dreason)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        if vm_gen !\u003d constants.VM_GEN_2 and requires_sb:"}],"source_content_type":"text/x-python","patch_set":42,"id":"1aa78d24_4456b9ce","line":443,"range":{"start_line":443,"start_character":61,"end_line":443,"end_character":72},"updated":"2016-07-06 21:26:26.000000000","message":"We should use the instance.uuid here.","commit_id":"c493519fe65f8b1da500cbe99f0bce493a527a15"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"0fb8215c8a0c84fbf57be109928e3611784efb84","unresolved":false,"context_lines":[{"line_number":440,"context_line":"        if conflicting_values:"},{"line_number":441,"context_line":"            reason \u003d _(\"Conflicting image metadata property and flavor \""},{"line_number":442,"context_line":"                       \"extra_specs values: os_secure_boot / os:secure_boot\")"},{"line_number":443,"context_line":"            raise exception.InstanceUnacceptable(instance_id\u003dinstance.id,"},{"line_number":444,"context_line":"                                                 reason\u003dreason)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        if vm_gen !\u003d constants.VM_GEN_2 and requires_sb:"}],"source_content_type":"text/x-python","patch_set":42,"id":"1aa78d24_70ad6187","line":443,"range":{"start_line":443,"start_character":61,"end_line":443,"end_character":72},"in_reply_to":"1aa78d24_4456b9ce","updated":"2016-07-07 06:19:09.000000000","message":"Done","commit_id":"c493519fe65f8b1da500cbe99f0bce493a527a15"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f9b2c1c0eec5f06093cfb88f3d83d5d26249d0bd","unresolved":false,"context_lines":[{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        if vm_gen !\u003d constants.VM_GEN_2 and requires_sb:"},{"line_number":447,"context_line":"            reason \u003d _(\u0027Secure boot requires generation 2 VM.\u0027)"},{"line_number":448,"context_line":"            raise exception.InstanceUnacceptable(instance_id\u003dinstance.id,"},{"line_number":449,"context_line":"                                                 reason\u003dreason)"},{"line_number":450,"context_line":"        return requires_sb"},{"line_number":451,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"1aa78d24_04a311b3","line":448,"range":{"start_line":448,"start_character":70,"end_line":448,"end_character":72},"updated":"2016-07-06 21:26:26.000000000","message":"uuid","commit_id":"c493519fe65f8b1da500cbe99f0bce493a527a15"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"0fb8215c8a0c84fbf57be109928e3611784efb84","unresolved":false,"context_lines":[{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        if vm_gen !\u003d constants.VM_GEN_2 and requires_sb:"},{"line_number":447,"context_line":"            reason \u003d _(\u0027Secure boot requires generation 2 VM.\u0027)"},{"line_number":448,"context_line":"            raise exception.InstanceUnacceptable(instance_id\u003dinstance.id,"},{"line_number":449,"context_line":"                                                 reason\u003dreason)"},{"line_number":450,"context_line":"        return requires_sb"},{"line_number":451,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"1aa78d24_10a21d99","line":448,"range":{"start_line":448,"start_character":70,"end_line":448,"end_character":72},"in_reply_to":"1aa78d24_04a311b3","updated":"2016-07-07 06:19:09.000000000","message":"Done","commit_id":"c493519fe65f8b1da500cbe99f0bce493a527a15"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"05b039e5c024cea6263362ee4c3f657f75225eec","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        if conflicting_values:"},{"line_number":442,"context_line":"            reason \u003d _("},{"line_number":443,"context_line":"                \"Conflicting image metadata property and flavor extra_specs \""},{"line_number":444,"context_line":"                \"values: os_secure_boot %(image_secure_boot)s / \""},{"line_number":445,"context_line":"                \"os:secure_boot %(flavor_secure_boot)s\") % {"},{"line_number":446,"context_line":"                    \u0027image_secure_boot\u0027: img_secure_boot,"},{"line_number":447,"context_line":"                    \u0027flavor_secure_boot\u0027: flavor_secure_boot}"}],"source_content_type":"text/x-python","patch_set":43,"id":"1aa78d24_b45cbd19","line":444,"range":{"start_line":444,"start_character":40,"end_line":444,"end_character":61},"updated":"2016-07-07 15:07:54.000000000","message":"nit: put this in () in the message","commit_id":"cc205d75f3567ec8891ae20dc157024258eb3d56"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"fb61d677f369be595684e5f96d6f53d5334678e1","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        if conflicting_values:"},{"line_number":442,"context_line":"            reason \u003d _("},{"line_number":443,"context_line":"                \"Conflicting image metadata property and flavor extra_specs \""},{"line_number":444,"context_line":"                \"values: os_secure_boot %(image_secure_boot)s / \""},{"line_number":445,"context_line":"                \"os:secure_boot %(flavor_secure_boot)s\") % {"},{"line_number":446,"context_line":"                    \u0027image_secure_boot\u0027: img_secure_boot,"},{"line_number":447,"context_line":"                    \u0027flavor_secure_boot\u0027: flavor_secure_boot}"}],"source_content_type":"text/x-python","patch_set":43,"id":"1aa78d24_6b4a6157","line":444,"range":{"start_line":444,"start_character":40,"end_line":444,"end_character":61},"in_reply_to":"1aa78d24_b45cbd19","updated":"2016-07-07 20:50:00.000000000","message":"Done","commit_id":"cc205d75f3567ec8891ae20dc157024258eb3d56"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"05b039e5c024cea6263362ee4c3f657f75225eec","unresolved":false,"context_lines":[{"line_number":442,"context_line":"            reason \u003d _("},{"line_number":443,"context_line":"                \"Conflicting image metadata property and flavor extra_specs \""},{"line_number":444,"context_line":"                \"values: os_secure_boot %(image_secure_boot)s / \""},{"line_number":445,"context_line":"                \"os:secure_boot %(flavor_secure_boot)s\") % {"},{"line_number":446,"context_line":"                    \u0027image_secure_boot\u0027: img_secure_boot,"},{"line_number":447,"context_line":"                    \u0027flavor_secure_boot\u0027: flavor_secure_boot}"},{"line_number":448,"context_line":"            raise exception.InstanceUnacceptable(instance_id\u003dinstance.uuid,"}],"source_content_type":"text/x-python","patch_set":43,"id":"1aa78d24_149e71b8","line":445,"range":{"start_line":445,"start_character":32,"end_line":445,"end_character":56},"updated":"2016-07-07 15:07:54.000000000","message":"ditto","commit_id":"cc205d75f3567ec8891ae20dc157024258eb3d56"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"fb61d677f369be595684e5f96d6f53d5334678e1","unresolved":false,"context_lines":[{"line_number":442,"context_line":"            reason \u003d _("},{"line_number":443,"context_line":"                \"Conflicting image metadata property and flavor extra_specs \""},{"line_number":444,"context_line":"                \"values: os_secure_boot %(image_secure_boot)s / \""},{"line_number":445,"context_line":"                \"os:secure_boot %(flavor_secure_boot)s\") % {"},{"line_number":446,"context_line":"                    \u0027image_secure_boot\u0027: img_secure_boot,"},{"line_number":447,"context_line":"                    \u0027flavor_secure_boot\u0027: flavor_secure_boot}"},{"line_number":448,"context_line":"            raise exception.InstanceUnacceptable(instance_id\u003dinstance.uuid,"}],"source_content_type":"text/x-python","patch_set":43,"id":"1aa78d24_ab7289ae","line":445,"range":{"start_line":445,"start_character":32,"end_line":445,"end_character":56},"in_reply_to":"1aa78d24_149e71b8","updated":"2016-07-07 20:50:00.000000000","message":"Done","commit_id":"cc205d75f3567ec8891ae20dc157024258eb3d56"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6a877ee8f154a9cf943c6a97ef9fa94d2d113cf8","unresolved":false,"context_lines":[{"line_number":455,"context_line":"            return False"},{"line_number":456,"context_line":"        return True"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    # Secure Boot feature will be enabled by setting the \"os_secure_boot\""},{"line_number":459,"context_line":"    # image property or the \"os:secure_boot\" flavor extra spec to required."},{"line_number":460,"context_line":"    def _requires_secure_boot(self, instance, image_meta, vm_gen):"},{"line_number":461,"context_line":"        os_type \u003d image_meta.properties.get(\u0027os_type\u0027)"},{"line_number":462,"context_line":"        if not os_type:"}],"source_content_type":"text/x-python","patch_set":46,"id":"5a8bc5a2_c7d22800","line":459,"range":{"start_line":458,"start_character":4,"end_line":459,"end_character":75},"updated":"2016-09-23 19:50:42.000000000","message":"nit: this is better as a docstring on the method itself.","commit_id":"131f328994ae54221aec300eb6fff1627786ce79"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"57900de2dc731c36c970dcacf4db25a7b2a0619b","unresolved":false,"context_lines":[{"line_number":455,"context_line":"            return False"},{"line_number":456,"context_line":"        return True"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    # Secure Boot feature will be enabled by setting the \"os_secure_boot\""},{"line_number":459,"context_line":"    # image property or the \"os:secure_boot\" flavor extra spec to required."},{"line_number":460,"context_line":"    def _requires_secure_boot(self, instance, image_meta, vm_gen):"},{"line_number":461,"context_line":"        os_type \u003d image_meta.properties.get(\u0027os_type\u0027)"},{"line_number":462,"context_line":"        if not os_type:"}],"source_content_type":"text/x-python","patch_set":46,"id":"5a8bc5a2_873ca0e3","line":459,"range":{"start_line":458,"start_character":4,"end_line":459,"end_character":75},"in_reply_to":"5a8bc5a2_c7d22800","updated":"2016-09-23 20:07:18.000000000","message":"Done","commit_id":"131f328994ae54221aec300eb6fff1627786ce79"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"c7de1e30e3109467696d08bc84c8d91ed1e3ae36","unresolved":false,"context_lines":[{"line_number":451,"context_line":"            raise exception.InstanceUnacceptable(instance_id\u003dinstance_id,"},{"line_number":452,"context_line":"                                                 reason\u003dreason)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    def _requires_certificate(self, image_meta):"},{"line_number":455,"context_line":"        os_type \u003d image_meta.properties.get(\u0027os_type\u0027)"},{"line_number":456,"context_line":"        if os_type \u003d\u003d fields.OSType.WINDOWS:"},{"line_number":457,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":49,"id":"5a8bc5a2_1c3a28e7","line":454,"range":{"start_line":454,"start_character":8,"end_line":454,"end_character":29},"updated":"2016-09-27 14:12:29.000000000","message":"This method looks a bit ambiguous, wondering whether it should be renamed to \u0027_secure_boot_requires_msft_ca\u0027, providing a meaningful docstring.","commit_id":"29dab997b4e7039cbf036edb5db35b6d18e6b6ca"}],"nova/virt/hyperv/vmutils.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c179b50044f3934f43c1cc1ffc0755b88d745da2","unresolved":false,"context_lines":[{"line_number":261,"context_line":"    def create_vm(self, vm_name, memory_mb, vcpus_num, limit_cpu_features,"},{"line_number":262,"context_line":"                  dynamic_memory_ratio, vm_gen, instance_path, notes\u003dNone,"},{"line_number":263,"context_line":"                  config_secure_boot\u003dNone):"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        \"\"\"Creates a VM.\"\"\""},{"line_number":266,"context_line":"        vs_man_svc \u003d self._conn.Msvm_VirtualSystemManagementService()[0]"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_f01c2bc3","line":264,"updated":"2015-08-24 11:44:42.000000000","message":"unecessary new line.","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"e07ec233946b3dcbcb15388aeb44894288f7cf62","unresolved":false,"context_lines":[{"line_number":261,"context_line":"    def create_vm(self, vm_name, memory_mb, vcpus_num, limit_cpu_features,"},{"line_number":262,"context_line":"                  dynamic_memory_ratio, vm_gen, instance_path, notes\u003dNone,"},{"line_number":263,"context_line":"                  config_secure_boot\u003dNone):"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        \"\"\"Creates a VM.\"\"\""},{"line_number":266,"context_line":"        vs_man_svc \u003d self._conn.Msvm_VirtualSystemManagementService()[0]"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_a21bbbc9","line":264,"in_reply_to":"fa1b9901_f01c2bc3","updated":"2015-08-24 15:25:10.000000000","message":"Done","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c179b50044f3934f43c1cc1ffc0755b88d745da2","unresolved":false,"context_lines":[{"line_number":281,"context_line":"    def _create_vm_obj(self, vs_man_svc, vm_name, vm_gen, notes,"},{"line_number":282,"context_line":"                       dynamic_memory_ratio, instance_path,"},{"line_number":283,"context_line":"                       config_secure_boot\u003dNone):"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        vs_gs_data \u003d self._conn.Msvm_VirtualSystemGlobalSettingData.new()"},{"line_number":286,"context_line":"        vs_gs_data.ElementName \u003d vm_name"},{"line_number":287,"context_line":"        # Don\u0027t start automatically on host boot"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_7087bbd7","line":284,"updated":"2015-08-24 11:44:42.000000000","message":"unecessary new line.","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"e07ec233946b3dcbcb15388aeb44894288f7cf62","unresolved":false,"context_lines":[{"line_number":281,"context_line":"    def _create_vm_obj(self, vs_man_svc, vm_name, vm_gen, notes,"},{"line_number":282,"context_line":"                       dynamic_memory_ratio, instance_path,"},{"line_number":283,"context_line":"                       config_secure_boot\u003dNone):"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        vs_gs_data \u003d self._conn.Msvm_VirtualSystemGlobalSettingData.new()"},{"line_number":286,"context_line":"        vs_gs_data.ElementName \u003d vm_name"},{"line_number":287,"context_line":"        # Don\u0027t start automatically on host boot"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_627cc3eb","line":284,"in_reply_to":"fa1b9901_7087bbd7","updated":"2015-08-24 15:25:10.000000000","message":"Done","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"}],"nova/virt/hyperv/vmutils10.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class VMUtils10(vmutilsv2.VMUtilsV2):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    _VIRTUAL_SYSTEM_SUBTYPE_GEN2 \u003d \u0027Microsoft:Hyper-V:SubType:2\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def _init_hyperv_wmi_conn(self, host):"},{"line_number":29,"context_line":"        self._conn \u003d wmi.WMI(moniker\u003d\u0027//%s/root/virtualization/v2\u0027 % host)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_be883ac6","line":26,"updated":"2015-08-06 14:36:28.000000000","message":"vmutilsv2 already has this property. no need to readd it.","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class VMUtils10(vmutilsv2.VMUtilsV2):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    _VIRTUAL_SYSTEM_SUBTYPE_GEN2 \u003d \u0027Microsoft:Hyper-V:SubType:2\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def _init_hyperv_wmi_conn(self, host):"},{"line_number":29,"context_line":"        self._conn \u003d wmi.WMI(moniker\u003d\u0027//%s/root/virtualization/v2\u0027 % host)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_e7f03769","line":26,"in_reply_to":"1a4dcd0f_be883ac6","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    _VIRTUAL_SYSTEM_SUBTYPE_GEN2 \u003d \u0027Microsoft:Hyper-V:SubType:2\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def _init_hyperv_wmi_conn(self, host):"},{"line_number":29,"context_line":"        self._conn \u003d wmi.WMI(moniker\u003d\u0027//%s/root/virtualization/v2\u0027 % host)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def set_secure_boot(self, vs_data):"},{"line_number":32,"context_line":"        uefi_data \u003d self._conn.Msvm_VirtualSystemSettingData("}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_deb3c698","line":29,"updated":"2015-08-06 14:36:28.000000000","message":"same, vmutilsv2 already has this.","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    _VIRTUAL_SYSTEM_SUBTYPE_GEN2 \u003d \u0027Microsoft:Hyper-V:SubType:2\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def _init_hyperv_wmi_conn(self, host):"},{"line_number":29,"context_line":"        self._conn \u003d wmi.WMI(moniker\u003d\u0027//%s/root/virtualization/v2\u0027 % host)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def set_secure_boot(self, vs_data):"},{"line_number":32,"context_line":"        uefi_data \u003d self._conn.Msvm_VirtualSystemSettingData("}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_a7e6bfad","line":29,"in_reply_to":"1a4dcd0f_deb3c698","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def set_secure_boot(self, vs_data):"},{"line_number":32,"context_line":"        uefi_data \u003d self._conn.Msvm_VirtualSystemSettingData("},{"line_number":33,"context_line":"            ElementName\u003d\"MicrosoftUEFICertificateAuthority\")[0]"},{"line_number":34,"context_line":"        SecureBootId \u003d uefi_data.SecureBootTemplateId"},{"line_number":35,"context_line":"        vs_data.SecureBootTemplateId \u003d SecureBootId"},{"line_number":36,"context_line":"        vs_data.SecureBootEnabled \u003d True"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_fe6fa2f9","line":33,"updated":"2015-08-06 14:36:28.000000000","message":"can you make this a constant pls? (just like _VIRTUAL_SYSTEM_SUBTYPE_GEN2 on L26)","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def set_secure_boot(self, vs_data):"},{"line_number":32,"context_line":"        uefi_data \u003d self._conn.Msvm_VirtualSystemSettingData("},{"line_number":33,"context_line":"            ElementName\u003d\"MicrosoftUEFICertificateAuthority\")[0]"},{"line_number":34,"context_line":"        SecureBootId \u003d uefi_data.SecureBootTemplateId"},{"line_number":35,"context_line":"        vs_data.SecureBootTemplateId \u003d SecureBootId"},{"line_number":36,"context_line":"        vs_data.SecureBootEnabled \u003d True"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_67050744","line":33,"in_reply_to":"1a4dcd0f_fe6fa2f9","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        uefi_data \u003d self._conn.Msvm_VirtualSystemSettingData("},{"line_number":33,"context_line":"            ElementName\u003d\"MicrosoftUEFICertificateAuthority\")[0]"},{"line_number":34,"context_line":"        SecureBootId \u003d uefi_data.SecureBootTemplateId"},{"line_number":35,"context_line":"        vs_data.SecureBootTemplateId \u003d SecureBootId"},{"line_number":36,"context_line":"        vs_data.SecureBootEnabled \u003d True"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_197628a4","line":35,"updated":"2015-08-06 14:36:28.000000000","message":"also, not exactly sure, but do windows guests also need this?","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        uefi_data \u003d self._conn.Msvm_VirtualSystemSettingData("},{"line_number":33,"context_line":"            ElementName\u003d\"MicrosoftUEFICertificateAuthority\")[0]"},{"line_number":34,"context_line":"        SecureBootId \u003d uefi_data.SecureBootTemplateId"},{"line_number":35,"context_line":"        vs_data.SecureBootTemplateId \u003d SecureBootId"},{"line_number":36,"context_line":"        vs_data.SecureBootEnabled \u003d True"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_47f6c35d","line":35,"in_reply_to":"1a4dcd0f_197628a4","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"10d17b42ba1235b0f2254f4f15e767ca33a51291","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class VMUtils10(vmutilsv2.VMUtilsV2):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    _VIRTUAL_SYSTEM_SUBTYPE_GEN2 \u003d \u0027Microsoft:Hyper-V:SubType:2\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def set_secure_boot(self, vs_data, config_secure_boot):"},{"line_number":24,"context_line":"        if config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027windows\u0027:"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_b774f867","line":21,"updated":"2015-08-20 11:47:58.000000000","message":"This attribute is already defined in the super class, having the same value.","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"40067583df05067f0f19751ac085a999d1a6b422","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class VMUtils10(vmutilsv2.VMUtilsV2):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    _VIRTUAL_SYSTEM_SUBTYPE_GEN2 \u003d \u0027Microsoft:Hyper-V:SubType:2\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def set_secure_boot(self, vs_data, config_secure_boot):"},{"line_number":24,"context_line":"        if config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027windows\u0027:"}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_3c8cfd7e","line":21,"in_reply_to":"fa1b9901_b774f867","updated":"2015-09-01 14:08:53.000000000","message":"Done","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"10d17b42ba1235b0f2254f4f15e767ca33a51291","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    _VIRTUAL_SYSTEM_SUBTYPE_GEN2 \u003d \u0027Microsoft:Hyper-V:SubType:2\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def set_secure_boot(self, vs_data, config_secure_boot):"},{"line_number":24,"context_line":"        if config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027windows\u0027:"},{"line_number":25,"context_line":"            vs_data.SecureBootEnabled \u003d config_secure_boot[\u0027secure_boot\u0027]"},{"line_number":26,"context_line":"        elif config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027linux\u0027:"},{"line_number":27,"context_line":"                uefi_data \u003d self._conn.Msvm_VirtualSystemSettingData("}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_971534e6","line":24,"updated":"2015-08-20 11:47:58.000000000","message":"How about defining some constants for the OS?","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"10d17b42ba1235b0f2254f4f15e767ca33a51291","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        if config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027windows\u0027:"},{"line_number":25,"context_line":"            vs_data.SecureBootEnabled \u003d config_secure_boot[\u0027secure_boot\u0027]"},{"line_number":26,"context_line":"        elif config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027linux\u0027:"},{"line_number":27,"context_line":"                uefi_data \u003d self._conn.Msvm_VirtualSystemSettingData("},{"line_number":28,"context_line":"                    ElementName\u003d\"MicrosoftUEFICertificateAuthority\")[0]"},{"line_number":29,"context_line":"                SecureBootId \u003d uefi_data.SecureBootTemplateId"},{"line_number":30,"context_line":"                vs_data.SecureBootTemplateId \u003d SecureBootId"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_770180ae","line":27,"updated":"2015-08-20 11:47:58.000000000","message":"Indendation seems off.","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"40067583df05067f0f19751ac085a999d1a6b422","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        if config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027windows\u0027:"},{"line_number":25,"context_line":"            vs_data.SecureBootEnabled \u003d config_secure_boot[\u0027secure_boot\u0027]"},{"line_number":26,"context_line":"        elif config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027linux\u0027:"},{"line_number":27,"context_line":"                uefi_data \u003d self._conn.Msvm_VirtualSystemSettingData("},{"line_number":28,"context_line":"                    ElementName\u003d\"MicrosoftUEFICertificateAuthority\")[0]"},{"line_number":29,"context_line":"                SecureBootId \u003d uefi_data.SecureBootTemplateId"},{"line_number":30,"context_line":"                vs_data.SecureBootTemplateId \u003d SecureBootId"}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_bccd6db9","line":27,"in_reply_to":"fa1b9901_770180ae","updated":"2015-09-01 14:08:53.000000000","message":"Done","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"10d17b42ba1235b0f2254f4f15e767ca33a51291","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        elif config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027linux\u0027:"},{"line_number":27,"context_line":"                uefi_data \u003d self._conn.Msvm_VirtualSystemSettingData("},{"line_number":28,"context_line":"                    ElementName\u003d\"MicrosoftUEFICertificateAuthority\")[0]"},{"line_number":29,"context_line":"                SecureBootId \u003d uefi_data.SecureBootTemplateId"},{"line_number":30,"context_line":"                vs_data.SecureBootTemplateId \u003d SecureBootId"},{"line_number":31,"context_line":"                vs_data.SecureBootEnabled \u003d config_secure_boot[\u0027secure_boot\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_77ef40e9","line":29,"updated":"2015-08-20 11:47:58.000000000","message":"No need for defining a new variable.","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"40067583df05067f0f19751ac085a999d1a6b422","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        elif config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027linux\u0027:"},{"line_number":27,"context_line":"                uefi_data \u003d self._conn.Msvm_VirtualSystemSettingData("},{"line_number":28,"context_line":"                    ElementName\u003d\"MicrosoftUEFICertificateAuthority\")[0]"},{"line_number":29,"context_line":"                SecureBootId \u003d uefi_data.SecureBootTemplateId"},{"line_number":30,"context_line":"                vs_data.SecureBootTemplateId \u003d SecureBootId"},{"line_number":31,"context_line":"                vs_data.SecureBootEnabled \u003d config_secure_boot[\u0027secure_boot\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_5c7bf129","line":29,"in_reply_to":"fa1b9901_77ef40e9","updated":"2015-09-01 14:08:53.000000000","message":"Done","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c179b50044f3934f43c1cc1ffc0755b88d745da2","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class VMUtils10(vmutilsv2.VMUtilsV2):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    _VIRTUAL_SYSTEM_SUBTYPE_GEN2 \u003d \u0027Microsoft:Hyper-V:SubType:2\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def set_secure_boot(self, vs_data, config_secure_boot):"},{"line_number":24,"context_line":"        if config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027windows\u0027:"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_70101ba9","line":21,"updated":"2015-08-24 11:44:42.000000000","message":"already exists in VMUtilsV2: https://github.com/openstack/nova/blob/master/nova/virt/hyperv/vmutilsv2.py#L51\n\nremove this line.","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"e07ec233946b3dcbcb15388aeb44894288f7cf62","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class VMUtils10(vmutilsv2.VMUtilsV2):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    _VIRTUAL_SYSTEM_SUBTYPE_GEN2 \u003d \u0027Microsoft:Hyper-V:SubType:2\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def set_secure_boot(self, vs_data, config_secure_boot):"},{"line_number":24,"context_line":"        if config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027windows\u0027:"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_c26d8f33","line":21,"in_reply_to":"fa1b9901_70101ba9","updated":"2015-08-24 15:25:10.000000000","message":"Done","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c179b50044f3934f43c1cc1ffc0755b88d745da2","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def set_secure_boot(self, vs_data, config_secure_boot):"},{"line_number":24,"context_line":"        if config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027windows\u0027:"},{"line_number":25,"context_line":"            vs_data.SecureBootEnabled \u003d config_secure_boot[\u0027secure_boot\u0027]"},{"line_number":26,"context_line":"        elif config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027linux\u0027:"},{"line_number":27,"context_line":"            uefi_data \u003d self._conn.Msvm_VirtualSystemSettingData("},{"line_number":28,"context_line":"                ElementName\u003d\"MicrosoftUEFICertificateAuthority\")[0]"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_d0da4717","line":25,"updated":"2015-08-24 11:44:42.000000000","message":"this is set in both cases, so no need to add an if for windows. just set it and have an if for linux.","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"e07ec233946b3dcbcb15388aeb44894288f7cf62","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def set_secure_boot(self, vs_data, config_secure_boot):"},{"line_number":24,"context_line":"        if config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027windows\u0027:"},{"line_number":25,"context_line":"            vs_data.SecureBootEnabled \u003d config_secure_boot[\u0027secure_boot\u0027]"},{"line_number":26,"context_line":"        elif config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027linux\u0027:"},{"line_number":27,"context_line":"            uefi_data \u003d self._conn.Msvm_VirtualSystemSettingData("},{"line_number":28,"context_line":"                ElementName\u003d\"MicrosoftUEFICertificateAuthority\")[0]"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_025aa783","line":25,"in_reply_to":"fa1b9901_d0da4717","updated":"2015-08-24 15:25:10.000000000","message":"Done","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c179b50044f3934f43c1cc1ffc0755b88d745da2","unresolved":false,"context_lines":[{"line_number":25,"context_line":"            vs_data.SecureBootEnabled \u003d config_secure_boot[\u0027secure_boot\u0027]"},{"line_number":26,"context_line":"        elif config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027linux\u0027:"},{"line_number":27,"context_line":"            uefi_data \u003d self._conn.Msvm_VirtualSystemSettingData("},{"line_number":28,"context_line":"                ElementName\u003d\"MicrosoftUEFICertificateAuthority\")[0]"},{"line_number":29,"context_line":"            vs_data.SecureBootTemplateId \u003d uefi_data.SecureBootTemplateId"},{"line_number":30,"context_line":"            vs_data.SecureBootEnabled \u003d config_secure_boot[\u0027secure_boot\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_b02f93f5","line":28,"updated":"2015-08-24 11:44:42.000000000","message":"have this string as a class constant, just like _VIRTUAL_SYSTEM_SUBTYPE_GEN2","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"e07ec233946b3dcbcb15388aeb44894288f7cf62","unresolved":false,"context_lines":[{"line_number":25,"context_line":"            vs_data.SecureBootEnabled \u003d config_secure_boot[\u0027secure_boot\u0027]"},{"line_number":26,"context_line":"        elif config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027linux\u0027:"},{"line_number":27,"context_line":"            uefi_data \u003d self._conn.Msvm_VirtualSystemSettingData("},{"line_number":28,"context_line":"                ElementName\u003d\"MicrosoftUEFICertificateAuthority\")[0]"},{"line_number":29,"context_line":"            vs_data.SecureBootTemplateId \u003d uefi_data.SecureBootTemplateId"},{"line_number":30,"context_line":"            vs_data.SecureBootEnabled \u003d config_secure_boot[\u0027secure_boot\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_a2497bb9","line":28,"in_reply_to":"fa1b9901_b02f93f5","updated":"2015-08-24 15:25:10.000000000","message":"Done","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"}],"nova/virt/hyperv/vmutilsv2.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        vs_data \u003d self._conn.Msvm_VirtualSystemSettingData.new()"},{"line_number":109,"context_line":"        vs_data.ElementName \u003d vm_name"},{"line_number":110,"context_line":"        vs_data.Notes \u003d notes"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        # Don\u0027t start automatically on host boot"},{"line_number":113,"context_line":"        vs_data.AutomaticStartupAction \u003d self._AUTOMATIC_STARTUP_ACTION_NONE"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_3edaea4c","line":111,"updated":"2015-08-06 14:36:28.000000000","message":"unnecessary change","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        vs_data \u003d self._conn.Msvm_VirtualSystemSettingData.new()"},{"line_number":109,"context_line":"        vs_data.ElementName \u003d vm_name"},{"line_number":110,"context_line":"        vs_data.Notes \u003d notes"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        # Don\u0027t start automatically on host boot"},{"line_number":113,"context_line":"        vs_data.AutomaticStartupAction \u003d self._AUTOMATIC_STARTUP_ACTION_NONE"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_079beb18","line":111,"in_reply_to":"1a4dcd0f_3edaea4c","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        vs_data.SuspendDataRoot \u003d instance_path"},{"line_number":129,"context_line":"        vs_data.SwapFileDataRoot \u003d instance_path"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        if config_secure_boot is True:"},{"line_number":132,"context_line":"            self.set_secure_boot(vs_data)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        (job_path,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_f9a7bc08","line":131,"updated":"2015-08-06 14:36:28.000000000","message":"if config_secure_boot:  should be enough, IMO, but not that important.","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        vs_data.SuspendDataRoot \u003d instance_path"},{"line_number":129,"context_line":"        vs_data.SwapFileDataRoot \u003d instance_path"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        if config_secure_boot is True:"},{"line_number":132,"context_line":"            self.set_secure_boot(vs_data)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        (job_path,"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_678c27da","line":131,"in_reply_to":"1a4dcd0f_f9a7bc08","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":136,"context_line":"         ret_val) \u003d vs_man_svc.DefineSystem(ResourceSettings\u003d[],"},{"line_number":137,"context_line":"                                            ReferenceConfiguration\u003dNone,"},{"line_number":138,"context_line":"                                            SystemSettings\u003dvs_data.GetText_(1))"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        job \u003d self.check_ret_val(ret_val, job_path)"},{"line_number":141,"context_line":"        if not vm_path and job:"},{"line_number":142,"context_line":"            vm_path \u003d job.associators(self._AFFECTED_JOB_ELEMENT_CLASS)[0]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_3e33caac","line":139,"updated":"2015-08-06 14:36:28.000000000","message":"unnecessary change","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":136,"context_line":"         ret_val) \u003d vs_man_svc.DefineSystem(ResourceSettings\u003d[],"},{"line_number":137,"context_line":"                                            ReferenceConfiguration\u003dNone,"},{"line_number":138,"context_line":"                                            SystemSettings\u003dvs_data.GetText_(1))"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        job \u003d self.check_ret_val(ret_val, job_path)"},{"line_number":141,"context_line":"        if not vm_path and job:"},{"line_number":142,"context_line":"            vm_path \u003d job.associators(self._AFFECTED_JOB_ELEMENT_CLASS)[0]"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_8787fbb3","line":139,"in_reply_to":"1a4dcd0f_3e33caac","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d8693b6c1bfd4d65baf6a4edd2a004eb95bf63b1","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        return [note for note in vmsettings.Notes if note]"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def set_secure_boot(self, vs_data):"},{"line_number":346,"context_line":"        LOG.error(_LE(\u0027UEFI SecureBoot not supported\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_feea4273","line":346,"updated":"2015-08-06 14:36:28.000000000","message":"Just logging an error would still cause the VM to be spawned, in this case, without the requested feature, which is wrong.\n\nBut that\u0027s not the point.\n\nvmutilsv2 is used by both Hyper-V 2012 and Hyper-V 2012 R2. In the spec, I\u0027ve mentioned that 2012 R2 still has SecureBoot option, but only for Windows guests. Which means, this method should still set the SecureBoot option, while vmops will have to make sure that this method will be called apropriately (e.g.: if guest_os \u003d\u003d windows and os_version \u003d\u003d 6.3 or guest_os \u003d\u003d linux and os_version \u003d\u003d 10.0)","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"044482c19e3b1bddb0b26c07d9bf4b9c4f5eec8e","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        return [note for note in vmsettings.Notes if note]"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def set_secure_boot(self, vs_data):"},{"line_number":346,"context_line":"        LOG.error(_LE(\u0027UEFI SecureBoot not supported\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_07c20be9","line":346,"in_reply_to":"1a4dcd0f_feea4273","updated":"2015-09-01 11:59:24.000000000","message":"Done","commit_id":"662d3e3b1483f66fdea89092237b5e6259dcd2bb"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"9590df41e9d3a2e0e7475a9e8220aadb7a772b87","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        if config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027windows\u0027:"},{"line_number":350,"context_line":"            vs_data.SecureBootEnabled \u003d config_secure_boot[\u0027secure_boot\u0027]"},{"line_number":351,"context_line":"        else:"},{"line_number":352,"context_line":"            LOG.error(_LE(\u0027UEFI SecureBoot not supported\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_a6c084e1","line":352,"updated":"2015-08-19 12:25:46.000000000","message":"Could be a little more specific, like UEFI not supported on this os type %(os_type)s. Also, shouldn\u0027t this raise an exception?","commit_id":"c0403b8519398e3d94d73c1608ad08afc52a2bea"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"d8a2ca85d419284f5be81923fb3a221abc2306d2","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        if config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027windows\u0027:"},{"line_number":350,"context_line":"            vs_data.SecureBootEnabled \u003d config_secure_boot[\u0027secure_boot\u0027]"},{"line_number":351,"context_line":"        else:"},{"line_number":352,"context_line":"            LOG.error(_LE(\u0027UEFI SecureBoot not supported\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_7a383ed3","line":352,"in_reply_to":"fa1b9901_a6c084e1","updated":"2015-09-01 12:01:48.000000000","message":"Done","commit_id":"c0403b8519398e3d94d73c1608ad08afc52a2bea"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"10d17b42ba1235b0f2254f4f15e767ca33a51291","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        vs_data \u003d self._conn.Msvm_VirtualSystemSettingData.new()"},{"line_number":112,"context_line":"        vs_data.ElementName \u003d vm_name"},{"line_number":113,"context_line":"        vs_data.Notes \u003d notes"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        # Don\u0027t start automatically on host boot"},{"line_number":116,"context_line":"        vs_data.AutomaticStartupAction \u003d self._AUTOMATIC_STARTUP_ACTION_NONE"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_b7439841","line":114,"updated":"2015-08-20 11:47:58.000000000","message":"Unrelated change.","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"40067583df05067f0f19751ac085a999d1a6b422","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        vs_data \u003d self._conn.Msvm_VirtualSystemSettingData.new()"},{"line_number":112,"context_line":"        vs_data.ElementName \u003d vm_name"},{"line_number":113,"context_line":"        vs_data.Notes \u003d notes"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        # Don\u0027t start automatically on host boot"},{"line_number":116,"context_line":"        vs_data.AutomaticStartupAction \u003d self._AUTOMATIC_STARTUP_ACTION_NONE"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_3cbabd0b","line":114,"in_reply_to":"fa1b9901_b7439841","updated":"2015-09-01 14:08:53.000000000","message":"Done","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"10d17b42ba1235b0f2254f4f15e767ca33a51291","unresolved":false,"context_lines":[{"line_number":140,"context_line":"         ret_val) \u003d vs_man_svc.DefineSystem(ResourceSettings\u003d[],"},{"line_number":141,"context_line":"                                            ReferenceConfiguration\u003dNone,"},{"line_number":142,"context_line":"                                            SystemSettings\u003dvs_data.GetText_(1))"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        job \u003d self.check_ret_val(ret_val, job_path)"},{"line_number":145,"context_line":"        if not vm_path and job:"},{"line_number":146,"context_line":"            vm_path \u003d job.associators(self._AFFECTED_JOB_ELEMENT_CLASS)[0]"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_3784685c","line":143,"updated":"2015-08-20 11:47:58.000000000","message":"ditto","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"40067583df05067f0f19751ac085a999d1a6b422","unresolved":false,"context_lines":[{"line_number":140,"context_line":"         ret_val) \u003d vs_man_svc.DefineSystem(ResourceSettings\u003d[],"},{"line_number":141,"context_line":"                                            ReferenceConfiguration\u003dNone,"},{"line_number":142,"context_line":"                                            SystemSettings\u003dvs_data.GetText_(1))"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        job \u003d self.check_ret_val(ret_val, job_path)"},{"line_number":145,"context_line":"        if not vm_path and job:"},{"line_number":146,"context_line":"            vm_path \u003d job.associators(self._AFFECTED_JOB_ELEMENT_CLASS)[0]"}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_bc448d1b","line":143,"in_reply_to":"fa1b9901_3784685c","updated":"2015-09-01 14:08:53.000000000","message":"Done","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"10d17b42ba1235b0f2254f4f15e767ca33a51291","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        if config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027windows\u0027:"},{"line_number":351,"context_line":"            vs_data.SecureBootEnabled \u003d config_secure_boot[\u0027secure_boot\u0027]"},{"line_number":352,"context_line":"        else:"},{"line_number":353,"context_line":"            LOG.error(_LE(\u0027UEFI SecureBoot not supported\u0027))"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_771e60bc","line":353,"updated":"2015-08-20 11:47:58.000000000","message":"You should raise an exception in this case.\n\nAlso, set_secure_boot is always called, considering the check at line 134 and the fact that this dict will never be empty. So, what if the os type image property is not set, or it is set to \u0027linux\u0027 but secure boot is not requested?","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"40067583df05067f0f19751ac085a999d1a6b422","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        if config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027windows\u0027:"},{"line_number":351,"context_line":"            vs_data.SecureBootEnabled \u003d config_secure_boot[\u0027secure_boot\u0027]"},{"line_number":352,"context_line":"        else:"},{"line_number":353,"context_line":"            LOG.error(_LE(\u0027UEFI SecureBoot not supported\u0027))"}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_3cff1dac","line":353,"in_reply_to":"fa1b9901_771e60bc","updated":"2015-09-01 14:08:53.000000000","message":"Done","commit_id":"a7b587b3e2c350616d42e037b90ea9c9ea621346"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c179b50044f3934f43c1cc1ffc0755b88d745da2","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        vs_data \u003d self._conn.Msvm_VirtualSystemSettingData.new()"},{"line_number":112,"context_line":"        vs_data.ElementName \u003d vm_name"},{"line_number":113,"context_line":"        vs_data.Notes \u003d notes"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        # Don\u0027t start automatically on host boot"},{"line_number":116,"context_line":"        vs_data.AutomaticStartupAction \u003d self._AUTOMATIC_STARTUP_ACTION_NONE"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_d0756732","line":114,"updated":"2015-08-24 11:44:42.000000000","message":"unrelated change.","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"e07ec233946b3dcbcb15388aeb44894288f7cf62","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        vs_data \u003d self._conn.Msvm_VirtualSystemSettingData.new()"},{"line_number":112,"context_line":"        vs_data.ElementName \u003d vm_name"},{"line_number":113,"context_line":"        vs_data.Notes \u003d notes"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        # Don\u0027t start automatically on host boot"},{"line_number":116,"context_line":"        vs_data.AutomaticStartupAction \u003d self._AUTOMATIC_STARTUP_ACTION_NONE"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_02d147cd","line":114,"in_reply_to":"fa1b9901_d0756732","updated":"2015-08-24 15:25:10.000000000","message":"Done","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c179b50044f3934f43c1cc1ffc0755b88d745da2","unresolved":false,"context_lines":[{"line_number":140,"context_line":"         ret_val) \u003d vs_man_svc.DefineSystem(ResourceSettings\u003d[],"},{"line_number":141,"context_line":"                                            ReferenceConfiguration\u003dNone,"},{"line_number":142,"context_line":"                                            SystemSettings\u003dvs_data.GetText_(1))"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        job \u003d self.check_ret_val(ret_val, job_path)"},{"line_number":145,"context_line":"        if not vm_path and job:"},{"line_number":146,"context_line":"            vm_path \u003d job.associators(self._AFFECTED_JOB_ELEMENT_CLASS)[0]"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_508157fa","line":143,"updated":"2015-08-24 11:44:42.000000000","message":"unrelated change.","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"e07ec233946b3dcbcb15388aeb44894288f7cf62","unresolved":false,"context_lines":[{"line_number":140,"context_line":"         ret_val) \u003d vs_man_svc.DefineSystem(ResourceSettings\u003d[],"},{"line_number":141,"context_line":"                                            ReferenceConfiguration\u003dNone,"},{"line_number":142,"context_line":"                                            SystemSettings\u003dvs_data.GetText_(1))"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        job \u003d self.check_ret_val(ret_val, job_path)"},{"line_number":145,"context_line":"        if not vm_path and job:"},{"line_number":146,"context_line":"            vm_path \u003d job.associators(self._AFFECTED_JOB_ELEMENT_CLASS)[0]"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_c2db4fec","line":143,"in_reply_to":"fa1b9901_508157fa","updated":"2015-08-24 15:25:10.000000000","message":"Done","commit_id":"a735639d843f2b742cd65c8b9eaee4f199af2f06"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        vs_data \u003d self._conn.Msvm_VirtualSystemSettingData.new()"},{"line_number":112,"context_line":"        vs_data.ElementName \u003d vm_name"},{"line_number":113,"context_line":"        vs_data.Notes \u003d notes"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        # Don\u0027t start automatically on host boot"},{"line_number":116,"context_line":"        vs_data.AutomaticStartupAction \u003d self._AUTOMATIC_STARTUP_ACTION_NONE"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_7fcb4773","line":114,"updated":"2015-08-26 16:51:23.000000000","message":"unrelated change.","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        return [note for note in vmsettings.Notes if note]"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def set_secure_boot(self, vs_data, config_secure_boot):"},{"line_number":349,"context_line":"        if config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027windows\u0027:"},{"line_number":350,"context_line":"            vs_data.SecureBootEnabled \u003d config_secure_boot[\u0027secure_boot\u0027]"},{"line_number":351,"context_line":"        else:"},{"line_number":352,"context_line":"            LOG.error(_LE(\u0027UEFI SecureBoot not supported on os %s\u0027),"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_bfa31f4f","line":349,"updated":"2015-08-26 16:51:23.000000000","message":"this if is not necessary. If the validation in vmops is done properly, the only case set_secure_boot on 2012 r2 is if os_type is windows already.","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        return [note for note in vmsettings.Notes if note]"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def set_secure_boot(self, vs_data, config_secure_boot):"},{"line_number":349,"context_line":"        if config_secure_boot[\u0027os\u0027] \u003d\u003d \u0027windows\u0027:"},{"line_number":350,"context_line":"            vs_data.SecureBootEnabled \u003d config_secure_boot[\u0027secure_boot\u0027]"},{"line_number":351,"context_line":"        else:"},{"line_number":352,"context_line":"            LOG.error(_LE(\u0027UEFI SecureBoot not supported on os %s\u0027),"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_447b21be","line":349,"in_reply_to":"da20952f_bfa31f4f","updated":"2015-09-01 11:45:40.000000000","message":"See my comment regarding the validation done in vmops.","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b15c432ebb1231a078786a07c8e783427b1a1e45","unresolved":false,"context_lines":[{"line_number":353,"context_line":"                      config_secure_boot[\u0027os\u0027])"},{"line_number":354,"context_line":"            raise vmutils.HyperVException("},{"line_number":355,"context_line":"                _(\u0027UEFI SecureBoot not supported on os %s\u0027),"},{"line_number":356,"context_line":"                config_secure_boot[\u0027os\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_9f989b6c","line":356,"updated":"2015-08-26 16:51:23.000000000","message":"the code path shouldn\u0027t reach here, ever, since all the validation is / should be done in vmops.","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":12582,"name":"Simona Iuliana Toader","email":"itoader@cloudbasesolutions.com","username":"itoader"},"change_message_id":"6363f121f06ff5af32590424980d41ae1ce86d09","unresolved":false,"context_lines":[{"line_number":353,"context_line":"                      config_secure_boot[\u0027os\u0027])"},{"line_number":354,"context_line":"            raise vmutils.HyperVException("},{"line_number":355,"context_line":"                _(\u0027UEFI SecureBoot not supported on os %s\u0027),"},{"line_number":356,"context_line":"                config_secure_boot[\u0027os\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_a4423d66","line":356,"in_reply_to":"da20952f_9f989b6c","updated":"2015-09-01 11:45:40.000000000","message":"See my comment regarding the validation done in vmops.","commit_id":"3e7c6cba81a9fbc736e17220d90dba72f6346a33"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"01069133edbcd5d58811df3e158fd44aaf9c2151","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def _create_vm_obj(self, vs_man_svc, vm_name, vm_gen, notes,"},{"line_number":108,"context_line":"                       dynamic_memory_ratio, instance_path):"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        vs_data \u003d self._conn.Msvm_VirtualSystemSettingData.new()"},{"line_number":111,"context_line":"        vs_data.ElementName \u003d vm_name"},{"line_number":112,"context_line":"        vs_data.Notes \u003d notes"}],"source_content_type":"text/x-python","patch_set":20,"id":"da20952f_565d7745","line":109,"updated":"2015-09-04 10:16:27.000000000","message":"unrelated change.","commit_id":"2f46fe48340ac9412c72e83e7bab643e7ff8103a"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"773f68954286876d38dfcedc64735c6496626df2","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def _create_vm_obj(self, vs_man_svc, vm_name, vm_gen, notes,"},{"line_number":109,"context_line":"                       dynamic_memory_ratio, instance_path):"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        vs_data \u003d self._conn.Msvm_VirtualSystemSettingData.new()"},{"line_number":112,"context_line":"        vs_data.ElementName \u003d vm_name"},{"line_number":113,"context_line":"        vs_data.Notes \u003d notes"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a29b11f_03acdc32","line":110,"updated":"2015-10-20 12:14:04.000000000","message":"unrelated change","commit_id":"957d2bc23778270d51fe6e4de9c36af01bf78a5d"}],"releasenotes/notes/hyperv-uefi-secure-boot-a2a617ac2c313afd.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6a877ee8f154a9cf943c6a97ef9fa94d2d113cf8","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added support for Hyper-V VMs with UEFI Secure Boot enabled."},{"line_number":5,"context_line":"    In order to create such VMs, there are a couple of things to consider::"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"      * Images should be prepared for Generation 2 VMs. The image property"},{"line_number":8,"context_line":"        \"hw_machine_type\u003dhyperv-gen2\" is mandatory."}],"source_content_type":"text/x-yaml","patch_set":46,"id":"5a8bc5a2_870d8092","line":5,"range":{"start_line":5,"start_character":73,"end_line":5,"end_character":75},"updated":"2016-09-23 19:50:42.000000000","message":"nit: this creates a code block, which we don\u0027t need, just a set of sub-bullets.","commit_id":"131f328994ae54221aec300eb6fff1627786ce79"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"57900de2dc731c36c970dcacf4db25a7b2a0619b","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added support for Hyper-V VMs with UEFI Secure Boot enabled."},{"line_number":5,"context_line":"    In order to create such VMs, there are a couple of things to consider::"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"      * Images should be prepared for Generation 2 VMs. The image property"},{"line_number":8,"context_line":"        \"hw_machine_type\u003dhyperv-gen2\" is mandatory."}],"source_content_type":"text/x-yaml","patch_set":46,"id":"5a8bc5a2_8a590501","line":5,"range":{"start_line":5,"start_character":73,"end_line":5,"end_character":75},"in_reply_to":"5a8bc5a2_870d8092","updated":"2016-09-23 20:07:18.000000000","message":"Done","commit_id":"131f328994ae54221aec300eb6fff1627786ce79"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6a877ee8f154a9cf943c6a97ef9fa94d2d113cf8","unresolved":false,"context_lines":[{"line_number":11,"context_line":"        acceptable values are \"windows\" or \"linux\"."},{"line_number":12,"context_line":"      * The UEFI Secure Boot feature can be requested through the image property"},{"line_number":13,"context_line":"        \"os_secure_boot\" (acceptable values: \"disabled\", \"optional\", \"required\")"},{"line_number":14,"context_line":"        or flavor extra spec \"os:secure_boot\" (acceptable value: \"required\")."},{"line_number":15,"context_line":"        The flavor extra spec will take precedence. If the image property"},{"line_number":16,"context_line":"        and the flavor extra spec values are conflicting, then an exception"},{"line_number":17,"context_line":"        is raised."}],"source_content_type":"text/x-yaml","patch_set":46,"id":"5a8bc5a2_2774acfb","line":14,"range":{"start_line":14,"start_character":66,"end_line":14,"end_character":74},"updated":"2016-09-23 19:50:42.000000000","message":"Couldn\u0027t this also contain \u0027disabled\u0027 for a flavor extra spec based on the check here?\n\nhttps://review.openstack.org/#/c/209581/46/nova/virt/hyperv/vmops.py@481","commit_id":"131f328994ae54221aec300eb6fff1627786ce79"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"57900de2dc731c36c970dcacf4db25a7b2a0619b","unresolved":false,"context_lines":[{"line_number":11,"context_line":"        acceptable values are \"windows\" or \"linux\"."},{"line_number":12,"context_line":"      * The UEFI Secure Boot feature can be requested through the image property"},{"line_number":13,"context_line":"        \"os_secure_boot\" (acceptable values: \"disabled\", \"optional\", \"required\")"},{"line_number":14,"context_line":"        or flavor extra spec \"os:secure_boot\" (acceptable value: \"required\")."},{"line_number":15,"context_line":"        The flavor extra spec will take precedence. If the image property"},{"line_number":16,"context_line":"        and the flavor extra spec values are conflicting, then an exception"},{"line_number":17,"context_line":"        is raised."}],"source_content_type":"text/x-yaml","patch_set":46,"id":"5a8bc5a2_6a62f9ae","line":14,"range":{"start_line":14,"start_character":66,"end_line":14,"end_character":74},"in_reply_to":"5a8bc5a2_2774acfb","updated":"2016-09-23 20:07:18.000000000","message":"Done","commit_id":"131f328994ae54221aec300eb6fff1627786ce79"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"17dfafebda0564bf870571523b3f51ee295fcf11","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Added support for Hyper-V VMs with UEFI Secure Boot enabled."},{"line_number":5,"context_line":"    In order to create such VMs, there are a couple of things to consider:"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"      * Images should be prepared for Generation 2 VMs. The image property"},{"line_number":8,"context_line":"        \"hw_machine_type\u003dhyperv-gen2\" is mandatory."},{"line_number":9,"context_line":"      * The guest OS type must be specified in order to properly spawn the VMs."},{"line_number":10,"context_line":"        It can be specifed through the image property \"os_type\", and the"}],"source_content_type":"text/x-yaml","patch_set":47,"id":"5a8bc5a2_ca0dcd3f","line":7,"updated":"2016-09-23 20:31:03.000000000","message":"nit: these show up indented one tab too far, we should drop it back a level.","commit_id":"2da01b672dc35238bb100d0d9da0ebd4105d2c1f"}]}
