)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"8f8a471c8138dfb73dcf599f8f2413273a7caddb","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This change set adds config drive support for the PowerVM nova driver."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Ieaf271d21cd9bd22ec1433d0b30bb4a7158c5707"},{"line_number":12,"context_line":"Partially-Implements: blueprint powervm-nova-compute-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"5f2577a7_de26d6ce","line":12,"range":{"start_line":12,"start_character":32,"end_line":12,"end_character":59},"updated":"2017-09-15 13:26:30.000000000","message":"powervm-nova-it-compute-driver","commit_id":"5d06ba31e8c2f82784b579fbeb460d89e3231871"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"0662fb6ecc5f8f50e2b96e1f87205547a7266e8b","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This change set adds config drive support for the PowerVM nova driver."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Ieaf271d21cd9bd22ec1433d0b30bb4a7158c5707"},{"line_number":12,"context_line":"Partially-Implements: blueprint powervm-nova-compute-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"9f5c4f37_2721dbb5","line":12,"range":{"start_line":12,"start_character":32,"end_line":12,"end_character":59},"in_reply_to":"5f2577a7_de26d6ce","updated":"2017-09-21 17:55:43.000000000","message":"Done","commit_id":"5d06ba31e8c2f82784b579fbeb460d89e3231871"}],"nova/conf/powervm.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d281e034bb1aedd4f5116cd94676198a06a7cfb3","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                    \u0027duplicated.\u0027)"},{"line_number":77,"context_line":"]"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"ALL_OPTS \u003d list(itertools.chain("},{"line_number":80,"context_line":"    cpu_opts,"},{"line_number":81,"context_line":"    build_opts,"},{"line_number":82,"context_line":"    localdisk_opts,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_898f5f22","line":79,"range":{"start_line":79,"start_character":11,"end_line":79,"end_character":32},"updated":"2017-01-03 20:46:43.000000000","message":"Rebase on previous change sets in this sequence: use \u0027+\u0027 instead of itertools.chain.","commit_id":"cd7c6035b17eef329059a531c57661845efd7a55"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"d1fbb571af5e3b504645d67fc4314a533d3e829a","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                    \u0027duplicated.\u0027)"},{"line_number":77,"context_line":"]"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"ALL_OPTS \u003d list(itertools.chain("},{"line_number":80,"context_line":"    cpu_opts,"},{"line_number":81,"context_line":"    build_opts,"},{"line_number":82,"context_line":"    localdisk_opts,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_7e0a818b","line":79,"range":{"start_line":79,"start_character":11,"end_line":79,"end_character":32},"in_reply_to":"ba5201f7_898f5f22","updated":"2017-01-06 07:33:27.000000000","message":"Done","commit_id":"cd7c6035b17eef329059a531c57661845efd7a55"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"02f7e0f42d237f57560b42d2960f71e34c521de5","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"The volume group on the system that should be used"},{"line_number":66,"context_line":"to store the config drive metadata that will be attached"},{"line_number":67,"context_line":"to VMs.  If not specified and no media repository exists, rootvg will be used."},{"line_number":68,"context_line":"This option is ignored if a media repository already exists."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Possible values:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a57fde8_2758a0fa","line":67,"range":{"start_line":67,"start_character":58,"end_line":67,"end_character":78},"updated":"2017-01-12 14:13:09.000000000","message":"this line is longer than the others...does it pass pep8?\n\nJust looks a bit odd.","commit_id":"a616883e5382984bd45308aa2ff298bcde6799d6"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"cdd38745aea171e19474b6be81860d0c6278c22d","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  None"},{"line_number":67,"context_line":"\"\"\"),"},{"line_number":68,"context_line":"    cfg.IntOpt(\u0027vopt_media_rep_size\u0027,"},{"line_number":69,"context_line":"               default\u003d1, min\u003d1,"},{"line_number":70,"context_line":"               help\u003d\"\"\""},{"line_number":71,"context_line":"The size of the media repository (in GB) for the metadata for config drive."},{"line_number":72,"context_line":"Only used if the media repository needs to be created."}],"source_content_type":"text/x-python","patch_set":15,"id":"da36d5c6_acbe4bd2","line":69,"range":{"start_line":69,"start_character":23,"end_line":69,"end_character":24},"updated":"2017-02-17 20:12:12.000000000","message":"History is now telling me this should be 2.\n\n1000 VMs can actually kinda fill that up.","commit_id":"87a7df9caeefb6b0343b9e680ee22eb07cb0620e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"02a67bda29e3c5464470ce96858a2f354516d72b","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  None"},{"line_number":67,"context_line":"\"\"\"),"},{"line_number":68,"context_line":"    cfg.IntOpt(\u0027vopt_media_rep_size\u0027,"},{"line_number":69,"context_line":"               default\u003d1, min\u003d1,"},{"line_number":70,"context_line":"               help\u003d\"\"\""},{"line_number":71,"context_line":"The size of the media repository (in GB) for the metadata for config drive."},{"line_number":72,"context_line":"Only used if the media repository needs to be created."}],"source_content_type":"text/x-python","patch_set":15,"id":"ffe62b97_ac6365dc","line":69,"range":{"start_line":69,"start_character":23,"end_line":69,"end_character":24},"in_reply_to":"da36d5c6_acbe4bd2","updated":"2017-03-24 19:23:02.000000000","message":"I\u0027m making this change set config-less for now, and bumping this to 2 in the (hardcoded) const.\n\nThe default in pypowervm is actually 1.  Should we bump that?","commit_id":"87a7df9caeefb6b0343b9e680ee22eb07cb0620e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0dead55d7aaf6e7efadfe60d5e794dad80aff28b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":33,"id":"7f515b1d_606519e1","line":1,"updated":"2017-09-26 20:52:36.000000000","message":"Nah, let\u0027s keep the conf out of the picture for now and continue to use the hardcoded defaults.","commit_id":"39a169c99124ef40075dd6c415259e3de7038dcf"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"793a369bb001c5853cab7903f5bc5d7ac950cb74","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":33,"id":"7f515b1d_40e57da7","line":1,"in_reply_to":"7f515b1d_606519e1","updated":"2017-09-26 21:11:59.000000000","message":"Done","commit_id":"39a169c99124ef40075dd6c415259e3de7038dcf"}],"nova/tests/unit/virt/powervm/tasks/test_storage.py":[{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"daf43793b0576a814dcddc825e62bfdf2579809b","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    def test_detach_disk(self):"},{"line_number":91,"context_line":"        task \u003d tf_stg.DetachDisk(self.disk_dvr, self.instance)"},{"line_number":92,"context_line":"        task.execute()"},{"line_number":93,"context_line":"        self.disk_dvr.detach_disk.assert_called_once_with("},{"line_number":94,"context_line":"            self.instance)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def test_attach_disk(self):"},{"line_number":97,"context_line":"        stg_ftsk \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":38,"id":"3f4b6375_b8e1da9d","line":94,"range":{"start_line":93,"start_character":0,"end_line":94,"end_character":26},"updated":"2017-10-25 02:38:38.000000000","message":"one line please","commit_id":"36a6c140ca825264226945877aee5b0d3d9ceb8a"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"98327c65d72771688e93eb2d492b7e72206ce86f","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    def test_detach_disk(self):"},{"line_number":91,"context_line":"        task \u003d tf_stg.DetachDisk(self.disk_dvr, self.instance)"},{"line_number":92,"context_line":"        task.execute()"},{"line_number":93,"context_line":"        self.disk_dvr.detach_disk.assert_called_once_with("},{"line_number":94,"context_line":"            self.instance)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def test_attach_disk(self):"},{"line_number":97,"context_line":"        stg_ftsk \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":38,"id":"3f4b6375_4267f352","line":94,"range":{"start_line":93,"start_character":0,"end_line":94,"end_character":26},"in_reply_to":"3f4b6375_b8e1da9d","updated":"2017-10-31 14:42:31.000000000","message":"Done","commit_id":"36a6c140ca825264226945877aee5b0d3d9ceb8a"}],"nova/tests/unit/virt/powervm/test_driver.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"1a261acfb6e9e55051cbabaefb823100665adbe0","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        self.drv.destroy(\u0027context\u0027, self.inst, [], block_device_info\u003d{})"},{"line_number":173,"context_line":"        self.pwroff.assert_called_once_with("},{"line_number":174,"context_line":"            self.adp, self.inst, force_immediate\u003dTrue)"},{"line_number":175,"context_line":"        mock_bldftsk.assert_called_once_with("},{"line_number":176,"context_line":"            self.adp, xag\u003d[pvm_const.XAG.VIO_SMAP])"},{"line_number":177,"context_line":"        mock_cdrb.assert_called_once_with(self.inst)"},{"line_number":178,"context_line":"        mock_cfgdrv.assert_called_once_with(self.adp, \u0027host_uuid\u0027)"},{"line_number":179,"context_line":"        mock_cfgdrv.return_value.dlt_vopt.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":21,"id":"dfeb2761_8546d4bf","line":176,"range":{"start_line":175,"start_character":0,"end_line":176,"end_character":51},"updated":"2017-04-04 19:23:04.000000000","message":"Set a \"real\" FeedTask as the return_value for mock_bldftsk and verify the subtasks therein.","commit_id":"261868c5970533ee91bdd8c45756130a4c13e566"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"77c62c76a06f415ba3a20708c0ce1138bcc888e9","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        mock_cdrb.assert_called_once_with(self.inst)"},{"line_number":200,"context_line":"        mock_cfgdrv.assert_not_called()"},{"line_number":201,"context_line":"        mock_cfgdrv.return_value.dlt_vopt.assert_not_called()"},{"line_number":202,"context_line":"        self.drv.disk_dvr.disconnect_disk.assert_called_once_with("},{"line_number":203,"context_line":"            self.inst, mock_bldftsk.return_value)"},{"line_number":204,"context_line":"        self.drv.disk_dvr.delete_disks.assert_not_called()"},{"line_number":205,"context_line":"        self.uuid.assert_called_once_with(self.inst)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f287b81_45217e4d","line":202,"range":{"start_line":202,"start_character":26,"end_line":202,"end_character":41},"updated":"2017-08-22 19:16:07.000000000","message":"detach_disk","commit_id":"2393f85e5ded1a2d7ecdcca1199f4439f82eeb93"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"4a72b8000286f034bbd9d79cc223c03b8cfe27f6","unresolved":false,"context_lines":[{"line_number":178,"context_line":"            self.drv.disk_dvr.detach_disk.return_value)"},{"line_number":179,"context_line":"        mock_dlt_lpar.assert_called_once_with(self.adp, self.inst)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        # Other random exception raises directly"},{"line_number":182,"context_line":"        mock_dlt_lpar.side_effect \u003d ValueError()"},{"line_number":183,"context_line":"        self.assertRaises(ValueError,"},{"line_number":184,"context_line":"                          self.drv.destroy, \u0027context\u0027, self.inst, [],"},{"line_number":185,"context_line":"                          block_device_info\u003d{})"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def test_power_on(self):"},{"line_number":188,"context_line":"        self.drv.power_on(\u0027context\u0027, self.inst, \u0027network_info\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_726f3e92","side":"PARENT","line":185,"range":{"start_line":181,"start_character":8,"end_line":185,"end_character":47},"updated":"2017-08-25 16:28:19.000000000","message":"Put this back in","commit_id":"b7e0f6dc75d7ec43df9b945fc25c78d84e36d909"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"4a72b8000286f034bbd9d79cc223c03b8cfe27f6","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        mock_cdrb.return_value \u003d False"},{"line_number":192,"context_line":"        self.drv.destroy(\u0027context\u0027, self.inst, [], block_device_info\u003d{},"},{"line_number":193,"context_line":"                         destroy_disks\u003dFalse)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        # Non-forced power_off, since preserving disks"},{"line_number":196,"context_line":"        self.pwroff.assert_called_once_with("},{"line_number":197,"context_line":"            self.adp, self.inst, force_immediate\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_cd9f7301","line":194,"updated":"2017-08-25 16:28:19.000000000","message":"Add assertions that DeleteVOpt, DeleteDisk not called","commit_id":"b1222f43d68f8e65096679e4dcf86eafff03b4ee"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"126f57c8a3db7f0c26af1b60cc6a2038d4df7f4f","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                                                 instance\u003dTrue)"},{"line_number":128,"context_line":"        mock_ftsk \u003d pvm_tx.FeedTask(\u0027fake\u0027, [mock.Mock(spec\u003dpvm_vios.VIOS)])"},{"line_number":129,"context_line":"        mock_bldftsk.return_value \u003d mock_ftsk"},{"line_number":130,"context_line":"        self.drv.spawn(\u0027context\u0027, self.inst, \u0027img_meta\u0027, \u0027files\u0027, \u0027password\u0027,"},{"line_number":131,"context_line":"                       \u0027allocs\u0027, network_info\u003d\u0027netinfo\u0027)"},{"line_number":132,"context_line":"        mock_crt_lpar.assert_called_once_with("},{"line_number":133,"context_line":"            self.adp, self.drv.host_wrapper, self.inst)"},{"line_number":134,"context_line":"        mock_bldftsk.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":44,"id":"3f4b6375_180b208e","line":131,"range":{"start_line":130,"start_character":45,"end_line":131,"end_character":55},"updated":"2017-11-06 16:40:36.000000000","message":"instead of strings like this, consider using mock.sentinel in the future to indicate that these are NOT the actual arguments to the function, just representative of them...","commit_id":"4e980778c8f28ea564db8e92442b369a4b284855"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"426af8261154275a0fdc1c661597258362790b40","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                                                 instance\u003dTrue)"},{"line_number":128,"context_line":"        mock_ftsk \u003d pvm_tx.FeedTask(\u0027fake\u0027, [mock.Mock(spec\u003dpvm_vios.VIOS)])"},{"line_number":129,"context_line":"        mock_bldftsk.return_value \u003d mock_ftsk"},{"line_number":130,"context_line":"        self.drv.spawn(\u0027context\u0027, self.inst, \u0027img_meta\u0027, \u0027files\u0027, \u0027password\u0027,"},{"line_number":131,"context_line":"                       \u0027allocs\u0027, network_info\u003d\u0027netinfo\u0027)"},{"line_number":132,"context_line":"        mock_crt_lpar.assert_called_once_with("},{"line_number":133,"context_line":"            self.adp, self.drv.host_wrapper, self.inst)"},{"line_number":134,"context_line":"        mock_bldftsk.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":44,"id":"3f4b6375_c95a5cf0","line":131,"range":{"start_line":130,"start_character":45,"end_line":131,"end_character":55},"in_reply_to":"3f4b6375_180b208e","updated":"2017-11-06 19:18:25.000000000","message":"Noted. Will keep this in mind for future changes. I\u0027m not going to address in this review as there are other unrelated tests that also need to be updated.","commit_id":"4e980778c8f28ea564db8e92442b369a4b284855"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"126f57c8a3db7f0c26af1b60cc6a2038d4df7f4f","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        self.assertRaises(exception.InstanceTerminationFailure,"},{"line_number":240,"context_line":"                          self.drv.destroy, \u0027context\u0027, self.inst, [],"},{"line_number":241,"context_line":"                          block_device_info\u003d{})"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        # Everything got called"},{"line_number":244,"context_line":"        self.pwroff.assert_called_once_with("},{"line_number":245,"context_line":"            self.adp, self.inst, force_immediate\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":44,"id":"3f4b6375_98f6f08e","line":242,"updated":"2017-11-06 16:40:36.000000000","message":"unrelated whitespace.","commit_id":"4e980778c8f28ea564db8e92442b369a4b284855"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"426af8261154275a0fdc1c661597258362790b40","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        self.assertRaises(exception.InstanceTerminationFailure,"},{"line_number":240,"context_line":"                          self.drv.destroy, \u0027context\u0027, self.inst, [],"},{"line_number":241,"context_line":"                          block_device_info\u003d{})"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        # Everything got called"},{"line_number":244,"context_line":"        self.pwroff.assert_called_once_with("},{"line_number":245,"context_line":"            self.adp, self.inst, force_immediate\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":44,"id":"3f4b6375_c9281c34","line":242,"in_reply_to":"3f4b6375_98f6f08e","updated":"2017-11-06 19:18:25.000000000","message":"Unrelated, but I\u0027d say it helps readability. Gonna leave it unless you feel strongly otherwise.","commit_id":"4e980778c8f28ea564db8e92442b369a4b284855"}],"nova/tests/unit/virt/powervm/test_media.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cee014051b69c1b1b5da6d6d7774a2365b759954","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        cfg_dr_builder \u003d m.ConfigDrivePowerVM(self.apt)"},{"line_number":55,"context_line":"        mock_instance \u003d mock.MagicMock()"},{"line_number":56,"context_line":"        mock_instance.name \u003d \u0027fake-instance\u0027"},{"line_number":57,"context_line":"        mock_instance.uuid \u003d \u00271e46bbfd-73b6-3c2a-aeab-a1d3f065e92f\u0027"},{"line_number":58,"context_line":"        mock_files \u003d mock.MagicMock()"},{"line_number":59,"context_line":"        mock_net \u003d mock.MagicMock()"},{"line_number":60,"context_line":"        iso_path, file_name \u003d cfg_dr_builder._create_cfg_dr_iso(mock_instance,"}],"source_content_type":"text/x-python","patch_set":31,"id":"df6247ed_497d21e6","line":57,"range":{"start_line":57,"start_character":30,"end_line":57,"end_character":67},"updated":"2017-09-19 21:26:29.000000000","message":"use sentinel","commit_id":"b857bb5fc404eb3348748c3ba6d397d566f16de2"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"26832044c726ec16d41711c45fd48ea93ba6216a","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        cfg_dr_builder \u003d m.ConfigDrivePowerVM(self.apt)"},{"line_number":55,"context_line":"        mock_instance \u003d mock.MagicMock()"},{"line_number":56,"context_line":"        mock_instance.name \u003d \u0027fake-instance\u0027"},{"line_number":57,"context_line":"        mock_instance.uuid \u003d \u00271e46bbfd-73b6-3c2a-aeab-a1d3f065e92f\u0027"},{"line_number":58,"context_line":"        mock_files \u003d mock.MagicMock()"},{"line_number":59,"context_line":"        mock_net \u003d mock.MagicMock()"},{"line_number":60,"context_line":"        iso_path, file_name \u003d cfg_dr_builder._create_cfg_dr_iso(mock_instance,"}],"source_content_type":"text/x-python","patch_set":31,"id":"9f5c4f37_0e0a7925","line":57,"range":{"start_line":57,"start_character":30,"end_line":57,"end_character":67},"in_reply_to":"df6247ed_497d21e6","updated":"2017-09-21 14:01:32.000000000","message":"Done","commit_id":"b857bb5fc404eb3348748c3ba6d397d566f16de2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"88e2340e6b9d665e81c947b11e6fbbaf06c54905","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from nova.virt.powervm import media as m"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class TestConfigDrivePowerVM(test.TestCase):"},{"line_number":38,"context_line":"    \"\"\"Unit Tests for the ConfigDrivePowerVM class.\"\"\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":46,"id":"3f4b6375_b285325c","line":37,"range":{"start_line":37,"start_character":34,"end_line":37,"end_character":42},"updated":"2017-11-07 14:54:58.000000000","message":"Just noticed this, but this should be NoDBTestCase otherwise the test case setup will run all the DB schema migrations unnecessarily...","commit_id":"925ec5940f218159737f6151769d1634b1bf71e0"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"f8eadb7c38d0ff52474af4dd24b514058808e22d","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from nova.virt.powervm import media as m"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class TestConfigDrivePowerVM(test.TestCase):"},{"line_number":38,"context_line":"    \"\"\"Unit Tests for the ConfigDrivePowerVM class.\"\"\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":46,"id":"3f4b6375_f2184a1e","line":37,"range":{"start_line":37,"start_character":34,"end_line":37,"end_character":42},"in_reply_to":"3f4b6375_723e9a8b","updated":"2017-11-07 15:04:08.000000000","message":"Ack","commit_id":"925ec5940f218159737f6151769d1634b1bf71e0"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"f8eadb7c38d0ff52474af4dd24b514058808e22d","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from nova.virt.powervm import media as m"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class TestConfigDrivePowerVM(test.TestCase):"},{"line_number":38,"context_line":"    \"\"\"Unit Tests for the ConfigDrivePowerVM class.\"\"\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":46,"id":"3f4b6375_121e460b","line":37,"range":{"start_line":37,"start_character":34,"end_line":37,"end_character":42},"in_reply_to":"3f4b6375_b285325c","updated":"2017-11-07 15:04:08.000000000","message":"Done","commit_id":"925ec5940f218159737f6151769d1634b1bf71e0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f65f439ccb4fbef992bdc943ca7cccfcc3d836aa","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from nova.virt.powervm import media as m"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class TestConfigDrivePowerVM(test.TestCase):"},{"line_number":38,"context_line":"    \"\"\"Unit Tests for the ConfigDrivePowerVM class.\"\"\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":46,"id":"3f4b6375_723e9a8b","line":37,"range":{"start_line":37,"start_character":34,"end_line":37,"end_character":42},"in_reply_to":"3f4b6375_b285325c","updated":"2017-11-07 14:58:03.000000000","message":"Oo - esberglu, we should carry that out to the OOT driver.","commit_id":"925ec5940f218159737f6151769d1634b1bf71e0"}],"nova/virt/powervm/driver.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"73d2a23f72504e11a4fde4c1174addf57ef0b682","unresolved":false,"context_lines":[{"line_number":251,"context_line":""},{"line_number":252,"context_line":"            # Detach the disk storage adapters"},{"line_number":253,"context_line":"            flow.add(tf_stg.DetachDisk(self.disk_dvr, instance, stg_ftsk))"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"            # Delete the storage disks"},{"line_number":256,"context_line":"            if destroy_disks:"},{"line_number":257,"context_line":"                flow.add(tf_stg.DeleteDisk(self.disk_dvr, instance))"}],"source_content_type":"text/x-python","patch_set":20,"id":"dfeb2761_9724380f","line":254,"updated":"2017-03-31 15:19:07.000000000","message":"Need to add the stg_ftsk to the flow at this point.","commit_id":"14034986f28bd87855cd708c72869ef02766762b"}],"nova/virt/powervm/media.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d281e034bb1aedd4f5116cd94676198a06a7cfb3","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import copy"},{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"from oslo_log import log as logging"},{"line_number":20,"context_line":"from taskflow import task"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from pypowervm import const as pvm_const"},{"line_number":23,"context_line":"from pypowervm.tasks import scsi_mapper as tsk_map"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_29c67349","line":20,"range":{"start_line":19,"start_character":0,"end_line":20,"end_character":25},"updated":"2017-01-03 20:46:43.000000000","message":"These two belong in the 3rd-party section, right?","commit_id":"cd7c6035b17eef329059a531c57661845efd7a55"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"d1fbb571af5e3b504645d67fc4314a533d3e829a","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import copy"},{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"from oslo_log import log as logging"},{"line_number":20,"context_line":"from taskflow import task"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from pypowervm import const as pvm_const"},{"line_number":23,"context_line":"from pypowervm.tasks import scsi_mapper as tsk_map"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_3e53993a","line":20,"range":{"start_line":19,"start_character":0,"end_line":20,"end_character":25},"in_reply_to":"ba5201f7_29c67349","updated":"2017-01-06 07:33:27.000000000","message":"Done","commit_id":"cd7c6035b17eef329059a531c57661845efd7a55"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d281e034bb1aedd4f5116cd94676198a06a7cfb3","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        # Upload the media"},{"line_number":145,"context_line":"        file_size \u003d os.path.getsize(iso_path)"},{"line_number":146,"context_line":"        vopt \u003d self._upload_vopt(iso_path, file_name, file_size)[0]"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        # Delete the media"},{"line_number":149,"context_line":"        os.remove(iso_path)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_4921f7fa","line":146,"updated":"2017-01-03 20:46:43.000000000","message":"_upload_vopt returns two things, neh?","commit_id":"cd7c6035b17eef329059a531c57661845efd7a55"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"d1fbb571af5e3b504645d67fc4314a533d3e829a","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        # Upload the media"},{"line_number":145,"context_line":"        file_size \u003d os.path.getsize(iso_path)"},{"line_number":146,"context_line":"        vopt \u003d self._upload_vopt(iso_path, file_name, file_size)[0]"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        # Delete the media"},{"line_number":149,"context_line":"        os.remove(iso_path)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_81050812","line":146,"in_reply_to":"ba5201f7_4921f7fa","updated":"2017-01-06 07:33:27.000000000","message":"Done","commit_id":"cd7c6035b17eef329059a531c57661845efd7a55"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"cdd38745aea171e19474b6be81860d0c6278c22d","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.host_uuid \u003d host_uuid"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        # Validate that the virtual optical exists"},{"line_number":56,"context_line":"        self.vios_uuid, self.vg_uuid \u003d tsk_vopt.validate_vopt_repo_exists("},{"line_number":57,"context_line":"            self.adapter, CONF.powervm.vopt_media_volume_group,"},{"line_number":58,"context_line":"            CONF.powervm.vopt_media_rep_size)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"da36d5c6_ac9f2bb3","line":56,"range":{"start_line":56,"start_character":39,"end_line":56,"end_character":73},"updated":"2017-02-17 20:12:12.000000000","message":"Great win putting this down in pypowervm...","commit_id":"87a7df9caeefb6b0343b9e680ee22eb07cb0620e"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"cdd38745aea171e19474b6be81860d0c6278c22d","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        :return iso_path: The path to the ISO"},{"line_number":90,"context_line":"        :return file_name: The file name for the ISO"},{"line_number":91,"context_line":"        \"\"\""},{"line_number":92,"context_line":"        LOG.info(_LI(\"Creating config drive for instance: %s\"), instance.name,"},{"line_number":93,"context_line":"                 instance\u003dinstance)"},{"line_number":94,"context_line":"        extra_md \u003d {}"},{"line_number":95,"context_line":"        if admin_pass is not None:"}],"source_content_type":"text/x-python","patch_set":15,"id":"da36d5c6_cc7b7f7a","line":92,"range":{"start_line":92,"start_character":17,"end_line":92,"end_character":61},"updated":"2017-02-17 20:12:12.000000000","message":"Can probably just say \"Creating config drive\", and then instance\u003dinstance.","commit_id":"87a7df9caeefb6b0343b9e680ee22eb07cb0620e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"02a67bda29e3c5464470ce96858a2f354516d72b","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        :return iso_path: The path to the ISO"},{"line_number":90,"context_line":"        :return file_name: The file name for the ISO"},{"line_number":91,"context_line":"        \"\"\""},{"line_number":92,"context_line":"        LOG.info(_LI(\"Creating config drive for instance: %s\"), instance.name,"},{"line_number":93,"context_line":"                 instance\u003dinstance)"},{"line_number":94,"context_line":"        extra_md \u003d {}"},{"line_number":95,"context_line":"        if admin_pass is not None:"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffe62b97_8ce30134","line":92,"range":{"start_line":92,"start_character":17,"end_line":92,"end_character":61},"in_reply_to":"da36d5c6_cc7b7f7a","updated":"2017-03-24 19:23:02.000000000","message":"Done","commit_id":"87a7df9caeefb6b0343b9e680ee22eb07cb0620e"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"cdd38745aea171e19474b6be81860d0c6278c22d","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        with configdrive.ConfigDriveBuilder(instance_md\u003dinst_md) as cdb:"},{"line_number":116,"context_line":"            LOG.info(_LI(\"Config drive ISO being built for instance %(inst)s \""},{"line_number":117,"context_line":"                         \"building to path %(iso_path)s.\"),"},{"line_number":118,"context_line":"                     {\u0027inst\u0027: instance.name, \u0027iso_path\u0027: iso_path},"},{"line_number":119,"context_line":"                     instance\u003dinstance)"},{"line_number":120,"context_line":"            cdb.make_drive(iso_path)"},{"line_number":121,"context_line":"            return iso_path, file_name"}],"source_content_type":"text/x-python","patch_set":15,"id":"da36d5c6_2c933ba5","line":118,"range":{"start_line":118,"start_character":22,"end_line":118,"end_character":43},"updated":"2017-02-17 20:12:12.000000000","message":"I\u0027m of mindset that many of these can go.","commit_id":"87a7df9caeefb6b0343b9e680ee22eb07cb0620e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"02a67bda29e3c5464470ce96858a2f354516d72b","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        with configdrive.ConfigDriveBuilder(instance_md\u003dinst_md) as cdb:"},{"line_number":116,"context_line":"            LOG.info(_LI(\"Config drive ISO being built for instance %(inst)s \""},{"line_number":117,"context_line":"                         \"building to path %(iso_path)s.\"),"},{"line_number":118,"context_line":"                     {\u0027inst\u0027: instance.name, \u0027iso_path\u0027: iso_path},"},{"line_number":119,"context_line":"                     instance\u003dinstance)"},{"line_number":120,"context_line":"            cdb.make_drive(iso_path)"},{"line_number":121,"context_line":"            return iso_path, file_name"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffe62b97_6cd2fd5e","line":118,"range":{"start_line":118,"start_character":22,"end_line":118,"end_character":43},"in_reply_to":"da36d5c6_2c933ba5","updated":"2017-03-24 19:23:02.000000000","message":"Done","commit_id":"87a7df9caeefb6b0343b9e680ee22eb07cb0620e"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"cdd38745aea171e19474b6be81860d0c6278c22d","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        def rm_vopt():"},{"line_number":275,"context_line":"            LOG.info(_LI(\"Removing virtual optical for VM with UUID %s.\"),"},{"line_number":276,"context_line":"                     lpar_uuid)"},{"line_number":277,"context_line":"            vg_wrap \u003d pvm_stg.VG.get(self.adapter, uuid\u003dself.vg_uuid,"},{"line_number":278,"context_line":"                                     parent_type\u003dpvm_vios.VIOS,"},{"line_number":279,"context_line":"                                     parent_uuid\u003dself.vios_uuid)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da36d5c6_4c1a2f19","line":276,"range":{"start_line":276,"start_character":30,"end_line":276,"end_character":31},"updated":"2017-02-17 20:12:12.000000000","message":"It\u0027d be nice if we could get the instance in here...so that we could pass messages with instance\u003dself.instance.  Debugability is nicer.","commit_id":"87a7df9caeefb6b0343b9e680ee22eb07cb0620e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"02a67bda29e3c5464470ce96858a2f354516d72b","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        def rm_vopt():"},{"line_number":275,"context_line":"            LOG.info(_LI(\"Removing virtual optical for VM with UUID %s.\"),"},{"line_number":276,"context_line":"                     lpar_uuid)"},{"line_number":277,"context_line":"            vg_wrap \u003d pvm_stg.VG.get(self.adapter, uuid\u003dself.vg_uuid,"},{"line_number":278,"context_line":"                                     parent_type\u003dpvm_vios.VIOS,"},{"line_number":279,"context_line":"                                     parent_uuid\u003dself.vios_uuid)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffe62b97_cf669bee","line":276,"range":{"start_line":276,"start_character":30,"end_line":276,"end_character":31},"in_reply_to":"da36d5c6_4c1a2f19","updated":"2017-03-24 19:23:02.000000000","message":"Done.  In spades.","commit_id":"87a7df9caeefb6b0343b9e680ee22eb07cb0620e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cee014051b69c1b1b5da6d6d7774a2365b759954","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        with configdrive.ConfigDriveBuilder(instance_md\u003dinst_md) as cdb:"},{"line_number":113,"context_line":"            LOG.info(\"Config drive ISO being built in %s.\", iso_path,"},{"line_number":114,"context_line":"                     instance\u003dinstance)"},{"line_number":115,"context_line":"            cdb.make_drive(iso_path)"},{"line_number":116,"context_line":"            return iso_path, file_name"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def create_cfg_drv_vopt(self, instance, injected_files, network_info,"}],"source_content_type":"text/x-python","patch_set":31,"id":"df6247ed_a91a5d14","line":115,"updated":"2017-09-19 21:26:29.000000000","message":"We should work in the retry-on-OSError stuff from I89b15bcd8c974c5be12e30ca220526647d45e879.  (But do it prettier than that.)","commit_id":"b857bb5fc404eb3348748c3ba6d397d566f16de2"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"25e18d657fbd4dcab8e545efa99fcf073c1b440b","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        with configdrive.ConfigDriveBuilder(instance_md\u003dinst_md) as cdb:"},{"line_number":113,"context_line":"            LOG.info(\"Config drive ISO being built in %s.\", iso_path,"},{"line_number":114,"context_line":"                     instance\u003dinstance)"},{"line_number":115,"context_line":"            cdb.make_drive(iso_path)"},{"line_number":116,"context_line":"            return iso_path, file_name"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def create_cfg_drv_vopt(self, instance, injected_files, network_info,"}],"source_content_type":"text/x-python","patch_set":31,"id":"7f515b1d_465fe00d","line":115,"in_reply_to":"df6247ed_a91a5d14","updated":"2017-09-26 16:22:31.000000000","message":"Done","commit_id":"b857bb5fc404eb3348748c3ba6d397d566f16de2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cee014051b69c1b1b5da6d6d7774a2365b759954","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def create_cfg_drv_vopt(self, instance, injected_files, network_info,"},{"line_number":119,"context_line":"                            stg_ftsk, admin_pass\u003dNone):"},{"line_number":120,"context_line":"        \"\"\"Creates the config drive virtual optical and attach to VM."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        :param instance: The VM instance from OpenStack."},{"line_number":123,"context_line":"        :param injected_files: A list of file paths that will be injected into"}],"source_content_type":"text/x-python","patch_set":31,"id":"df6247ed_c9cb5170","line":120,"range":{"start_line":120,"start_character":11,"end_line":120,"end_character":18},"updated":"2017-09-19 21:26:29.000000000","message":"Create","commit_id":"b857bb5fc404eb3348748c3ba6d397d566f16de2"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"26832044c726ec16d41711c45fd48ea93ba6216a","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def create_cfg_drv_vopt(self, instance, injected_files, network_info,"},{"line_number":119,"context_line":"                            stg_ftsk, admin_pass\u003dNone):"},{"line_number":120,"context_line":"        \"\"\"Creates the config drive virtual optical and attach to VM."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        :param instance: The VM instance from OpenStack."},{"line_number":123,"context_line":"        :param injected_files: A list of file paths that will be injected into"}],"source_content_type":"text/x-python","patch_set":31,"id":"9f5c4f37_221c3169","line":120,"range":{"start_line":120,"start_character":11,"end_line":120,"end_character":18},"in_reply_to":"df6247ed_c9cb5170","updated":"2017-09-21 14:01:32.000000000","message":"Done","commit_id":"b857bb5fc404eb3348748c3ba6d397d566f16de2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cee014051b69c1b1b5da6d6d7774a2365b759954","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        :param admin_pass: (Optional) password to inject for the VM."},{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":"        iso_path, file_name \u003d self._create_cfg_dr_iso("},{"line_number":130,"context_line":"            instance, injected_files, network_info, admin_pass)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        # Upload the media"},{"line_number":133,"context_line":"        with open(iso_path, \u0027rb\u0027) as d_stream:"}],"source_content_type":"text/x-python","patch_set":31,"id":"df6247ed_89c5595e","line":130,"range":{"start_line":130,"start_character":52,"end_line":130,"end_character":62},"updated":"2017-09-19 21:26:29.000000000","message":"name kwarg","commit_id":"b857bb5fc404eb3348748c3ba6d397d566f16de2"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"70b4834a2bcaf97b27dafa155bec795c4c85207b","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        :param admin_pass: (Optional) password to inject for the VM."},{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":"        iso_path, file_name \u003d self._create_cfg_dr_iso("},{"line_number":130,"context_line":"            instance, injected_files, network_info, admin_pass)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        # Upload the media"},{"line_number":133,"context_line":"        with open(iso_path, \u0027rb\u0027) as d_stream:"}],"source_content_type":"text/x-python","patch_set":31,"id":"7f515b1d_cfb7bcd8","line":130,"range":{"start_line":130,"start_character":52,"end_line":130,"end_character":62},"in_reply_to":"df6247ed_89c5595e","updated":"2017-09-25 13:43:50.000000000","message":"Done","commit_id":"b857bb5fc404eb3348748c3ba6d397d566f16de2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cee014051b69c1b1b5da6d6d7774a2365b759954","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        \"\"\"Deletes the virtual optical and scsi mappings for a VM."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        :param instance: The nova instance whose VOpt(s) are to be removed."},{"line_number":156,"context_line":"        :param stg_ftsk: (Optional) A FeedTask. If provided, the actions to"},{"line_number":157,"context_line":"                         modify the storage will be added as batched functions"},{"line_number":158,"context_line":"                         onto the FeedTask.  If not provided (the default) the"},{"line_number":159,"context_line":"                         operation to delete the vOpt will execute immediately."},{"line_number":160,"context_line":"        \"\"\""},{"line_number":161,"context_line":"        # If no transaction manager, build locally so that we can run"},{"line_number":162,"context_line":"        # immediately"},{"line_number":163,"context_line":"        if stg_ftsk is None:"},{"line_number":164,"context_line":"            built_stg_ftsk \u003d True"},{"line_number":165,"context_line":"            vio_w \u003d pvm_vios.VIOS.get(self.adapter, root_id\u003dself.vios_uuid,"},{"line_number":166,"context_line":"                                      xag\u003d[pvm_const.XAG.VIO_SMAP])"},{"line_number":167,"context_line":"            stg_ftsk \u003d pvm_tx.FeedTask(\u0027media_detach\u0027, [vio_w])"},{"line_number":168,"context_line":"        else:"},{"line_number":169,"context_line":"            built_stg_ftsk \u003d False"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        # Run the remove maps method."},{"line_number":172,"context_line":"        self._add_dlt_vopt_tasks(instance, stg_ftsk)"}],"source_content_type":"text/x-python","patch_set":31,"id":"df6247ed_c9791130","line":169,"range":{"start_line":156,"start_character":0,"end_line":169,"end_character":34},"updated":"2017-09-19 21:26:29.000000000","message":"Optional-ness of stg_ftsk not needed.\n\nAnd if you\u0027re taking all of that out, may as well fold _add_dlt_vopt_tasks in here.","commit_id":"b857bb5fc404eb3348748c3ba6d397d566f16de2"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"70b4834a2bcaf97b27dafa155bec795c4c85207b","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        \"\"\"Deletes the virtual optical and scsi mappings for a VM."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        :param instance: The nova instance whose VOpt(s) are to be removed."},{"line_number":156,"context_line":"        :param stg_ftsk: (Optional) A FeedTask. If provided, the actions to"},{"line_number":157,"context_line":"                         modify the storage will be added as batched functions"},{"line_number":158,"context_line":"                         onto the FeedTask.  If not provided (the default) the"},{"line_number":159,"context_line":"                         operation to delete the vOpt will execute immediately."},{"line_number":160,"context_line":"        \"\"\""},{"line_number":161,"context_line":"        # If no transaction manager, build locally so that we can run"},{"line_number":162,"context_line":"        # immediately"},{"line_number":163,"context_line":"        if stg_ftsk is None:"},{"line_number":164,"context_line":"            built_stg_ftsk \u003d True"},{"line_number":165,"context_line":"            vio_w \u003d pvm_vios.VIOS.get(self.adapter, root_id\u003dself.vios_uuid,"},{"line_number":166,"context_line":"                                      xag\u003d[pvm_const.XAG.VIO_SMAP])"},{"line_number":167,"context_line":"            stg_ftsk \u003d pvm_tx.FeedTask(\u0027media_detach\u0027, [vio_w])"},{"line_number":168,"context_line":"        else:"},{"line_number":169,"context_line":"            built_stg_ftsk \u003d False"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        # Run the remove maps method."},{"line_number":172,"context_line":"        self._add_dlt_vopt_tasks(instance, stg_ftsk)"}],"source_content_type":"text/x-python","patch_set":31,"id":"7f515b1d_b48f1022","line":169,"range":{"start_line":156,"start_character":0,"end_line":169,"end_character":34},"in_reply_to":"df6247ed_c9791130","updated":"2017-09-25 13:43:50.000000000","message":"Done","commit_id":"b857bb5fc404eb3348748c3ba6d397d566f16de2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cee014051b69c1b1b5da6d6d7774a2365b759954","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        else:"},{"line_number":169,"context_line":"            built_stg_ftsk \u003d False"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        # Run the remove maps method."},{"line_number":172,"context_line":"        self._add_dlt_vopt_tasks(instance, stg_ftsk)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        # If built locally, then execute"}],"source_content_type":"text/x-python","patch_set":31,"id":"df6247ed_099de958","line":171,"range":{"start_line":171,"start_character":10,"end_line":171,"end_character":13},"updated":"2017-09-19 21:26:29.000000000","message":"Add","commit_id":"b857bb5fc404eb3348748c3ba6d397d566f16de2"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"26832044c726ec16d41711c45fd48ea93ba6216a","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        else:"},{"line_number":169,"context_line":"            built_stg_ftsk \u003d False"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        # Run the remove maps method."},{"line_number":172,"context_line":"        self._add_dlt_vopt_tasks(instance, stg_ftsk)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        # If built locally, then execute"}],"source_content_type":"text/x-python","patch_set":31,"id":"9f5c4f37_825bdd2c","line":171,"range":{"start_line":171,"start_character":10,"end_line":171,"end_character":13},"in_reply_to":"df6247ed_099de958","updated":"2017-09-21 14:01:32.000000000","message":"Done","commit_id":"b857bb5fc404eb3348748c3ba6d397d566f16de2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cee014051b69c1b1b5da6d6d7774a2365b759954","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            stg_ftsk.execute()"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def _add_dlt_vopt_tasks(self, instance, stg_ftsk):"},{"line_number":179,"context_line":"        \"\"\"Deletes the virtual optical and (optionally) scsi mappings for a VM."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        :param instance: The nova instance whose VOpt(s) are to be removed."},{"line_number":182,"context_line":"        :param stg_ftsk: A FeedTask handling storage I/O.  The task to remove"},{"line_number":183,"context_line":"                         the mappings and media from the VM will be deferred on"},{"line_number":184,"context_line":"                         to the FeedTask passed in. The execute can be done all"},{"line_number":185,"context_line":"                         in one method (batched together).  No updates are"},{"line_number":186,"context_line":"                         actually made here; they are simply added to the"},{"line_number":187,"context_line":"                         FeedTask."},{"line_number":188,"context_line":"        \"\"\""},{"line_number":189,"context_line":"        lpar_uuid \u003d vm.get_pvm_uuid(instance)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        # The function to find the VOpt"},{"line_number":192,"context_line":"        match_func \u003d tsk_map.gen_match_func(pvm_stg.VOptMedia)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        # Add a function to remove the map or detach the vopt"},{"line_number":195,"context_line":"        stg_ftsk.wrapper_tasks[self.vios_uuid].add_functor_subtask("},{"line_number":196,"context_line":"            tsk_map.remove_maps, lpar_uuid, match_func\u003dmatch_func)"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        # Find the vOpt device (before the remove is done) so that it can be"},{"line_number":199,"context_line":"        # removed."},{"line_number":200,"context_line":"        media_mappings \u003d tsk_map.find_maps("},{"line_number":201,"context_line":"            stg_ftsk.get_wrapper(self.vios_uuid).scsi_mappings,"},{"line_number":202,"context_line":"            client_lpar_id\u003dlpar_uuid, match_func\u003dmatch_func)"},{"line_number":203,"context_line":"        media_elems \u003d [x.backing_storage for x in media_mappings]"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        def rm_vopt():"},{"line_number":206,"context_line":"            LOG.info(\"Removing virtual optical storage.\","},{"line_number":207,"context_line":"                     instance\u003dinstance)"},{"line_number":208,"context_line":"            vg_wrap \u003d pvm_stg.VG.get(self.adapter, uuid\u003dself.vg_uuid,"},{"line_number":209,"context_line":"                                     parent_type\u003dpvm_vios.VIOS,"},{"line_number":210,"context_line":"                                     parent_uuid\u003dself.vios_uuid)"},{"line_number":211,"context_line":"            tsk_stg.rm_vg_storage(vg_wrap, vopts\u003dmedia_elems)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        # Don\u0027t add this task if there is no media to delete (eg. config drive)"},{"line_number":214,"context_line":"        if media_elems:"},{"line_number":215,"context_line":"            stg_ftsk.add_post_execute(task.FunctorTask(rm_vopt))"}],"source_content_type":"text/x-python","patch_set":31,"id":"df6247ed_89d679f1","line":215,"range":{"start_line":179,"start_character":0,"end_line":215,"end_character":64},"updated":"2017-09-19 21:26:29.000000000","message":"docstring and comments in here could use a refresh.","commit_id":"b857bb5fc404eb3348748c3ba6d397d566f16de2"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"a1b85e15bf56beb1dc9071c30268a0d37812a51f","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import copy"},{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"import retrying"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo_log import log as logging"},{"line_number":22,"context_line":"from pypowervm import const as pvm_const"}],"source_content_type":"text/x-python","patch_set":35,"id":"3f4b6375_7099d51d","line":19,"updated":"2017-10-18 16:59:50.000000000","message":"retrying isn\u0027t part of the python stdlib, so this should be in the next section","commit_id":"b1e1a04d202f5e206b04af216ebf6c7344c2ba93"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"607ca2ca33fd04c180768acb2dc37cdace7c8256","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import copy"},{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"import retrying"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo_log import log as logging"},{"line_number":22,"context_line":"from pypowervm import const as pvm_const"}],"source_content_type":"text/x-python","patch_set":35,"id":"3f4b6375_4ac253eb","line":19,"in_reply_to":"3f4b6375_7099d51d","updated":"2017-10-23 15:44:30.000000000","message":"Done","commit_id":"b1e1a04d202f5e206b04af216ebf6c7344c2ba93"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"a1b85e15bf56beb1dc9071c30268a0d37812a51f","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from nova.api.metadata import base as instance_metadata"},{"line_number":32,"context_line":"from nova.virt import configdrive"},{"line_number":33,"context_line":"from nova.virt.powervm import vm"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"_LLA_SUBNET \u003d \"fe80::/64\""}],"source_content_type":"text/x-python","patch_set":35,"id":"3f4b6375_70c2f5eb","line":34,"updated":"2017-10-18 16:59:50.000000000","message":"ideally have another blank line here","commit_id":"b1e1a04d202f5e206b04af216ebf6c7344c2ba93"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"607ca2ca33fd04c180768acb2dc37cdace7c8256","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from nova.api.metadata import base as instance_metadata"},{"line_number":32,"context_line":"from nova.virt import configdrive"},{"line_number":33,"context_line":"from nova.virt.powervm import vm"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"_LLA_SUBNET \u003d \"fe80::/64\""}],"source_content_type":"text/x-python","patch_set":35,"id":"3f4b6375_8a8e0bce","line":34,"in_reply_to":"3f4b6375_70c2f5eb","updated":"2017-10-23 15:44:30.000000000","message":"Done","commit_id":"b1e1a04d202f5e206b04af216ebf6c7344c2ba93"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"a1b85e15bf56beb1dc9071c30268a0d37812a51f","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                _make_cfg_drive(iso_path)"},{"line_number":124,"context_line":"                return iso_path, file_name"},{"line_number":125,"context_line":"            except OSError:"},{"line_number":126,"context_line":"                LOG.exception(\"Config drive ISO could not be built\","},{"line_number":127,"context_line":"                              instance\u003dinstance)"},{"line_number":128,"context_line":"                raise"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"3f4b6375_b6bbc6e3","line":126,"updated":"2017-10-18 16:59:50.000000000","message":"use excutils.save_and_reraise_exception","commit_id":"b1e1a04d202f5e206b04af216ebf6c7344c2ba93"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"607ca2ca33fd04c180768acb2dc37cdace7c8256","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                _make_cfg_drive(iso_path)"},{"line_number":124,"context_line":"                return iso_path, file_name"},{"line_number":125,"context_line":"            except OSError:"},{"line_number":126,"context_line":"                LOG.exception(\"Config drive ISO could not be built\","},{"line_number":127,"context_line":"                              instance\u003dinstance)"},{"line_number":128,"context_line":"                raise"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"3f4b6375_4551240e","line":126,"in_reply_to":"3f4b6375_b6bbc6e3","updated":"2017-10-23 15:44:30.000000000","message":"Done","commit_id":"b1e1a04d202f5e206b04af216ebf6c7344c2ba93"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"a1b85e15bf56beb1dc9071c30268a0d37812a51f","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        :param network_info: The network_info from the nova spawn method."},{"line_number":138,"context_line":"        :param stg_ftsk: FeedTask to defer storage connectivity operations."},{"line_number":139,"context_line":"        :param admin_pass: (Optional) password to inject for the VM."},{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        iso_path, file_name \u003d self._create_cfg_dr_iso("},{"line_number":142,"context_line":"            instance, injected_files, network_info, admin_pass\u003dadmin_pass)"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"3f4b6375_96bc4abc","line":140,"updated":"2017-10-18 16:59:50.000000000","message":"will need to remember to add the mgmt_cna stuff here when we add network support","commit_id":"b1e1a04d202f5e206b04af216ebf6c7344c2ba93"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"607ca2ca33fd04c180768acb2dc37cdace7c8256","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        :param network_info: The network_info from the nova spawn method."},{"line_number":138,"context_line":"        :param stg_ftsk: FeedTask to defer storage connectivity operations."},{"line_number":139,"context_line":"        :param admin_pass: (Optional) password to inject for the VM."},{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        iso_path, file_name \u003d self._create_cfg_dr_iso("},{"line_number":142,"context_line":"            instance, injected_files, network_info, admin_pass\u003dadmin_pass)"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"3f4b6375_ca09a331","line":140,"in_reply_to":"3f4b6375_96bc4abc","updated":"2017-10-23 15:44:30.000000000","message":"Done","commit_id":"b1e1a04d202f5e206b04af216ebf6c7344c2ba93"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"a1b85e15bf56beb1dc9071c30268a0d37812a51f","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        \"\"\""},{"line_number":171,"context_line":"        lpar_uuid \u003d vm.get_pvm_uuid(instance)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        # The matching fucntion for find_maps, remove_maps"},{"line_number":174,"context_line":"        match_func \u003d tsk_map.gen_match_func(pvm_stg.VOptMedia)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        # Add a function to remove the mappings"}],"source_content_type":"text/x-python","patch_set":35,"id":"3f4b6375_567132e0","line":173,"range":{"start_line":173,"start_character":23,"end_line":173,"end_character":31},"updated":"2017-10-18 16:59:50.000000000","message":"nit: spelling","commit_id":"b1e1a04d202f5e206b04af216ebf6c7344c2ba93"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"607ca2ca33fd04c180768acb2dc37cdace7c8256","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        \"\"\""},{"line_number":171,"context_line":"        lpar_uuid \u003d vm.get_pvm_uuid(instance)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        # The matching fucntion for find_maps, remove_maps"},{"line_number":174,"context_line":"        match_func \u003d tsk_map.gen_match_func(pvm_stg.VOptMedia)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        # Add a function to remove the mappings"}],"source_content_type":"text/x-python","patch_set":35,"id":"3f4b6375_eab21f94","line":173,"range":{"start_line":173,"start_character":23,"end_line":173,"end_character":31},"in_reply_to":"3f4b6375_567132e0","updated":"2017-10-23 15:44:30.000000000","message":"Done","commit_id":"b1e1a04d202f5e206b04af216ebf6c7344c2ba93"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"a1b85e15bf56beb1dc9071c30268a0d37812a51f","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        # Find the VOpt device based from the mappings"},{"line_number":181,"context_line":"        media_mappings \u003d tsk_map.find_maps("},{"line_number":182,"context_line":"            stg_ftsk.get_wrapper(self.vios_uuid).scsi_mappings,"},{"line_number":183,"context_line":"            client_lpar_id\u003dlpar_uuid, match_func\u003dmatch_func)"},{"line_number":184,"context_line":"        media_elems \u003d [x.backing_storage for x in media_mappings]"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        def rm_vopt():"}],"source_content_type":"text/x-python","patch_set":35,"id":"3f4b6375_b99a99c2","line":183,"range":{"start_line":183,"start_character":27,"end_line":183,"end_character":36},"updated":"2017-10-18 16:59:50.000000000","message":"isn\u0027t this supposed to be vm.get_vm_id rather than vm.get_pvm_uuid?","commit_id":"b1e1a04d202f5e206b04af216ebf6c7344c2ba93"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"400cda2f696829f1034c739aab55759d96343f52","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        # Find the VOpt device based from the mappings"},{"line_number":181,"context_line":"        media_mappings \u003d tsk_map.find_maps("},{"line_number":182,"context_line":"            stg_ftsk.get_wrapper(self.vios_uuid).scsi_mappings,"},{"line_number":183,"context_line":"            client_lpar_id\u003dlpar_uuid, match_func\u003dmatch_func)"},{"line_number":184,"context_line":"        media_elems \u003d [x.backing_storage for x in media_mappings]"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        def rm_vopt():"}],"source_content_type":"text/x-python","patch_set":35,"id":"3f4b6375_5ff43ecf","line":183,"range":{"start_line":183,"start_character":27,"end_line":183,"end_character":36},"in_reply_to":"3f4b6375_b99a99c2","updated":"2017-10-23 15:18:41.000000000","message":"The UUID is fine (as long as it\u0027s the PowerVM UUID and not the Nova UUID).  find_maps accepts either.","commit_id":"b1e1a04d202f5e206b04af216ebf6c7344c2ba93"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"ee1262fc26da99e5dc22edab0f4ed5b5cfc435f2","unresolved":false,"context_lines":[{"line_number":39,"context_line":"_LLA_SUBNET \u003d \"fe80::/64\""},{"line_number":40,"context_line":"# TODO(efried): CONF these (maybe)"},{"line_number":41,"context_line":"_VOPT_VG \u003d \u0027rootvg\u0027"},{"line_number":42,"context_line":"_VOPT_SIZE_GB \u003d 2"},{"line_number":43,"context_line":"_VOPT_TMPDIR \u003d \u0027/tmp/cfgdrv/\u0027"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"3f4b6375_2c8f502f","line":42,"range":{"start_line":42,"start_character":16,"end_line":42,"end_character":17},"updated":"2017-10-31 13:36:18.000000000","message":"Is there a reason why we\u0027re doing 2 GB?  I think we have to do GB boundaries, but typically the metadata is teeny.","commit_id":"36a6c140ca825264226945877aee5b0d3d9ceb8a"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"98327c65d72771688e93eb2d492b7e72206ce86f","unresolved":false,"context_lines":[{"line_number":39,"context_line":"_LLA_SUBNET \u003d \"fe80::/64\""},{"line_number":40,"context_line":"# TODO(efried): CONF these (maybe)"},{"line_number":41,"context_line":"_VOPT_VG \u003d \u0027rootvg\u0027"},{"line_number":42,"context_line":"_VOPT_SIZE_GB \u003d 2"},{"line_number":43,"context_line":"_VOPT_TMPDIR \u003d \u0027/tmp/cfgdrv/\u0027"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"3f4b6375_a2b7c786","line":42,"range":{"start_line":42,"start_character":16,"end_line":42,"end_character":17},"in_reply_to":"3f4b6375_2c8f502f","updated":"2017-10-31 14:42:31.000000000","message":"I changed this to 1 GB. This brings it in line with the OOT default https://github.com/openstack/nova-powervm/blob/master/nova_powervm/conf/powervm.py#L44","commit_id":"36a6c140ca825264226945877aee5b0d3d9ceb8a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2ac5483f93621e9006817d15158ec1bd6736679a","unresolved":false,"context_lines":[{"line_number":39,"context_line":"_LLA_SUBNET \u003d \"fe80::/64\""},{"line_number":40,"context_line":"# TODO(efried): CONF these (maybe)"},{"line_number":41,"context_line":"_VOPT_VG \u003d \u0027rootvg\u0027"},{"line_number":42,"context_line":"_VOPT_SIZE_GB \u003d 2"},{"line_number":43,"context_line":"_VOPT_TMPDIR \u003d \u0027/tmp/cfgdrv/\u0027"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"3f4b6375_1780c9be","line":42,"range":{"start_line":42,"start_character":16,"end_line":42,"end_character":17},"in_reply_to":"3f4b6375_a2b7c786","updated":"2017-11-02 21:05:32.000000000","message":"@thorst, somebody suggested we change it to 2 back at PS15 [1].  But what does that guy know?\n\n[1] https://review.openstack.org/#/c/409404/15/nova/conf/powervm.py@69","commit_id":"36a6c140ca825264226945877aee5b0d3d9ceb8a"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"ee1262fc26da99e5dc22edab0f4ed5b5cfc435f2","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        drive to work properly with cloud-inits."},{"line_number":72,"context_line":"        \"\"\""},{"line_number":73,"context_line":"        network_info \u003d copy.deepcopy(network_info)"},{"line_number":74,"context_line":"        for vif in network_info:"},{"line_number":75,"context_line":"            if vif.get(\u0027type\u0027) is not \u0027ovs\u0027:"},{"line_number":76,"context_line":"                vif[\u0027type\u0027] \u003d \u0027vif\u0027"},{"line_number":77,"context_line":"        return network_info"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _create_cfg_dr_iso(self, instance, injected_files, network_info,"}],"source_content_type":"text/x-python","patch_set":38,"id":"3f4b6375_6cb428d2","line":76,"range":{"start_line":74,"start_character":0,"end_line":76,"end_character":35},"updated":"2017-10-31 13:36:18.000000000","message":"If I was a core reviewer, I\u0027d probably ask \u0027why just ovs\u0027.  I happen to know that\u0027s the only main type we\u0027ll be supporting in the PowerVM driver.  \n\nHowever, it might be better instead to build a list off of constants.  Or at least add a comment saying \u0027ovs is the only main VIF type we support, default others (SEA or PowerVM SR-IOV) to generic vif\u0027.","commit_id":"36a6c140ca825264226945877aee5b0d3d9ceb8a"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"98327c65d72771688e93eb2d492b7e72206ce86f","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        drive to work properly with cloud-inits."},{"line_number":72,"context_line":"        \"\"\""},{"line_number":73,"context_line":"        network_info \u003d copy.deepcopy(network_info)"},{"line_number":74,"context_line":"        for vif in network_info:"},{"line_number":75,"context_line":"            if vif.get(\u0027type\u0027) is not \u0027ovs\u0027:"},{"line_number":76,"context_line":"                vif[\u0027type\u0027] \u003d \u0027vif\u0027"},{"line_number":77,"context_line":"        return network_info"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _create_cfg_dr_iso(self, instance, injected_files, network_info,"}],"source_content_type":"text/x-python","patch_set":38,"id":"3f4b6375_9d6f8cc4","line":76,"range":{"start_line":74,"start_character":0,"end_line":76,"end_character":35},"in_reply_to":"3f4b6375_6cb428d2","updated":"2017-10-31 14:42:31.000000000","message":"Done","commit_id":"36a6c140ca825264226945877aee5b0d3d9ceb8a"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"ee1262fc26da99e5dc22edab0f4ed5b5cfc435f2","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        # Add task to remove the media if it exists"},{"line_number":198,"context_line":"        if media_elems:"},{"line_number":199,"context_line":"            stg_ftsk.add_post_execute(task.FunctorTask(rm_vopt))"}],"source_content_type":"text/x-python","patch_set":38,"id":"3f4b6375_4cd04cf8","line":199,"range":{"start_line":199,"start_character":43,"end_line":199,"end_character":54},"updated":"2017-10-31 13:36:18.000000000","message":"Bringing the func.  Sorry...","commit_id":"36a6c140ca825264226945877aee5b0d3d9ceb8a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"126f57c8a3db7f0c26af1b60cc6a2038d4df7f4f","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        # OVS is the only supported vif type. All others (SEA, PowerVM SR-IOV)"},{"line_number":76,"context_line":"        # will default to generic vif."},{"line_number":77,"context_line":"        for vif in network_info:"},{"line_number":78,"context_line":"            if vif.get(\u0027type\u0027) is not \u0027ovs\u0027:"},{"line_number":79,"context_line":"                vif[\u0027type\u0027] \u003d \u0027vif\u0027"},{"line_number":80,"context_line":"        return network_info"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"3f4b6375_58df5865","line":78,"updated":"2017-11-06 16:40:36.000000000","message":"might be worth adding a little debug log message in here to indicate you\u0027re changing the supplied VIF type from X to \u0027vif\u0027.","commit_id":"4e980778c8f28ea564db8e92442b369a4b284855"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"426af8261154275a0fdc1c661597258362790b40","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        # OVS is the only supported vif type. All others (SEA, PowerVM SR-IOV)"},{"line_number":76,"context_line":"        # will default to generic vif."},{"line_number":77,"context_line":"        for vif in network_info:"},{"line_number":78,"context_line":"            if vif.get(\u0027type\u0027) is not \u0027ovs\u0027:"},{"line_number":79,"context_line":"                vif[\u0027type\u0027] \u003d \u0027vif\u0027"},{"line_number":80,"context_line":"        return network_info"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"3f4b6375_c9849c0d","line":78,"in_reply_to":"3f4b6375_58df5865","updated":"2017-11-06 19:18:25.000000000","message":"Done","commit_id":"4e980778c8f28ea564db8e92442b369a4b284855"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"126f57c8a3db7f0c26af1b60cc6a2038d4df7f4f","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                                                     extra_md\u003dextra_md,"},{"line_number":107,"context_line":"                                                     network_info\u003dnetwork_info)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        # Make sure the path exists."},{"line_number":110,"context_line":"        if not os.path.exists(_VOPT_TMPDIR):"},{"line_number":111,"context_line":"            os.mkdir(_VOPT_TMPDIR)"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"3f4b6375_58c2b854","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":36},"updated":"2017-11-06 16:40:36.000000000","message":"not sure this is the most useful code comment, but ok :)","commit_id":"4e980778c8f28ea564db8e92442b369a4b284855"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"426af8261154275a0fdc1c661597258362790b40","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                                                     extra_md\u003dextra_md,"},{"line_number":107,"context_line":"                                                     network_info\u003dnetwork_info)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        # Make sure the path exists."},{"line_number":110,"context_line":"        if not os.path.exists(_VOPT_TMPDIR):"},{"line_number":111,"context_line":"            os.mkdir(_VOPT_TMPDIR)"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"3f4b6375_49978c46","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":36},"in_reply_to":"3f4b6375_58c2b854","updated":"2017-11-06 19:18:25.000000000","message":"Done","commit_id":"4e980778c8f28ea564db8e92442b369a4b284855"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"126f57c8a3db7f0c26af1b60cc6a2038d4df7f4f","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                self.adapter, self.vios_uuid, d_stream, file_name,"},{"line_number":154,"context_line":"                os.path.getsize(iso_path))"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        # Delete the media"},{"line_number":157,"context_line":"        os.remove(iso_path)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        # Define the function to build and add the mapping"}],"source_content_type":"text/x-python","patch_set":44,"id":"3f4b6375_58707840","line":156,"range":{"start_line":156,"start_character":8,"end_line":156,"end_character":26},"updated":"2017-11-06 16:40:36.000000000","message":"another sketchy comment :)","commit_id":"4e980778c8f28ea564db8e92442b369a4b284855"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"426af8261154275a0fdc1c661597258362790b40","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                self.adapter, self.vios_uuid, d_stream, file_name,"},{"line_number":154,"context_line":"                os.path.getsize(iso_path))"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        # Delete the media"},{"line_number":157,"context_line":"        os.remove(iso_path)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        # Define the function to build and add the mapping"}],"source_content_type":"text/x-python","patch_set":44,"id":"3f4b6375_699c8869","line":156,"range":{"start_line":156,"start_character":8,"end_line":156,"end_character":26},"in_reply_to":"3f4b6375_58707840","updated":"2017-11-06 19:18:25.000000000","message":"Done","commit_id":"4e980778c8f28ea564db8e92442b369a4b284855"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"126f57c8a3db7f0c26af1b60cc6a2038d4df7f4f","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        media_elems \u003d [x.backing_storage for x in media_mappings]"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        def rm_vopt():"},{"line_number":193,"context_line":"            LOG.info(\"Removing virtual optical storage.\","},{"line_number":194,"context_line":"                     instance\u003dinstance)"},{"line_number":195,"context_line":"            vg_wrap \u003d pvm_stg.VG.get(self.adapter, uuid\u003dself.vg_uuid,"},{"line_number":196,"context_line":"                                     parent_type\u003dpvm_vios.VIOS,"}],"source_content_type":"text/x-python","patch_set":44,"id":"3f4b6375_18944036","line":193,"range":{"start_line":193,"start_character":31,"end_line":193,"end_character":54},"updated":"2017-11-06 16:40:36.000000000","message":"oh... THAT\u0027s what VOpt stands for!","commit_id":"4e980778c8f28ea564db8e92442b369a4b284855"}],"nova/virt/powervm/tasks/storage.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"07983c52abf18dc5754d0eee40d1aea8e6acefa5","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                         immediately when the respective method is executed."},{"line_number":133,"context_line":"        \"\"\""},{"line_number":134,"context_line":"        super(CreateAndConnectCfgDrive, self).__init__("},{"line_number":135,"context_line":"            instance, \u0027cfg_drive\u0027, requires\u003d[\u0027lpar_wrap\u0027, \u0027mgmt_cna\u0027])"},{"line_number":136,"context_line":"        self.adapter \u003d adapter"},{"line_number":137,"context_line":"        self.host_uuid \u003d host_uuid"},{"line_number":138,"context_line":"        self.injected_files \u003d injected_files"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_8d4f81bc","line":135,"range":{"start_line":135,"start_character":58,"end_line":135,"end_character":68},"updated":"2017-01-26 16:38:23.000000000","message":"Requirement not satisfied.","commit_id":"19dc9ae8e22705e910d8bc9aa00050b07badc216"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"cdd38745aea171e19474b6be81860d0c6278c22d","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                                    stg_ftsk\u003dself.stg_ftsk)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def revert_impl(self, lpar_wrap, result, flow_failures):"},{"line_number":153,"context_line":"        # The parameters have to match the execute method, plus the response +"},{"line_number":154,"context_line":"        # failures even if only a subset are used."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        # No media builder, nothing to do"},{"line_number":157,"context_line":"        if self.mb is None:"}],"source_content_type":"text/x-python","patch_set":15,"id":"da36d5c6_2c65fbe0","line":154,"range":{"start_line":153,"start_character":0,"end_line":154,"end_character":50},"updated":"2017-02-17 20:12:12.000000000","message":"This seems redundant.  I had put this in the initial code in OOT because I was still learning task flow.  I think we\u0027ve got a great handle on it now.","commit_id":"87a7df9caeefb6b0343b9e680ee22eb07cb0620e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"02a67bda29e3c5464470ce96858a2f354516d72b","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                                    stg_ftsk\u003dself.stg_ftsk)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def revert_impl(self, lpar_wrap, result, flow_failures):"},{"line_number":153,"context_line":"        # The parameters have to match the execute method, plus the response +"},{"line_number":154,"context_line":"        # failures even if only a subset are used."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        # No media builder, nothing to do"},{"line_number":157,"context_line":"        if self.mb is None:"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffe62b97_efaeffe5","line":154,"range":{"start_line":153,"start_character":0,"end_line":154,"end_character":50},"in_reply_to":"da36d5c6_2c65fbe0","updated":"2017-03-24 19:23:02.000000000","message":"Done","commit_id":"87a7df9caeefb6b0343b9e680ee22eb07cb0620e"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"77c62c76a06f415ba3a20708c0ce1138bcc888e9","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                          instance\u003dself.instance)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"class CreateAndConnectCfgDrive(pvm_task.PowerVMTask):"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    \"\"\"The task to create the configuration drive.\"\"\""},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"7f287b81_655ebae7","line":101,"range":{"start_line":101,"start_character":31,"end_line":101,"end_character":51},"updated":"2017-08-22 19:16:07.000000000","message":"Need to convert this to task.Task","commit_id":"2393f85e5ded1a2d7ecdcca1199f4439f82eeb93"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"77c62c76a06f415ba3a20708c0ce1138bcc888e9","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        self.mb.dlt_vopt(self.instance)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"class DeleteVOpt(pvm_task.PowerVMTask):"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    \"\"\"The task to delete the virtual optical.\"\"\""},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"7f287b81_2570b272","line":146,"range":{"start_line":146,"start_character":17,"end_line":146,"end_character":37},"updated":"2017-08-22 19:16:07.000000000","message":"Need to convert this to task.Task","commit_id":"2393f85e5ded1a2d7ecdcca1199f4439f82eeb93"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cee014051b69c1b1b5da6d6d7774a2365b759954","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def __init__(self, adapter, instance, injected_files,"},{"line_number":105,"context_line":"                 network_info, admin_pass, stg_ftsk):"},{"line_number":106,"context_line":"        \"\"\"Create the Task that create and connect the config drive."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        Provides the \u0027cfg_drv_vscsi_map\u0027 which is an element to later map"},{"line_number":109,"context_line":"        the vscsi drive."}],"source_content_type":"text/x-python","patch_set":31,"id":"df6247ed_492f61f6","line":106,"range":{"start_line":106,"start_character":32,"end_line":106,"end_character":50},"updated":"2017-09-19 21:26:29.000000000","message":"agreement of tense","commit_id":"b857bb5fc404eb3348748c3ba6d397d566f16de2"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"26832044c726ec16d41711c45fd48ea93ba6216a","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def __init__(self, adapter, instance, injected_files,"},{"line_number":105,"context_line":"                 network_info, admin_pass, stg_ftsk):"},{"line_number":106,"context_line":"        \"\"\"Create the Task that create and connect the config drive."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        Provides the \u0027cfg_drv_vscsi_map\u0027 which is an element to later map"},{"line_number":109,"context_line":"        the vscsi drive."}],"source_content_type":"text/x-python","patch_set":31,"id":"9f5c4f37_e2e85917","line":106,"range":{"start_line":106,"start_character":32,"end_line":106,"end_character":50},"in_reply_to":"df6247ed_492f61f6","updated":"2017-09-21 14:01:32.000000000","message":"Done","commit_id":"b857bb5fc404eb3348748c3ba6d397d566f16de2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cee014051b69c1b1b5da6d6d7774a2365b759954","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    \"\"\"The task to delete the virtual optical.\"\"\""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def __init__(self, adapter, instance, stg_ftsk\u003dNone):"},{"line_number":148,"context_line":"        \"\"\"Creates the Task to delete the instances virtual optical media."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        :param adapter: The adapter for the pypowervm API"},{"line_number":151,"context_line":"        :param instance: The nova instance."}],"source_content_type":"text/x-python","patch_set":31,"id":"df6247ed_691345ba","line":148,"range":{"start_line":148,"start_character":42,"end_line":148,"end_character":51},"updated":"2017-09-19 21:26:29.000000000","message":"instance\u0027s","commit_id":"b857bb5fc404eb3348748c3ba6d397d566f16de2"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"26832044c726ec16d41711c45fd48ea93ba6216a","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    \"\"\"The task to delete the virtual optical.\"\"\""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def __init__(self, adapter, instance, stg_ftsk\u003dNone):"},{"line_number":148,"context_line":"        \"\"\"Creates the Task to delete the instances virtual optical media."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        :param adapter: The adapter for the pypowervm API"},{"line_number":151,"context_line":"        :param instance: The nova instance."}],"source_content_type":"text/x-python","patch_set":31,"id":"9f5c4f37_82f75df6","line":148,"range":{"start_line":148,"start_character":42,"end_line":148,"end_character":51},"in_reply_to":"df6247ed_691345ba","updated":"2017-09-21 14:01:32.000000000","message":"Done","commit_id":"b857bb5fc404eb3348748c3ba6d397d566f16de2"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"a1b85e15bf56beb1dc9071c30268a0d37812a51f","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                          instance\u003dself.instance)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"class CreateAndConnectCfgDrive(task.Task):"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    \"\"\"The task to create the configuration drive.\"\"\""},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"3f4b6375_b0d62df1","line":100,"updated":"2017-10-18 16:59:50.000000000","message":"from an ordering perspective, it\u0027s odd to fit this between AttachDisk and DetachDisk... how about moving this to the bottom?","commit_id":"b1e1a04d202f5e206b04af216ebf6c7344c2ba93"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"607ca2ca33fd04c180768acb2dc37cdace7c8256","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                          instance\u003dself.instance)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"class CreateAndConnectCfgDrive(task.Task):"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    \"\"\"The task to create the configuration drive.\"\"\""},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"3f4b6375_aaac2734","line":100,"in_reply_to":"3f4b6375_b0d62df1","updated":"2017-10-23 15:44:30.000000000","message":"Done","commit_id":"b1e1a04d202f5e206b04af216ebf6c7344c2ba93"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"a1b85e15bf56beb1dc9071c30268a0d37812a51f","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        :param injected_files: A list of file paths that will be injected into"},{"line_number":114,"context_line":"                               the ISO."},{"line_number":115,"context_line":"        :param network_info: The network_info from the nova spawn method."},{"line_number":116,"context_line":"        :param admin_pass: Optional password to inject for the VM."},{"line_number":117,"context_line":"        :param stg_ftsk: FeedTask to defer storage connectivity operations."},{"line_number":118,"context_line":"        \"\"\""},{"line_number":119,"context_line":"        super(CreateAndConnectCfgDrive, self).__init__(instance, \u0027cfg_drive\u0027)"}],"source_content_type":"text/x-python","patch_set":35,"id":"3f4b6375_1cc2bb86","line":116,"updated":"2017-10-18 16:59:50.000000000","message":"would be nice to make admin_pass a kwarg since it\u0027s optional. But not a huge deal at this point since we\u0027re only using this from spawn and it isn\u0027t a kwarg there today.","commit_id":"b1e1a04d202f5e206b04af216ebf6c7344c2ba93"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"607ca2ca33fd04c180768acb2dc37cdace7c8256","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        :param injected_files: A list of file paths that will be injected into"},{"line_number":114,"context_line":"                               the ISO."},{"line_number":115,"context_line":"        :param network_info: The network_info from the nova spawn method."},{"line_number":116,"context_line":"        :param admin_pass: Optional password to inject for the VM."},{"line_number":117,"context_line":"        :param stg_ftsk: FeedTask to defer storage connectivity operations."},{"line_number":118,"context_line":"        \"\"\""},{"line_number":119,"context_line":"        super(CreateAndConnectCfgDrive, self).__init__(instance, \u0027cfg_drive\u0027)"}],"source_content_type":"text/x-python","patch_set":35,"id":"3f4b6375_a577b802","line":116,"in_reply_to":"3f4b6375_1cc2bb86","updated":"2017-10-23 15:44:30.000000000","message":"Done","commit_id":"b1e1a04d202f5e206b04af216ebf6c7344c2ba93"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"a1b85e15bf56beb1dc9071c30268a0d37812a51f","unresolved":false,"context_lines":[{"line_number":137,"context_line":"            return"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        # Delete the virtual optical media"},{"line_number":140,"context_line":"        self.mb.dlt_vopt(self.instance)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"class DeleteVOpt(task.Task):"}],"source_content_type":"text/x-python","patch_set":35,"id":"3f4b6375_5c2cb346","line":140,"updated":"2017-10-18 16:59:50.000000000","message":"should we have a try/except around this and log any errors removing the vopt? Or will that be done for us at a higher level?\n\nMight make a good UT scenario...","commit_id":"b1e1a04d202f5e206b04af216ebf6c7344c2ba93"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"607ca2ca33fd04c180768acb2dc37cdace7c8256","unresolved":false,"context_lines":[{"line_number":137,"context_line":"            return"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        # Delete the virtual optical media"},{"line_number":140,"context_line":"        self.mb.dlt_vopt(self.instance)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"class DeleteVOpt(task.Task):"}],"source_content_type":"text/x-python","patch_set":35,"id":"3f4b6375_450a448a","line":140,"in_reply_to":"3f4b6375_5c2cb346","updated":"2017-10-23 15:44:30.000000000","message":"Done","commit_id":"b1e1a04d202f5e206b04af216ebf6c7344c2ba93"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"9136ec004bbb83417d73d47a706de269886b4791","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                          instance\u003dself.instance)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"class DeleteVOpt(task.Task):"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    \"\"\"The task to delete the virtual optical.\"\"\""},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"3f4b6375_b384890d","line":100,"updated":"2017-10-23 17:30:35.000000000","message":"nit: odd place to put this, between AttachDisk and DetachDisk.","commit_id":"a89ba9df9b5b15ec24cb94fabb70835682d42f1d"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5638c1daf1713adb00f4ae4d29d066e89d1aba98","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                          instance\u003dself.instance)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"class DeleteVOpt(task.Task):"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    \"\"\"The task to delete the virtual optical.\"\"\""},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"3f4b6375_fbaf5727","line":100,"in_reply_to":"3f4b6375_b384890d","updated":"2017-10-24 18:40:00.000000000","message":"Done","commit_id":"a89ba9df9b5b15ec24cb94fabb70835682d42f1d"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"9136ec004bbb83417d73d47a706de269886b4791","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                               the ISO."},{"line_number":176,"context_line":"        :param network_info: The network_info from the nova spawn method."},{"line_number":177,"context_line":"        :param stg_ftsk: FeedTask to defer storage connectivity operations."},{"line_number":178,"context_line":"        :param admin_pass (Optional, Default None): Optional password to inject"},{"line_number":179,"context_line":"                                                    for the VM."},{"line_number":180,"context_line":"        \"\"\""},{"line_number":181,"context_line":"        super(CreateAndConnectCfgDrive, self).__init__(instance, \u0027cfg_drive\u0027)"}],"source_content_type":"text/x-python","patch_set":36,"id":"3f4b6375_737e111a","line":178,"range":{"start_line":178,"start_character":52,"end_line":178,"end_character":60},"updated":"2017-10-23 17:30:35.000000000","message":"nit: redundant","commit_id":"a89ba9df9b5b15ec24cb94fabb70835682d42f1d"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5638c1daf1713adb00f4ae4d29d066e89d1aba98","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                               the ISO."},{"line_number":176,"context_line":"        :param network_info: The network_info from the nova spawn method."},{"line_number":177,"context_line":"        :param stg_ftsk: FeedTask to defer storage connectivity operations."},{"line_number":178,"context_line":"        :param admin_pass (Optional, Default None): Optional password to inject"},{"line_number":179,"context_line":"                                                    for the VM."},{"line_number":180,"context_line":"        \"\"\""},{"line_number":181,"context_line":"        super(CreateAndConnectCfgDrive, self).__init__(instance, \u0027cfg_drive\u0027)"}],"source_content_type":"text/x-python","patch_set":36,"id":"3f4b6375_3b6f2ffd","line":178,"range":{"start_line":178,"start_character":52,"end_line":178,"end_character":60},"in_reply_to":"3f4b6375_737e111a","updated":"2017-10-24 18:40:00.000000000","message":"Done","commit_id":"a89ba9df9b5b15ec24cb94fabb70835682d42f1d"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"9136ec004bbb83417d73d47a706de269886b4791","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        self.network_info \u003d network_info"},{"line_number":186,"context_line":"        self.ad_pass \u003d admin_pass"},{"line_number":187,"context_line":"        self.mb \u003d None"},{"line_number":188,"context_line":"        self.stg_ftsk \u003d stg_ftsk"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def execute(self):"},{"line_number":191,"context_line":"        self.mb \u003d media.ConfigDrivePowerVM(self.adapter)"}],"source_content_type":"text/x-python","patch_set":36,"id":"3f4b6375_939ced5d","line":188,"updated":"2017-10-23 17:30:35.000000000","message":"nit: order this like the args?","commit_id":"a89ba9df9b5b15ec24cb94fabb70835682d42f1d"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5638c1daf1713adb00f4ae4d29d066e89d1aba98","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        self.network_info \u003d network_info"},{"line_number":186,"context_line":"        self.ad_pass \u003d admin_pass"},{"line_number":187,"context_line":"        self.mb \u003d None"},{"line_number":188,"context_line":"        self.stg_ftsk \u003d stg_ftsk"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def execute(self):"},{"line_number":191,"context_line":"        self.mb \u003d media.ConfigDrivePowerVM(self.adapter)"}],"source_content_type":"text/x-python","patch_set":36,"id":"3f4b6375_bb7affb6","line":188,"in_reply_to":"3f4b6375_939ced5d","updated":"2017-10-24 18:40:00.000000000","message":"Done","commit_id":"a89ba9df9b5b15ec24cb94fabb70835682d42f1d"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"580fe811fc768abba2e2d3c682cbf8e9720621ce","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"class DetachDisk(task.Task):"},{"line_number":101,"context_line":"    \"\"\"The task to detach the disk storage from the instance.\"\"\""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def __init__(self, disk_dvr, instance):"},{"line_number":104,"context_line":"        \"\"\"Creates the Task to detach the storage adapters."}],"source_content_type":"text/x-python","patch_set":37,"id":"3f4b6375_7e1a35cc","line":101,"updated":"2017-10-24 19:03:19.000000000","message":"nit: looks like you deleted a line here by mistake.","commit_id":"b2077ae8d61b435601bd8d2b0e758d82184748b7"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"317e54b1ba356b54abe6f03742feaa80b85274bd","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        # Delete the virtual optical media. We don\u0027t care if it fails"},{"line_number":182,"context_line":"        try:"},{"line_number":183,"context_line":"            self.mb.dlt_vopt(self.instance)"},{"line_number":184,"context_line":"        except pvm_exc.Error:"},{"line_number":185,"context_line":"            LOG.exception(\u0027VOpt removal (as part of reversion) failed.\u0027,"},{"line_number":186,"context_line":"                instance\u003dself.instance)"}],"source_content_type":"text/x-python","patch_set":45,"id":"3f4b6375_2c69ec23","line":183,"range":{"start_line":183,"start_character":29,"end_line":183,"end_character":42},"updated":"2017-11-07 14:30:54.000000000","message":"Need the stg_ftsk parameter here","commit_id":"ccd8908ec5bfd0ad61ac07e427626773f5abd824"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"261587e1bf41179d2e50df61a0feaacf3088aa79","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        # Delete the virtual optical media. We don\u0027t care if it fails"},{"line_number":182,"context_line":"        try:"},{"line_number":183,"context_line":"            self.mb.dlt_vopt(self.instance)"},{"line_number":184,"context_line":"        except pvm_exc.Error:"},{"line_number":185,"context_line":"            LOG.exception(\u0027VOpt removal (as part of reversion) failed.\u0027,"},{"line_number":186,"context_line":"                instance\u003dself.instance)"}],"source_content_type":"text/x-python","patch_set":45,"id":"3f4b6375_cc325810","line":183,"range":{"start_line":183,"start_character":29,"end_line":183,"end_character":42},"in_reply_to":"3f4b6375_2c69ec23","updated":"2017-11-07 14:44:23.000000000","message":"Done","commit_id":"ccd8908ec5bfd0ad61ac07e427626773f5abd824"}],"nova/virt/powervm/vm.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d281e034bb1aedd4f5116cd94676198a06a7cfb3","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from nova import conf"},{"line_number":35,"context_line":"from nova import exception"},{"line_number":36,"context_line":"from nova.i18n import _LI, _LE"},{"line_number":37,"context_line":"from nova.virt.powervm import exception as nvex"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_a9f1836c","line":36,"updated":"2017-01-03 20:46:43.000000000","message":"Missing import of _","commit_id":"cd7c6035b17eef329059a531c57661845efd7a55"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"d1fbb571af5e3b504645d67fc4314a533d3e829a","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from nova import conf"},{"line_number":35,"context_line":"from nova import exception"},{"line_number":36,"context_line":"from nova.i18n import _LI, _LE"},{"line_number":37,"context_line":"from nova.virt.powervm import exception as nvex"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_214b7c5a","line":36,"in_reply_to":"ba5201f7_a9f1836c","updated":"2017-01-06 07:33:27.000000000","message":"Done","commit_id":"cd7c6035b17eef329059a531c57661845efd7a55"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d281e034bb1aedd4f5116cd94676198a06a7cfb3","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                     log_errors\u003dlog_errors)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"def norm_mac(mac):"},{"line_number":134,"context_line":"    \"\"\"Normalizes a MAC address from pypowervm format to OpenStack."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    That means that the format will be converted to lower case and will"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5201f7_49fd7739","line":133,"updated":"2017-01-03 20:46:43.000000000","message":"Where is this used?  (It\u0027s not)","commit_id":"cd7c6035b17eef329059a531c57661845efd7a55"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"cdd38745aea171e19474b6be81860d0c6278c22d","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    \"\"\"Returns the client LPAR ID for a given UUID."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    :param adapter: The pypowervm adapter."},{"line_number":127,"context_line":"    :param lpar_uuid: The UUID for the LPAR."},{"line_number":128,"context_line":"    :param log_errors: Indicator whether to log REST data after an exception"},{"line_number":129,"context_line":"    :return: The system id (an integer value)."},{"line_number":130,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"da36d5c6_cc6d3fce","line":127,"updated":"2017-02-17 20:12:12.000000000","message":"The Nova UUID?\n\nShould it be the nova uuid?  Right now its not.","commit_id":"87a7df9caeefb6b0343b9e680ee22eb07cb0620e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"02a67bda29e3c5464470ce96858a2f354516d72b","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    \"\"\"Returns the client LPAR ID for a given UUID."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    :param adapter: The pypowervm adapter."},{"line_number":127,"context_line":"    :param lpar_uuid: The UUID for the LPAR."},{"line_number":128,"context_line":"    :param log_errors: Indicator whether to log REST data after an exception"},{"line_number":129,"context_line":"    :return: The system id (an integer value)."},{"line_number":130,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"ffe62b97_cf47bb1d","line":127,"in_reply_to":"da36d5c6_cc6d3fce","updated":"2017-03-24 19:23:02.000000000","message":"Actually don\u0027t need this method at all (yet).  Removed.","commit_id":"87a7df9caeefb6b0343b9e680ee22eb07cb0620e"}]}
