)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"864209f605c90c2807e57bd128749688c48302a1","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The solution adopted here is to create a new VM and attach the disk (as"},{"line_number":16,"context_line":"was done previously). We then proceed to update the originianl VM with a"},{"line_number":17,"context_line":"prefix \u0027-org\u0027 and rename the rescue VM to be the actual instance. This is"},{"line_number":18,"context_line":"far more robust and solves all issues. The reson for this is that all"},{"line_number":19,"context_line":"access to the instance is now done via the instance UUID."},{"line_number":20,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baada198_5b35c143","line":17,"updated":"2014-08-13 16:45:06.000000000","message":"\u0027-orig\u0027 - right?","commit_id":"67c8d8209c13210fef7a7abbb34fce8ab52e0091"},{"author":{"_account_id":7400,"name":"Tracy Jones","email":"tjones@vmware.com","username":"tracyajones"},"change_message_id":"1a97c6d3e2347b18eec7bd406b367aebf1147ca6","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The user was unable to access the VNC console after a VM was rescued."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"The rescue code would work as follows: when a user would create a rescue"},{"line_number":12,"context_line":"VM a new vm with suffix \u0027-rescue\u0027 would be created. The resuce code works"},{"line_number":13,"context_line":"well and fine but any other opertaion on the VM is clealy broken."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The solution adopted here is to create a new VM and attach the disk (as"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"7a8c0949_77753797","line":12,"updated":"2014-11-04 16:12:45.000000000","message":"misspelling","commit_id":"9090f5e65823a0e217a183a1bb34e5941a851c16"},{"author":{"_account_id":7400,"name":"Tracy Jones","email":"tjones@vmware.com","username":"tracyajones"},"change_message_id":"1a97c6d3e2347b18eec7bd406b367aebf1147ca6","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"The rescue code would work as follows: when a user would create a rescue"},{"line_number":12,"context_line":"VM a new vm with suffix \u0027-rescue\u0027 would be created. The resuce code works"},{"line_number":13,"context_line":"well and fine but any other opertaion on the VM is clealy broken."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The solution adopted here is to create a new VM and attach the disk (as"},{"line_number":16,"context_line":"was done previously). We then proceed to update the original VM with a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"7a8c0949_b76f9fc4","line":13,"updated":"2014-11-04 16:12:45.000000000","message":"misspelling","commit_id":"9090f5e65823a0e217a183a1bb34e5941a851c16"},{"author":{"_account_id":7400,"name":"Tracy Jones","email":"tjones@vmware.com","username":"tracyajones"},"change_message_id":"1a97c6d3e2347b18eec7bd406b367aebf1147ca6","unresolved":false,"context_lines":[{"line_number":15,"context_line":"The solution adopted here is to create a new VM and attach the disk (as"},{"line_number":16,"context_line":"was done previously). We then proceed to update the original VM with a"},{"line_number":17,"context_line":"prefix \u0027-orig\u0027 and rename the rescue VM to be the actual instance. This is"},{"line_number":18,"context_line":"far more robust and solves all issues. The reson for this is that all"},{"line_number":19,"context_line":"access to the instance is now done via the instance UUID."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I3218e7edfe0f71626b2930c39dea0fba4d2e69ca"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"7a8c0949_f76847bc","line":18,"updated":"2014-11-04 16:12:45.000000000","message":"misspelling","commit_id":"9090f5e65823a0e217a183a1bb34e5941a851c16"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"9122a4f15b7926f036617bdcbaf879ba7119e517","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"The rescue code would work as follows: when a user would create a rescue"},{"line_number":12,"context_line":"VM a new vm with suffix \u0027-rescue\u0027 would be created. The resuce code works"},{"line_number":13,"context_line":"well and fine but any other opertaion on the VM is clealy broken."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The solution adopted here is to create a new VM and attach the disk (as"},{"line_number":16,"context_line":"was done previously). We then proceed to update the original VM with a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"3a961159_7be224d5","line":13,"updated":"2015-01-15 12:49:30.000000000","message":"Typo in \u0027operation\u0027","commit_id":"4f8a6c9975b5e40f1963f8a4b433f3c2bbe4b902"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"02201d9b73497198bef618cef4700dd66de80019","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Co-authored-by: Radoslav Gerganov \u003crgerganov@vmware.com\u003e"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"DocImpact"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I3218e7edfe0f71626b2930c39dea0fba4d2e69ca"},{"line_number":20,"context_line":"Closes-bug: #1356389"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":34,"id":"9a80dd14_00126a08","line":17,"updated":"2015-03-09 18:17:58.000000000","message":"I assume this is for the unrescue comment I had in patch set 33.  Just putting DocImpact in the commit message with no explanation of what it is will be of no use to a doc writer when even I don\u0027t really completely understand what the documented limitation/note needs to be in the unrescue case wrt upgrades.  I think that needs to be fully fleshed out here before we merge this.","commit_id":"b2fe26e32e42c65c73756158ce171cbf1ffe3c74"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3b6583157c4c60b2ccf2159ccfc370f2acb22852","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Co-authored-by: Radoslav Gerganov \u003crgerganov@vmware.com\u003e"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"DocImpact"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I3218e7edfe0f71626b2930c39dea0fba4d2e69ca"},{"line_number":20,"context_line":"Closes-bug: #1356389"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":34,"id":"9a80dd14_a007de80","line":17,"in_reply_to":"9a80dd14_00126a08","updated":"2015-03-09 18:25:12.000000000","message":"This should probably actually be UpgradeImpact.  I don\u0027t know where this would go in the docs since I don\u0027t think we really have virt-driver specific notes/limitations in the API docs, so this is probably an UpgradeImpact so it gets into the release nodes for Kilo.","commit_id":"b2fe26e32e42c65c73756158ce171cbf1ffe3c74"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"d3dd599178025098d765a246f49628f445413582","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Prior to this patch a rescue operation would create a new VM and the"},{"line_number":20,"context_line":"rescue would take place on the new VM. This is prone to an endless"},{"line_number":21,"context_line":"amount of problems. This patch now uses an inplace rescue on the same"},{"line_number":22,"context_line":"VM. It is suggested that when upgrading to the latest version to ensure"},{"line_number":23,"context_line":"that users are aware that a rescue during the upgrade may be problematic."},{"line_number":24,"context_line":"It is suggested that in the upgrade window that the admin prevent instances"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":35,"id":"9a80dd14_af0cc13c","line":21,"updated":"2015-03-11 16:33:39.000000000","message":"What types of problems exactly? I think it would be beneficial to add at least one example to support this statement.","commit_id":"6e21ed598e2c32a5b46012ef563a948d47ddc70d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"43836ec3a10131b265e24d068ca227a06c90cd51","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Prior to this patch a rescue operation would create a new VM and the"},{"line_number":20,"context_line":"rescue would take place on the new VM. This is prone to an endless"},{"line_number":21,"context_line":"amount of problems. This patch now uses an inplace rescue on the same"},{"line_number":22,"context_line":"VM. It is suggested that when upgrading to the latest version to ensure"},{"line_number":23,"context_line":"that users are aware that a rescue during the upgrade may be problematic."},{"line_number":24,"context_line":"It is suggested that in the upgrade window that the admin prevent instances"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":35,"id":"9a80dd14_99cd6cba","line":21,"in_reply_to":"9a80dd14_af0cc13c","updated":"2015-03-12 04:50:47.000000000","message":"Done","commit_id":"6e21ed598e2c32a5b46012ef563a948d47ddc70d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a9f86861030671327d197241e196cfbe07817e23","unresolved":false,"context_lines":[{"line_number":24,"context_line":" - rescue with ephemeral disks does not work"},{"line_number":25,"context_line":"This patch now uses an inplace rescue on the same"},{"line_number":26,"context_line":"VM. It is suggested that when upgrading to the latest version to ensure"},{"line_number":27,"context_line":"that users are aware that a rescue during the upgrade may be problematic."},{"line_number":28,"context_line":"It is suggested that in the upgrade window that the admin prevent instances"},{"line_number":29,"context_line":"being rescued and give sufficient notice to users."},{"line_number":30,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":36,"id":"9a80dd14_b577759e","line":27,"updated":"2015-03-12 17:35:37.000000000","message":"Problematic because they won\u0027t be able to unrescue them since the code is no longer looking for a VM in the vCenter with name \u0027instance.uuid + self._rescue_suffix\u0027?","commit_id":"de5fc6240558cd36518e9ddd13c29b3b60bcee7c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1e3d48f548409886b974ef5f2e88f0098cef0ba9","unresolved":false,"context_lines":[{"line_number":24,"context_line":" - rescue with ephemeral disks does not work"},{"line_number":25,"context_line":"This patch now uses an inplace rescue on the same"},{"line_number":26,"context_line":"VM. It is suggested that when upgrading to the latest version to ensure"},{"line_number":27,"context_line":"that users are aware that a rescue during the upgrade may be problematic."},{"line_number":28,"context_line":"It is suggested that in the upgrade window that the admin prevent instances"},{"line_number":29,"context_line":"being rescued and give sufficient notice to users."},{"line_number":30,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":36,"id":"9a80dd14_ab92b648","line":27,"in_reply_to":"9a80dd14_b577759e","updated":"2015-03-12 18:31:19.000000000","message":"I am not really sure if you read what was written above? It lists issues that are problematic and pain points. If you want I can do a webex and show you the issues. In addition to this I can show you what is broken and why no one would actually use this in its current state.\nThe original logic is broken. \n\nCan you please clarify what is wrong with the suggest upgrade path? If an admin gives enough warning to the users then they can make sure that this operation will not be done. In addition to this the admin may make use of the polciy.json file to enforce that.\n\nThis at least gives an admin a way of dealing with the upgrade issue. A networking patch where the upgrade impact is far more critical was approved (https://review.openstack.org/126309). That actually forces developers to rewrite applications. So I am very confused here.","commit_id":"de5fc6240558cd36518e9ddd13c29b3b60bcee7c"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"64966fc8ae170fe55b0dd176185387c8ccddd4bf","unresolved":false,"context_lines":[{"line_number":20,"context_line":"rescue would take place on the new VM. This is prone to an endless"},{"line_number":21,"context_line":"amount of problems. Some of the issues found are:"},{"line_number":22,"context_line":" - unable to access the VNC console of a rescued instance"},{"line_number":23,"context_line":" - unstable to suspend or resume a rescued instance"},{"line_number":24,"context_line":" - rescue with ephemeral disks does not work"},{"line_number":25,"context_line":"This patch now uses an inplace rescue on the same"},{"line_number":26,"context_line":"VM. It is suggested that when upgrading to the latest version to ensure"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":37,"id":"9a80dd14_45ee58ee","line":23,"updated":"2015-03-13 15:21:24.000000000","message":"nit: unstable -\u003e unable","commit_id":"cd1765459a24e52e1b933c8e05517fed75ac9d41"}],"nova/tests/unit/virt/vmwareapi/test_vm_util.py":[{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"d3dd599178025098d765a246f49628f445413582","unresolved":false,"context_lines":[{"line_number":1208,"context_line":"        expected \u003d fake_factory.create(\u0027ns0:VirtualMachineConfigSpec\u0027)"},{"line_number":1209,"context_line":"        boot_disk \u003d fake_factory.create("},{"line_number":1210,"context_line":"            \u0027ns0:VirtualMachineBootOptionsBootableDiskDevice\u0027)"},{"line_number":1211,"context_line":"        boot_disk.deviceKey \u003d 7"},{"line_number":1212,"context_line":"        boot_options \u003d fake_factory.create(\u0027ns0:VirtualMachineBootOptions\u0027)"},{"line_number":1213,"context_line":"        boot_options.bootOrder \u003d [boot_disk]"},{"line_number":1214,"context_line":"        expected.bootOptions \u003d boot_options"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a80dd14_4f8fc523","line":1211,"updated":"2015-03-11 16:33:39.000000000","message":"nit: set to \u0027disk.key\u0027 so there\u0027s only one constant to change (if change is necessary at some point in the future)","commit_id":"6e21ed598e2c32a5b46012ef563a948d47ddc70d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"43836ec3a10131b265e24d068ca227a06c90cd51","unresolved":false,"context_lines":[{"line_number":1208,"context_line":"        expected \u003d fake_factory.create(\u0027ns0:VirtualMachineConfigSpec\u0027)"},{"line_number":1209,"context_line":"        boot_disk \u003d fake_factory.create("},{"line_number":1210,"context_line":"            \u0027ns0:VirtualMachineBootOptionsBootableDiskDevice\u0027)"},{"line_number":1211,"context_line":"        boot_disk.deviceKey \u003d 7"},{"line_number":1212,"context_line":"        boot_options \u003d fake_factory.create(\u0027ns0:VirtualMachineBootOptions\u0027)"},{"line_number":1213,"context_line":"        boot_options.bootOrder \u003d [boot_disk]"},{"line_number":1214,"context_line":"        expected.bootOptions \u003d boot_options"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a80dd14_796ef8ca","line":1211,"in_reply_to":"9a80dd14_4f8fc523","updated":"2015-03-12 04:50:47.000000000","message":"Done","commit_id":"6e21ed598e2c32a5b46012ef563a948d47ddc70d"}],"nova/tests/unit/virt/vmwareapi/test_vmops.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4750135a63d5844dbecc9376c4b77bfb24030b62","unresolved":false,"context_lines":[{"line_number":352,"context_line":"    @mock.patch.object(ds_util, \u0027disk_copy\u0027)"},{"line_number":353,"context_line":"    @mock.patch.object(vm_util, \u0027get_vm_ref\u0027, return_value\u003d\u0027fake-ref\u0027)"},{"line_number":354,"context_line":"    @mock.patch.object(vm_util, \u0027get_values_from_object_properties\u0027)"},{"line_number":355,"context_line":"    @mock.patch.object(glance, \u0027get_default_image_service\u0027)"},{"line_number":356,"context_line":"    @mock.patch.object(vm_util, \u0027find_rescue_device\u0027)"},{"line_number":357,"context_line":"    @mock.patch.object(vm_util, \u0027get_vm_boot_spec\u0027)"},{"line_number":358,"context_line":"    @mock.patch.object(vm_util, \u0027reconfigure_vm\u0027)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba7be1f8_8693e6a1","line":355,"updated":"2015-03-03 22:10:21.000000000","message":"This call isn\u0027t used, apparently. You don\u0027t use the mock nor do you set the return_value anywhere. Plus, I don\u0027t see this code called anywhere in the changed code in vmops.py. I recommend removing it (the number of mocks here already is a lot and indicates too great code complexity in the rescue() functionality)","commit_id":"b561bcb7bc01fa391af3db974c18edc78179c48f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"605e48697dbe5d3da9bc28615497a5f2efcba9e3","unresolved":false,"context_lines":[{"line_number":352,"context_line":"    @mock.patch.object(ds_util, \u0027disk_copy\u0027)"},{"line_number":353,"context_line":"    @mock.patch.object(vm_util, \u0027get_vm_ref\u0027, return_value\u003d\u0027fake-ref\u0027)"},{"line_number":354,"context_line":"    @mock.patch.object(vm_util, \u0027get_values_from_object_properties\u0027)"},{"line_number":355,"context_line":"    @mock.patch.object(glance, \u0027get_default_image_service\u0027)"},{"line_number":356,"context_line":"    @mock.patch.object(vm_util, \u0027find_rescue_device\u0027)"},{"line_number":357,"context_line":"    @mock.patch.object(vm_util, \u0027get_vm_boot_spec\u0027)"},{"line_number":358,"context_line":"    @mock.patch.object(vm_util, \u0027reconfigure_vm\u0027)"}],"source_content_type":"text/x-python","patch_set":32,"id":"9a80dd14_b05a9e4e","line":355,"in_reply_to":"ba7be1f8_8693e6a1","updated":"2015-03-04 07:56:28.000000000","message":"Done","commit_id":"b561bcb7bc01fa391af3db974c18edc78179c48f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4750135a63d5844dbecc9376c4b77bfb24030b62","unresolved":false,"context_lines":[{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        with contextlib.nested("},{"line_number":384,"context_line":"            mock.patch.object(self._vmops, \u0027get_datacenter_ref_and_name\u0027),"},{"line_number":385,"context_line":"            mock.patch.object(vm_util, \u0027power_off_instance\u0027),"},{"line_number":386,"context_line":"            mock.patch.object(vm_util, \u0027get_vmdk_info\u0027,"},{"line_number":387,"context_line":"                              return_value\u003dvmdk)"},{"line_number":388,"context_line":"        ) as (_get_dc_ref_and_name, _power_off, fake_vmdk_info):"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba7be1f8_866f6691","line":385,"updated":"2015-03-03 22:10:21.000000000","message":"Any reason you kept the above mock here instead of as a decorator on the test method?","commit_id":"b561bcb7bc01fa391af3db974c18edc78179c48f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"605e48697dbe5d3da9bc28615497a5f2efcba9e3","unresolved":false,"context_lines":[{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        with contextlib.nested("},{"line_number":384,"context_line":"            mock.patch.object(self._vmops, \u0027get_datacenter_ref_and_name\u0027),"},{"line_number":385,"context_line":"            mock.patch.object(vm_util, \u0027power_off_instance\u0027),"},{"line_number":386,"context_line":"            mock.patch.object(vm_util, \u0027get_vmdk_info\u0027,"},{"line_number":387,"context_line":"                              return_value\u003dvmdk)"},{"line_number":388,"context_line":"        ) as (_get_dc_ref_and_name, _power_off, fake_vmdk_info):"}],"source_content_type":"text/x-python","patch_set":32,"id":"9a80dd14_70174652","line":385,"in_reply_to":"ba7be1f8_866f6691","updated":"2015-03-04 07:56:28.000000000","message":"Done","commit_id":"b561bcb7bc01fa391af3db974c18edc78179c48f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4750135a63d5844dbecc9376c4b77bfb24030b62","unresolved":false,"context_lines":[{"line_number":384,"context_line":"            mock.patch.object(self._vmops, \u0027get_datacenter_ref_and_name\u0027),"},{"line_number":385,"context_line":"            mock.patch.object(vm_util, \u0027power_off_instance\u0027),"},{"line_number":386,"context_line":"            mock.patch.object(vm_util, \u0027get_vmdk_info\u0027,"},{"line_number":387,"context_line":"                              return_value\u003dvmdk)"},{"line_number":388,"context_line":"        ) as (_get_dc_ref_and_name, _power_off, fake_vmdk_info):"},{"line_number":389,"context_line":"            _get_dc_ref_and_name.return_value \u003d dc_info"},{"line_number":390,"context_line":"            self._vmops.rescue(self._context, self._instance, None, None)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba7be1f8_e60742c8","line":387,"updated":"2015-03-03 22:10:21.000000000","message":"ditto...","commit_id":"b561bcb7bc01fa391af3db974c18edc78179c48f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"605e48697dbe5d3da9bc28615497a5f2efcba9e3","unresolved":false,"context_lines":[{"line_number":384,"context_line":"            mock.patch.object(self._vmops, \u0027get_datacenter_ref_and_name\u0027),"},{"line_number":385,"context_line":"            mock.patch.object(vm_util, \u0027power_off_instance\u0027),"},{"line_number":386,"context_line":"            mock.patch.object(vm_util, \u0027get_vmdk_info\u0027,"},{"line_number":387,"context_line":"                              return_value\u003dvmdk)"},{"line_number":388,"context_line":"        ) as (_get_dc_ref_and_name, _power_off, fake_vmdk_info):"},{"line_number":389,"context_line":"            _get_dc_ref_and_name.return_value \u003d dc_info"},{"line_number":390,"context_line":"            self._vmops.rescue(self._context, self._instance, None, None)"}],"source_content_type":"text/x-python","patch_set":32,"id":"9a80dd14_d0055215","line":387,"in_reply_to":"ba7be1f8_e60742c8","updated":"2015-03-04 07:56:28.000000000","message":"we need the vmdk returned here - the creation of that is a little complex to be used as a decorator - that is lines 373 - 378","commit_id":"b561bcb7bc01fa391af3db974c18edc78179c48f"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"d3dd599178025098d765a246f49628f445413582","unresolved":false,"context_lines":[{"line_number":366,"context_line":"                    mock_power_off):"},{"line_number":367,"context_line":"        _volumeops \u003d mock.Mock()"},{"line_number":368,"context_line":"        self._vmops._volumeops \u003d _volumeops"},{"line_number":369,"context_line":"        dc_info \u003d mock.Mock()"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        ds \u003d ds_util.Datastore(\u0027fake-ref\u0027, \u0027ds1\u0027)"},{"line_number":372,"context_line":"        mock_get_ds_by_ref.return_value \u003d ds"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a80dd14_92572202","line":369,"updated":"2015-03-11 16:33:39.000000000","message":"nit: could move to with block as not used outline of that block","commit_id":"6e21ed598e2c32a5b46012ef563a948d47ddc70d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"43836ec3a10131b265e24d068ca227a06c90cd51","unresolved":false,"context_lines":[{"line_number":366,"context_line":"                    mock_power_off):"},{"line_number":367,"context_line":"        _volumeops \u003d mock.Mock()"},{"line_number":368,"context_line":"        self._vmops._volumeops \u003d _volumeops"},{"line_number":369,"context_line":"        dc_info \u003d mock.Mock()"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        ds \u003d ds_util.Datastore(\u0027fake-ref\u0027, \u0027ds1\u0027)"},{"line_number":372,"context_line":"        mock_get_ds_by_ref.return_value \u003d ds"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a80dd14_79a51803","line":369,"in_reply_to":"9a80dd14_92572202","updated":"2015-03-12 04:50:47.000000000","message":"Done","commit_id":"6e21ed598e2c32a5b46012ef563a948d47ddc70d"}],"nova/virt/vmwareapi/vm_util.py":[{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"fd8b5f83e6bfd575e23f7a712284370273360779","unresolved":false,"context_lines":[{"line_number":226,"context_line":"    return config_spec"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"def get_vm_boot_spec(client_factory, device):"},{"line_number":230,"context_line":"    config_spec \u003d client_factory.create(\u0027ns0:VirtualMachineConfigSpec\u0027)"},{"line_number":231,"context_line":"    boot_disk \u003d client_factory.create("},{"line_number":232,"context_line":"        \u0027ns0:VirtualMachineBootOptionsBootableDiskDevice\u0027)"}],"source_content_type":"text/x-python","patch_set":29,"id":"da86d52c_7bc0347c","line":229,"updated":"2015-02-19 15:06:27.000000000","message":"Don\u0027t see any unit tests for this function.","commit_id":"3301e663a999f3f0eeb9dc0c261d1af681d3422d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"79268c9da1f79af08cbb7bfd0c1837e72a310a35","unresolved":false,"context_lines":[{"line_number":226,"context_line":"    return config_spec"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"def get_vm_boot_spec(client_factory, device):"},{"line_number":230,"context_line":"    config_spec \u003d client_factory.create(\u0027ns0:VirtualMachineConfigSpec\u0027)"},{"line_number":231,"context_line":"    boot_disk \u003d client_factory.create("},{"line_number":232,"context_line":"        \u0027ns0:VirtualMachineBootOptionsBootableDiskDevice\u0027)"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba7be1f8_13c97678","line":229,"in_reply_to":"da86d52c_7bc0347c","updated":"2015-02-22 15:58:42.000000000","message":"Done","commit_id":"3301e663a999f3f0eeb9dc0c261d1af681d3422d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"79268c9da1f79af08cbb7bfd0c1837e72a310a35","unresolved":false,"context_lines":[{"line_number":226,"context_line":"    return config_spec"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"def get_vm_boot_spec(client_factory, device):"},{"line_number":230,"context_line":"    config_spec \u003d client_factory.create(\u0027ns0:VirtualMachineConfigSpec\u0027)"},{"line_number":231,"context_line":"    boot_disk \u003d client_factory.create("},{"line_number":232,"context_line":"        \u0027ns0:VirtualMachineBootOptionsBootableDiskDevice\u0027)"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba7be1f8_53068ecf","line":229,"in_reply_to":"da86d52c_7bc0347c","updated":"2015-02-22 15:58:42.000000000","message":"Done","commit_id":"3301e663a999f3f0eeb9dc0c261d1af681d3422d"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"fd8b5f83e6bfd575e23f7a712284370273360779","unresolved":false,"context_lines":[{"line_number":1440,"context_line":"        LOG.debug(\"VM already powered off\", instance\u003dinstance)"},{"line_number":1441,"context_line":""},{"line_number":1442,"context_line":""},{"line_number":1443,"context_line":"def find_rescue_device(hardware_devices):"},{"line_number":1444,"context_line":"    for device in hardware_devices.VirtualDevice:"},{"line_number":1445,"context_line":"        if device.__class__.__name__ !\u003d \"VirtualDisk\":"},{"line_number":1446,"context_line":"            continue"}],"source_content_type":"text/x-python","patch_set":29,"id":"da86d52c_5bde106e","line":1443,"updated":"2015-02-19 15:06:27.000000000","message":"ditto","commit_id":"3301e663a999f3f0eeb9dc0c261d1af681d3422d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"79268c9da1f79af08cbb7bfd0c1837e72a310a35","unresolved":false,"context_lines":[{"line_number":1440,"context_line":"        LOG.debug(\"VM already powered off\", instance\u003dinstance)"},{"line_number":1441,"context_line":""},{"line_number":1442,"context_line":""},{"line_number":1443,"context_line":"def find_rescue_device(hardware_devices):"},{"line_number":1444,"context_line":"    for device in hardware_devices.VirtualDevice:"},{"line_number":1445,"context_line":"        if device.__class__.__name__ !\u003d \"VirtualDisk\":"},{"line_number":1446,"context_line":"            continue"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba7be1f8_f3c9427a","line":1443,"in_reply_to":"da86d52c_5bde106e","updated":"2015-02-22 15:58:42.000000000","message":"Done","commit_id":"3301e663a999f3f0eeb9dc0c261d1af681d3422d"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"fd8b5f83e6bfd575e23f7a712284370273360779","unresolved":false,"context_lines":[{"line_number":1447,"context_line":""},{"line_number":1448,"context_line":"        if (device.backing.__class__.__name__ !\u003d"},{"line_number":1449,"context_line":"                \u0027VirtualDiskFlatVer2BackingInfo\u0027):"},{"line_number":1450,"context_line":"            continue"},{"line_number":1451,"context_line":"        if device.backing.fileName.endswith(\u0027-rescue.vmdk\u0027):"},{"line_number":1452,"context_line":"            return device"},{"line_number":1453,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"da86d52c_785afa50","line":1450,"updated":"2015-02-19 15:06:27.000000000","message":"Can we compress these three conditionals into a single if statement? I think the logic would be easier to follow in that case:\n\n    if (device.__class__.__name__ \u003d\u003d \"VirtualDisk\" and\n        device.backing.__class__.__name__ \u003d\u003d \"VirtualDiskFlatVer2BackingInfo\" and\n        device.backing.fileName.endswith(\"-rescue.vmdk\")):","commit_id":"3301e663a999f3f0eeb9dc0c261d1af681d3422d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"79268c9da1f79af08cbb7bfd0c1837e72a310a35","unresolved":false,"context_lines":[{"line_number":1447,"context_line":""},{"line_number":1448,"context_line":"        if (device.backing.__class__.__name__ !\u003d"},{"line_number":1449,"context_line":"                \u0027VirtualDiskFlatVer2BackingInfo\u0027):"},{"line_number":1450,"context_line":"            continue"},{"line_number":1451,"context_line":"        if device.backing.fileName.endswith(\u0027-rescue.vmdk\u0027):"},{"line_number":1452,"context_line":"            return device"},{"line_number":1453,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"ba7be1f8_f035b8db","line":1450,"in_reply_to":"da86d52c_785afa50","updated":"2015-02-22 15:58:42.000000000","message":"Done","commit_id":"3301e663a999f3f0eeb9dc0c261d1af681d3422d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4750135a63d5844dbecc9376c4b77bfb24030b62","unresolved":false,"context_lines":[{"line_number":1465,"context_line":"                device.backing.fileName.endswith(\u0027-rescue.vmdk\u0027)):"},{"line_number":1466,"context_line":"            return device"},{"line_number":1467,"context_line":""},{"line_number":1468,"context_line":"    raise exception.DiskNotFound(location\u003d\u0027-rescue.vmdk\u0027)"},{"line_number":1469,"context_line":""},{"line_number":1470,"context_line":""},{"line_number":1471,"context_line":"def get_ephemeral_name(id):"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba7be1f8_43ad609a","line":1468,"updated":"2015-03-03 22:10:21.000000000","message":"Hmm, the location kwarg above doesn\u0027t seem to be correct. Not sure if this exception ends up being bubbled up back to the user, but if so, the user probably would be pretty confused to see \"-rescue.vmdk not found\".","commit_id":"b561bcb7bc01fa391af3db974c18edc78179c48f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"605e48697dbe5d3da9bc28615497a5f2efcba9e3","unresolved":false,"context_lines":[{"line_number":1465,"context_line":"                device.backing.fileName.endswith(\u0027-rescue.vmdk\u0027)):"},{"line_number":1466,"context_line":"            return device"},{"line_number":1467,"context_line":""},{"line_number":1468,"context_line":"    raise exception.DiskNotFound(location\u003d\u0027-rescue.vmdk\u0027)"},{"line_number":1469,"context_line":""},{"line_number":1470,"context_line":""},{"line_number":1471,"context_line":"def get_ephemeral_name(id):"}],"source_content_type":"text/x-python","patch_set":32,"id":"9a80dd14_1b4d4b73","line":1468,"in_reply_to":"ba7be1f8_43ad609a","updated":"2015-03-04 07:56:28.000000000","message":"Very good point. I have changed this to NotFound\nThe operation will fail and the user will bet an error.","commit_id":"b561bcb7bc01fa391af3db974c18edc78179c48f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"608502dc7a45c44e70e021aa9193b85d5a83a13b","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    return config_spec"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"def get_vm_boot_spec(client_factory, device):"},{"line_number":243,"context_line":"    config_spec \u003d client_factory.create(\u0027ns0:VirtualMachineConfigSpec\u0027)"},{"line_number":244,"context_line":"    boot_disk \u003d client_factory.create("},{"line_number":245,"context_line":"        \u0027ns0:VirtualMachineBootOptionsBootableDiskDevice\u0027)"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_a65ecce7","line":242,"updated":"2015-03-04 19:17:41.000000000","message":"Please document this code and what it\u0027s doing because it makes no sense to me.","commit_id":"69411509f70174ed7151883f6b0cf0c0775007c2"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ed48356a9b877d0837c592aa588d8e6a0b444479","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    return config_spec"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"def get_vm_boot_spec(client_factory, device):"},{"line_number":243,"context_line":"    config_spec \u003d client_factory.create(\u0027ns0:VirtualMachineConfigSpec\u0027)"},{"line_number":244,"context_line":"    boot_disk \u003d client_factory.create("},{"line_number":245,"context_line":"        \u0027ns0:VirtualMachineBootOptionsBootableDiskDevice\u0027)"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_e3941739","line":242,"in_reply_to":"9a80dd14_a65ecce7","updated":"2015-03-05 11:47:08.000000000","message":"Done","commit_id":"69411509f70174ed7151883f6b0cf0c0775007c2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"608502dc7a45c44e70e021aa9193b85d5a83a13b","unresolved":false,"context_lines":[{"line_number":1458,"context_line":""},{"line_number":1459,"context_line":""},{"line_number":1460,"context_line":"def find_rescue_device(hardware_devices):"},{"line_number":1461,"context_line":"    for device in hardware_devices.VirtualDevice:"},{"line_number":1462,"context_line":"        if (device.__class__.__name__ \u003d\u003d \"VirtualDisk\" and"},{"line_number":1463,"context_line":"                device.backing.__class__.__name__ \u003d\u003d"},{"line_number":1464,"context_line":"                \u0027VirtualDiskFlatVer2BackingInfo\u0027 and"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_46f6f0d8","line":1461,"updated":"2015-03-04 19:17:41.000000000","message":"Please document this stuff.","commit_id":"69411509f70174ed7151883f6b0cf0c0775007c2"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ed48356a9b877d0837c592aa588d8e6a0b444479","unresolved":false,"context_lines":[{"line_number":1458,"context_line":""},{"line_number":1459,"context_line":""},{"line_number":1460,"context_line":"def find_rescue_device(hardware_devices):"},{"line_number":1461,"context_line":"    for device in hardware_devices.VirtualDevice:"},{"line_number":1462,"context_line":"        if (device.__class__.__name__ \u003d\u003d \"VirtualDisk\" and"},{"line_number":1463,"context_line":"                device.backing.__class__.__name__ \u003d\u003d"},{"line_number":1464,"context_line":"                \u0027VirtualDiskFlatVer2BackingInfo\u0027 and"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_e3097796","line":1461,"in_reply_to":"9a80dd14_46f6f0d8","updated":"2015-03-05 11:47:08.000000000","message":"Done","commit_id":"69411509f70174ed7151883f6b0cf0c0775007c2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"608502dc7a45c44e70e021aa9193b85d5a83a13b","unresolved":false,"context_lines":[{"line_number":1465,"context_line":"                device.backing.fileName.endswith(\u0027-rescue.vmdk\u0027)):"},{"line_number":1466,"context_line":"            return device"},{"line_number":1467,"context_line":""},{"line_number":1468,"context_line":"    raise exception.NotFound(_(\u0027Rescue device does not exist!\u0027))"},{"line_number":1469,"context_line":""},{"line_number":1470,"context_line":""},{"line_number":1471,"context_line":"def get_ephemeral_name(id):"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_e60fe4df","line":1468,"updated":"2015-03-04 19:17:41.000000000","message":"Would be good to have some context in here, i.e. the instance/vm_ref that you\u0027re failing to find hw devices for.  Also, what is someone supposed to do to recover from this?  Anything to put into the error on how they can help fix this?","commit_id":"69411509f70174ed7151883f6b0cf0c0775007c2"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ed48356a9b877d0837c592aa588d8e6a0b444479","unresolved":false,"context_lines":[{"line_number":1465,"context_line":"                device.backing.fileName.endswith(\u0027-rescue.vmdk\u0027)):"},{"line_number":1466,"context_line":"            return device"},{"line_number":1467,"context_line":""},{"line_number":1468,"context_line":"    raise exception.NotFound(_(\u0027Rescue device does not exist!\u0027))"},{"line_number":1469,"context_line":""},{"line_number":1470,"context_line":""},{"line_number":1471,"context_line":"def get_ephemeral_name(id):"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_83f27b98","line":1468,"in_reply_to":"9a80dd14_e60fe4df","updated":"2015-03-05 11:47:08.000000000","message":"Done","commit_id":"69411509f70174ed7151883f6b0cf0c0775007c2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"02201d9b73497198bef618cef4700dd66de80019","unresolved":false,"context_lines":[{"line_number":1463,"context_line":""},{"line_number":1464,"context_line":""},{"line_number":1465,"context_line":"def find_rescue_device(hardware_devices, instance):"},{"line_number":1466,"context_line":"    \"\"\"Returns the rescus device."},{"line_number":1467,"context_line":""},{"line_number":1468,"context_line":"    The method will raise an exception of the rescue device does not"},{"line_number":1469,"context_line":"    exist. The resuce device has suffix \u0027-rescue.vmdk\u0027."}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_80b3ba4b","line":1466,"updated":"2015-03-09 18:17:58.000000000","message":"s/rescus/rescue/\n\nWould probably be helpful to have :param: and :return: documented in here since just reading the docstring I don\u0027t know if rescue device returned is a string of a name of something, a path to a thing, or an object.","commit_id":"b2fe26e32e42c65c73756158ce171cbf1ffe3c74"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"02201d9b73497198bef618cef4700dd66de80019","unresolved":false,"context_lines":[{"line_number":1465,"context_line":"def find_rescue_device(hardware_devices, instance):"},{"line_number":1466,"context_line":"    \"\"\"Returns the rescus device."},{"line_number":1467,"context_line":""},{"line_number":1468,"context_line":"    The method will raise an exception of the rescue device does not"},{"line_number":1469,"context_line":"    exist. The resuce device has suffix \u0027-rescue.vmdk\u0027."},{"line_number":1470,"context_line":"    \"\"\""},{"line_number":1471,"context_line":"    for device in hardware_devices.VirtualDevice:"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_c0885273","line":1468,"updated":"2015-03-09 18:17:58.000000000","message":"s/of/if/","commit_id":"b2fe26e32e42c65c73756158ce171cbf1ffe3c74"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"d3dd599178025098d765a246f49628f445413582","unresolved":false,"context_lines":[{"line_number":243,"context_line":"    \"\"\"Returns updated boot settings for the instance."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    The boot order for the instance will be changed to have the"},{"line_number":246,"context_line":"    input device as the boot disk."},{"line_number":247,"context_line":"    \"\"\""},{"line_number":248,"context_line":"    config_spec \u003d client_factory.create(\u0027ns0:VirtualMachineConfigSpec\u0027)"},{"line_number":249,"context_line":"    boot_disk \u003d client_factory.create("}],"source_content_type":"text/x-python","patch_set":35,"id":"9a80dd14_925802fc","line":246,"updated":"2015-03-11 16:33:39.000000000","message":"Is this statement still true? I don\u0027t see where the boot order for the instance is changed... it looks like a new configuration object is returned.","commit_id":"6e21ed598e2c32a5b46012ef563a948d47ddc70d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"43836ec3a10131b265e24d068ca227a06c90cd51","unresolved":false,"context_lines":[{"line_number":243,"context_line":"    \"\"\"Returns updated boot settings for the instance."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    The boot order for the instance will be changed to have the"},{"line_number":246,"context_line":"    input device as the boot disk."},{"line_number":247,"context_line":"    \"\"\""},{"line_number":248,"context_line":"    config_spec \u003d client_factory.create(\u0027ns0:VirtualMachineConfigSpec\u0027)"},{"line_number":249,"context_line":"    boot_disk \u003d client_factory.create("}],"source_content_type":"text/x-python","patch_set":35,"id":"9a80dd14_797c3873","line":246,"in_reply_to":"9a80dd14_925802fc","updated":"2015-03-12 04:50:47.000000000","message":"The object returned has VirtualMachineBootOptionsBootableDiskDevice set with the device.key - that indicates the boot order.","commit_id":"6e21ed598e2c32a5b46012ef563a948d47ddc70d"}],"nova/virt/vmwareapi/vmops.py":[{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"15855cbbc40a19e683d127b4fb3125b485401dfe","unresolved":false,"context_lines":[{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"        self.spawn(context, instance, image_meta,"},{"line_number":1034,"context_line":"                   None, None, network_info,"},{"line_number":1035,"context_line":"                   instance_name\u003d\u0027%s-rescue\u0027 % instance.uuid,"},{"line_number":1036,"context_line":"                   power_on\u003dFalse)"},{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"        # Attach vmdk to the rescue VM"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ac7a964_618d8f7b","line":1035,"updated":"2014-08-14 10:56:43.000000000","message":"we already have _rescue_suffix\u003d\u0027-orig\u0027 and this comes confusing right here\n\nIn fact, I think we can directly spawn a new instance with instance_name\u003dinstance.uuid and skip the associate_vmref call below","commit_id":"699671ee5dae15475311994eb66e65dea1b80680"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"5eaea1d9be202cf1a76913fede4be0a01e36e32f","unresolved":false,"context_lines":[{"line_number":973,"context_line":"                                           lst_properties)"},{"line_number":974,"context_line":"        query \u003d vm_util.get_values_from_object_properties("},{"line_number":975,"context_line":"                self._session, props)"},{"line_number":976,"context_line":"        hardware_devices \u003d query[\u0027config.hardware.device\u0027]"},{"line_number":977,"context_line":"        datastores \u003d query[\u0027datastore\u0027]"},{"line_number":978,"context_line":"        ds_ref \u003d datastores.ManagedObjectReference[0]"},{"line_number":979,"context_line":"        datastore \u003d ds_util.get_datastore_by_ref(self._session, ds_ref)"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa81d914_47a9647a","line":976,"updated":"2015-01-28 23:18:57.000000000","message":"delete this line; we get the hardware devices on line 1000","commit_id":"5e937978d9b1771a312b8d7234062362dadeee81"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"608502dc7a45c44e70e021aa9193b85d5a83a13b","unresolved":false,"context_lines":[{"line_number":1040,"context_line":"        # Get the original vmdk_path"},{"line_number":1041,"context_line":"        vm_ref \u003d vm_util.get_vm_ref(self._session, instance)"},{"line_number":1042,"context_line":"        vmdk \u003d vm_util.get_vmdk_info(self._session, vm_ref, instance.uuid)"},{"line_number":1043,"context_line":"        instance_name \u003d instance.uuid + self._rescue_suffix"},{"line_number":1044,"context_line":"        # detach the original instance disk from the rescue disk"},{"line_number":1045,"context_line":"        vm_rescue_ref \u003d vm_util.get_vm_ref_from_name(self._session,"},{"line_number":1046,"context_line":"                                                     instance_name)"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_e6ca84a0","side":"PARENT","line":1043,"updated":"2015-03-04 19:17:41.000000000","message":"So what happens when I update my compute to this code and I have instances that are rescued with the old format, and go to unrescue them and the name is a different format, that\u0027s all busted now right and I can\u0027t recover those instances?  Seems you are missing some backwards compatibility checking here.","commit_id":"5208925c2931f904bff92346298b9ea04af4bc94"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"efaed337c56773b03c4a0a7381c1e587742963f2","unresolved":false,"context_lines":[{"line_number":1040,"context_line":"        # Get the original vmdk_path"},{"line_number":1041,"context_line":"        vm_ref \u003d vm_util.get_vm_ref(self._session, instance)"},{"line_number":1042,"context_line":"        vmdk \u003d vm_util.get_vmdk_info(self._session, vm_ref, instance.uuid)"},{"line_number":1043,"context_line":"        instance_name \u003d instance.uuid + self._rescue_suffix"},{"line_number":1044,"context_line":"        # detach the original instance disk from the rescue disk"},{"line_number":1045,"context_line":"        vm_rescue_ref \u003d vm_util.get_vm_ref_from_name(self._session,"},{"line_number":1046,"context_line":"                                                     instance_name)"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_c03212a6","side":"PARENT","line":1043,"in_reply_to":"9a80dd14_72cb8e1e","updated":"2015-03-09 18:18:44.000000000","message":"This needs to be fleshed out with the DocImpact tag in the commit message.","commit_id":"5208925c2931f904bff92346298b9ea04af4bc94"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ed48356a9b877d0837c592aa588d8e6a0b444479","unresolved":false,"context_lines":[{"line_number":1040,"context_line":"        # Get the original vmdk_path"},{"line_number":1041,"context_line":"        vm_ref \u003d vm_util.get_vm_ref(self._session, instance)"},{"line_number":1042,"context_line":"        vmdk \u003d vm_util.get_vmdk_info(self._session, vm_ref, instance.uuid)"},{"line_number":1043,"context_line":"        instance_name \u003d instance.uuid + self._rescue_suffix"},{"line_number":1044,"context_line":"        # detach the original instance disk from the rescue disk"},{"line_number":1045,"context_line":"        vm_rescue_ref \u003d vm_util.get_vm_ref_from_name(self._session,"},{"line_number":1046,"context_line":"                                                     instance_name)"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_72cb8e1e","side":"PARENT","line":1043,"in_reply_to":"9a80dd14_e6ca84a0","updated":"2015-03-05 11:47:08.000000000","message":"the unrescue would be a problem. having said that we know that the rescue has many issues (and in most cases I am not sure how the user can access the instance as they do not have VNC access). i think that it we document that the admin gives enough of a window to suggest that rescue/unrescue does not take place in a specific period should enable the update of a compute node. the admin could also enforce this via API policy changes for the upgrade period.","commit_id":"5208925c2931f904bff92346298b9ea04af4bc94"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"608502dc7a45c44e70e021aa9193b85d5a83a13b","unresolved":false,"context_lines":[{"line_number":1001,"context_line":"        \"\"\""},{"line_number":1002,"context_line":"        vm_ref \u003d vm_util.get_vm_ref(self._session, instance)"},{"line_number":1003,"context_line":""},{"line_number":1004,"context_line":"        vmdk \u003d vm_util.get_vmdk_info(self._session, vm_ref,"},{"line_number":1005,"context_line":"                                     uuid\u003dinstance.uuid)"},{"line_number":1006,"context_line":"        ds_ref \u003d vmdk.device.backing.datastore"},{"line_number":1007,"context_line":"        datastore \u003d ds_util.get_datastore_by_ref(self._session, ds_ref)"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_26af3ce5","line":1004,"updated":"2015-03-04 19:17:41.000000000","message":"Since everything is being refactored anyway, this whole method could stand to have some operation-by-operation code comments on what is actually going on, because to those that don\u0027t work on the vmware driver on a daily basis this is hard to follow and I don\u0027t know what can potentially be lost here, but I do know that I\u0027ve had to backport at least two CVE fixes for this rescue path code before and I really really hate the giant refactoring patches required to fix a bug, so better documentation of what\u0027s actually going on in the code would be helpful.","commit_id":"69411509f70174ed7151883f6b0cf0c0775007c2"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ed48356a9b877d0837c592aa588d8e6a0b444479","unresolved":false,"context_lines":[{"line_number":1001,"context_line":"        \"\"\""},{"line_number":1002,"context_line":"        vm_ref \u003d vm_util.get_vm_ref(self._session, instance)"},{"line_number":1003,"context_line":""},{"line_number":1004,"context_line":"        vmdk \u003d vm_util.get_vmdk_info(self._session, vm_ref,"},{"line_number":1005,"context_line":"                                     uuid\u003dinstance.uuid)"},{"line_number":1006,"context_line":"        ds_ref \u003d vmdk.device.backing.datastore"},{"line_number":1007,"context_line":"        datastore \u003d ds_util.get_datastore_by_ref(self._session, ds_ref)"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_cf89f5cb","line":1004,"in_reply_to":"9a80dd14_26af3ce5","updated":"2015-03-05 11:47:08.000000000","message":"The CVE\u0027s were actually a result of the dodgy way in which the rescue was implemented. That is, it would create a new VM as the rescue VM and then attach disks. As you know from the CVEs that was problematic. In addition to the bug mentioned here - there is no VNC access to the rescue disk there are also tons of other issues. \nHence we decided to go the correct pacth of using the same instance and changing the boot order. Not only will this address all issues that we have had it will also enable us to close the gap with the other drivers and BP\u0027s supprted - for example specifying a specific rescuse disk.","commit_id":"69411509f70174ed7151883f6b0cf0c0775007c2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"608502dc7a45c44e70e021aa9193b85d5a83a13b","unresolved":false,"context_lines":[{"line_number":1008,"context_line":"        dc_info \u003d self.get_datacenter_ref_and_name(datastore.ref)"},{"line_number":1009,"context_line":"        image_info \u003d images.VMwareImage.from_image(instance.image_ref,"},{"line_number":1010,"context_line":"                                                   image_meta)"},{"line_number":1011,"context_line":"        vi \u003d VirtualMachineInstanceConfigInfo(instance,"},{"line_number":1012,"context_line":"                                              None,"},{"line_number":1013,"context_line":"                                              image_info,"},{"line_number":1014,"context_line":"                                              datastore,"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_c604a017","line":1011,"updated":"2015-03-04 19:17:41.000000000","message":"I wish we could isolate the building of this object into a utility since it looks like it\u0027s only used to get the vi.cache_image_path.","commit_id":"69411509f70174ed7151883f6b0cf0c0775007c2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"efaed337c56773b03c4a0a7381c1e587742963f2","unresolved":false,"context_lines":[{"line_number":1008,"context_line":"        dc_info \u003d self.get_datacenter_ref_and_name(datastore.ref)"},{"line_number":1009,"context_line":"        image_info \u003d images.VMwareImage.from_image(instance.image_ref,"},{"line_number":1010,"context_line":"                                                   image_meta)"},{"line_number":1011,"context_line":"        vi \u003d VirtualMachineInstanceConfigInfo(instance,"},{"line_number":1012,"context_line":"                                              None,"},{"line_number":1013,"context_line":"                                              image_info,"},{"line_number":1014,"context_line":"                                              datastore,"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_250f8038","line":1011,"in_reply_to":"9a80dd14_4f642522","updated":"2015-03-09 18:18:44.000000000","message":"My point was we do all this work above to create this vi object and then we only use it to pass vi.cache_image_path to ds_util.disk_copy on line 1021 below.","commit_id":"69411509f70174ed7151883f6b0cf0c0775007c2"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ed48356a9b877d0837c592aa588d8e6a0b444479","unresolved":false,"context_lines":[{"line_number":1008,"context_line":"        dc_info \u003d self.get_datacenter_ref_and_name(datastore.ref)"},{"line_number":1009,"context_line":"        image_info \u003d images.VMwareImage.from_image(instance.image_ref,"},{"line_number":1010,"context_line":"                                                   image_meta)"},{"line_number":1011,"context_line":"        vi \u003d VirtualMachineInstanceConfigInfo(instance,"},{"line_number":1012,"context_line":"                                              None,"},{"line_number":1013,"context_line":"                                              image_info,"},{"line_number":1014,"context_line":"                                              datastore,"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_4f642522","line":1011,"in_reply_to":"9a80dd14_c604a017","updated":"2015-03-05 11:47:08.000000000","message":"i am not sure that i understand your comment here. we not only use this for the image, we alo use this for the disk properties","commit_id":"69411509f70174ed7151883f6b0cf0c0775007c2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"608502dc7a45c44e70e021aa9193b85d5a83a13b","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"                                              self._imagecache)"},{"line_number":1017,"context_line":"        vm_util.power_off_instance(self._session, instance, vm_ref)"},{"line_number":1018,"context_line":"        rescue_disk_path \u003d datastore.build_path(instance.uuid,"},{"line_number":1019,"context_line":"                \"%s-rescue.%s\" % (image_info.image_id, image_info.file_type))"},{"line_number":1020,"context_line":"        ds_util.disk_copy(self._session, dc_info.ref,"},{"line_number":1021,"context_line":"                          vi.cache_image_path, rescue_disk_path)"},{"line_number":1022,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_83037a0e","line":1019,"updated":"2015-03-04 19:17:41.000000000","message":"Should probably have a helper method to generate the proper name so someone doesn\u0027t screw it up later if they need to get this in another location.","commit_id":"69411509f70174ed7151883f6b0cf0c0775007c2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"efaed337c56773b03c4a0a7381c1e587742963f2","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"                                              self._imagecache)"},{"line_number":1017,"context_line":"        vm_util.power_off_instance(self._session, instance, vm_ref)"},{"line_number":1018,"context_line":"        rescue_disk_path \u003d datastore.build_path(instance.uuid,"},{"line_number":1019,"context_line":"                \"%s-rescue.%s\" % (image_info.image_id, image_info.file_type))"},{"line_number":1020,"context_line":"        ds_util.disk_copy(self._session, dc_info.ref,"},{"line_number":1021,"context_line":"                          vi.cache_image_path, rescue_disk_path)"},{"line_number":1022,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_80173a44","line":1019,"in_reply_to":"9a80dd14_126df298","updated":"2015-03-09 18:18:44.000000000","message":"Another location being somewhere else in the vmops module, i.e. another operation or related method at some point.  Generating paths with hard-coded pieces in them should be isolated into a utility method so more than one method/operation needing that same information doesn\u0027t need to copy the logic.","commit_id":"69411509f70174ed7151883f6b0cf0c0775007c2"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ed48356a9b877d0837c592aa588d8e6a0b444479","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"                                              self._imagecache)"},{"line_number":1017,"context_line":"        vm_util.power_off_instance(self._session, instance, vm_ref)"},{"line_number":1018,"context_line":"        rescue_disk_path \u003d datastore.build_path(instance.uuid,"},{"line_number":1019,"context_line":"                \"%s-rescue.%s\" % (image_info.image_id, image_info.file_type))"},{"line_number":1020,"context_line":"        ds_util.disk_copy(self._session, dc_info.ref,"},{"line_number":1021,"context_line":"                          vi.cache_image_path, rescue_disk_path)"},{"line_number":1022,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_126df298","line":1019,"in_reply_to":"9a80dd14_83037a0e","updated":"2015-03-05 11:47:08.000000000","message":"not sure i understand. the location of the rescue device does not change.","commit_id":"69411509f70174ed7151883f6b0cf0c0775007c2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"608502dc7a45c44e70e021aa9193b85d5a83a13b","unresolved":false,"context_lines":[{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"        vm_ref \u003d vm_util.get_vm_ref(self._session, instance)"},{"line_number":1039,"context_line":"        vm_util.power_off_instance(self._session, instance, vm_ref)"},{"line_number":1040,"context_line":"        hardware_devices \u003d self._session._call_method(vim_util,"},{"line_number":1041,"context_line":"                        \"get_dynamic_property\", vm_ref,"},{"line_number":1042,"context_line":"                        \"VirtualMachine\", \"config.hardware.device\")"},{"line_number":1043,"context_line":"        rescue_device \u003d vm_util.find_rescue_device(hardware_devices)"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_4648b02d","line":1040,"updated":"2015-03-04 19:17:41.000000000","message":"This is duplicated in the rescue method above re: getting the hw devices and finding the rescue device, could be put into a private helper method.","commit_id":"69411509f70174ed7151883f6b0cf0c0775007c2"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ed48356a9b877d0837c592aa588d8e6a0b444479","unresolved":false,"context_lines":[{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"        vm_ref \u003d vm_util.get_vm_ref(self._session, instance)"},{"line_number":1039,"context_line":"        vm_util.power_off_instance(self._session, instance, vm_ref)"},{"line_number":1040,"context_line":"        hardware_devices \u003d self._session._call_method(vim_util,"},{"line_number":1041,"context_line":"                        \"get_dynamic_property\", vm_ref,"},{"line_number":1042,"context_line":"                        \"VirtualMachine\", \"config.hardware.device\")"},{"line_number":1043,"context_line":"        rescue_device \u003d vm_util.find_rescue_device(hardware_devices)"}],"source_content_type":"text/x-python","patch_set":33,"id":"9a80dd14_3247564d","line":1040,"in_reply_to":"9a80dd14_4648b02d","updated":"2015-03-05 11:47:08.000000000","message":"Done","commit_id":"69411509f70174ed7151883f6b0cf0c0775007c2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"02201d9b73497198bef618cef4700dd66de80019","unresolved":false,"context_lines":[{"line_number":1060,"context_line":"                                          vmdk.disk_type, rescue_disk_path)"},{"line_number":1061,"context_line":"        # Get the rescue device and configure the boot order to"},{"line_number":1062,"context_line":"        # boot from this device"},{"line_number":1063,"context_line":"        rescue_device \u003d self._get_rescue_device(instance, vm_ref)"},{"line_number":1064,"context_line":"        factory \u003d self._session.vim.client.factory"},{"line_number":1065,"context_line":"        boot_spec \u003d vm_util.get_vm_boot_spec(factory, rescue_device)"},{"line_number":1066,"context_line":"        # Update the VM with the new boot order and power on"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_00cd0ab7","line":1063,"updated":"2015-03-09 18:17:58.000000000","message":"If this fails with the NotFound raised, should you detach the rescue disk from the instance and remove the copied disk (basically undo attach_disk_to_vm and disk_copy operations above)?","commit_id":"b2fe26e32e42c65c73756158ce171cbf1ffe3c74"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"4f887589e48c899df01babe79a9a1767c0347681","unresolved":false,"context_lines":[{"line_number":1060,"context_line":"                                          vmdk.disk_type, rescue_disk_path)"},{"line_number":1061,"context_line":"        # Get the rescue device and configure the boot order to"},{"line_number":1062,"context_line":"        # boot from this device"},{"line_number":1063,"context_line":"        rescue_device \u003d self._get_rescue_device(instance, vm_ref)"},{"line_number":1064,"context_line":"        factory \u003d self._session.vim.client.factory"},{"line_number":1065,"context_line":"        boot_spec \u003d vm_util.get_vm_boot_spec(factory, rescue_device)"},{"line_number":1066,"context_line":"        # Update the VM with the new boot order and power on"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_bcdd27e2","line":1063,"in_reply_to":"9a80dd14_00cd0ab7","updated":"2015-03-10 10:41:24.000000000","message":"If NotFound is raised this means that attached somehow has failed and I don\u0027t see why we should try to detach. In this case our assumptions are broken and it is best to give up in my opinion.","commit_id":"b2fe26e32e42c65c73756158ce171cbf1ffe3c74"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"02201d9b73497198bef618cef4700dd66de80019","unresolved":false,"context_lines":[{"line_number":1073,"context_line":"        vm_ref \u003d vm_util.get_vm_ref(self._session, instance)"},{"line_number":1074,"context_line":"        vm_util.power_off_instance(self._session, instance, vm_ref)"},{"line_number":1075,"context_line":"        # Get the rescue device and detach it from the instance."},{"line_number":1076,"context_line":"        rescue_device \u003d self._get_rescue_device(instance, vm_ref)"},{"line_number":1077,"context_line":"        self._volumeops.detach_disk_from_vm(vm_ref, instance, rescue_device,"},{"line_number":1078,"context_line":"                                            destroy_disk\u003dTrue)"},{"line_number":1079,"context_line":"        if power_on:"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_80b81a12","line":1076,"updated":"2015-03-09 18:17:58.000000000","message":"If this fails with NotFound, shouldn\u0027t you power the instance back on?","commit_id":"b2fe26e32e42c65c73756158ce171cbf1ffe3c74"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"4f887589e48c899df01babe79a9a1767c0347681","unresolved":false,"context_lines":[{"line_number":1073,"context_line":"        vm_ref \u003d vm_util.get_vm_ref(self._session, instance)"},{"line_number":1074,"context_line":"        vm_util.power_off_instance(self._session, instance, vm_ref)"},{"line_number":1075,"context_line":"        # Get the rescue device and detach it from the instance."},{"line_number":1076,"context_line":"        rescue_device \u003d self._get_rescue_device(instance, vm_ref)"},{"line_number":1077,"context_line":"        self._volumeops.detach_disk_from_vm(vm_ref, instance, rescue_device,"},{"line_number":1078,"context_line":"                                            destroy_disk\u003dTrue)"},{"line_number":1079,"context_line":"        if power_on:"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_fc915ff1","line":1076,"in_reply_to":"9a80dd14_80b81a12","updated":"2015-03-10 10:41:24.000000000","message":"Maybe we can move power_off_instance() after _get_rescue_device()","commit_id":"b2fe26e32e42c65c73756158ce171cbf1ffe3c74"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a9f86861030671327d197241e196cfbe07817e23","unresolved":false,"context_lines":[{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"        vm_ref \u003d vm_util.get_vm_ref(self._session, instance)"},{"line_number":1072,"context_line":"        # Get the rescue device and detach it from the instance."},{"line_number":1073,"context_line":"        rescue_device \u003d self._get_rescue_device(instance, vm_ref)"},{"line_number":1074,"context_line":"        vm_util.power_off_instance(self._session, instance, vm_ref)"},{"line_number":1075,"context_line":"        self._volumeops.detach_disk_from_vm(vm_ref, instance, rescue_device,"},{"line_number":1076,"context_line":"                                            destroy_disk\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_75509dd4","line":1073,"updated":"2015-03-12 17:35:37.000000000","message":"I\u0027m still thinking about that upgrade impact here.  If I performed a rescue prior to upgrading to this code, and then did an unrescue, this will raise a NotFound, right?\n\nThe commit message says that doing a rescue *during* the upgrade may be problematic, but it doesn\u0027t need to be *during* the upgrade as far as I can tell.  If I rescue anytime before the upgrade, then upgrade, then unrescue, it will fail with NotFound.\n\nSo I see two options:\n\n1. Catch the NotFound and dump something into the logs that explains why you can no longer rescue that VM (which seems bad...).\n\nor\n\n2. Put some backwards compatible logic in here such that if we get a NotFound, we fall back to looking up the vm_ref by the old name (instance_name \u003d instance.uuid + self._rescue_suffix), and try to get the rescue device that way.  And keep track b/c if we are in that scenario, we need to remember to call _destroy_instance on the old -rescue vm_ref.  This seems like the more robust option than knowingly introduce a failure.","commit_id":"de5fc6240558cd36518e9ddd13c29b3b60bcee7c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7986571c425f1d6e0b6e19e9558aa215d36d770e","unresolved":false,"context_lines":[{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"        vm_ref \u003d vm_util.get_vm_ref(self._session, instance)"},{"line_number":1072,"context_line":"        # Get the rescue device and detach it from the instance."},{"line_number":1073,"context_line":"        rescue_device \u003d self._get_rescue_device(instance, vm_ref)"},{"line_number":1074,"context_line":"        vm_util.power_off_instance(self._session, instance, vm_ref)"},{"line_number":1075,"context_line":"        self._volumeops.detach_disk_from_vm(vm_ref, instance, rescue_device,"},{"line_number":1076,"context_line":"                                            destroy_disk\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_9d75339a","line":1073,"in_reply_to":"9a80dd14_6be0be96","updated":"2015-03-12 19:09:32.000000000","message":"I haven\u0027t tried since I don\u0027t have a vCenter.  I was under the assumption that rescue \u0027worked\u0027 in that the operation didn\u0027t fail before this change.  Whether or not the rescue VM is usable is another matter, which it sounds like you\u0027re addressing here and I\u0027ll admit was my mistake/confusion.  If rescue/unrescue was an operation that no vmware users were using or cared about (because it was useless/broken), then the upgrade impact is mitigated since presumably there are no users to impact.  That was not clear to me.","commit_id":"de5fc6240558cd36518e9ddd13c29b3b60bcee7c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1e3d48f548409886b974ef5f2e88f0098cef0ba9","unresolved":false,"context_lines":[{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"        vm_ref \u003d vm_util.get_vm_ref(self._session, instance)"},{"line_number":1072,"context_line":"        # Get the rescue device and detach it from the instance."},{"line_number":1073,"context_line":"        rescue_device \u003d self._get_rescue_device(instance, vm_ref)"},{"line_number":1074,"context_line":"        vm_util.power_off_instance(self._session, instance, vm_ref)"},{"line_number":1075,"context_line":"        self._volumeops.detach_disk_from_vm(vm_ref, instance, rescue_device,"},{"line_number":1076,"context_line":"                                            destroy_disk\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_6be0be96","line":1073,"in_reply_to":"9a80dd14_75509dd4","updated":"2015-03-12 18:31:19.000000000","message":"I am in favor of the 1st option. The reasons are as follows:\n1. the actual rescue does not work. I am not sure if you have tried, because if you did then you certainly would understand the issues at hand. The fact that a user is unable to actually do anything to the instance is kind of critical in my opinion. They cannot access via VNC, cann suspend, resume, ...\n2.having backward compatible logic is even more problematic. \n3. how many people actually do this? If they were then you would have heard complaints about this (this bug has been in review for nearly 8 months!!!)\n\nThe code is far more robust and efficient.","commit_id":"de5fc6240558cd36518e9ddd13c29b3b60bcee7c"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"8c2aa87062b444226b1454f7631b1b30bf0a05f1","unresolved":false,"context_lines":[{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"        vm_ref \u003d vm_util.get_vm_ref(self._session, instance)"},{"line_number":1072,"context_line":"        # Get the rescue device and detach it from the instance."},{"line_number":1073,"context_line":"        rescue_device \u003d self._get_rescue_device(instance, vm_ref)"},{"line_number":1074,"context_line":"        vm_util.power_off_instance(self._session, instance, vm_ref)"},{"line_number":1075,"context_line":"        self._volumeops.detach_disk_from_vm(vm_ref, instance, rescue_device,"},{"line_number":1076,"context_line":"                                            destroy_disk\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_0160e7a3","line":1073,"in_reply_to":"9a80dd14_9d75339a","updated":"2015-03-13 08:25:11.000000000","message":"I can confirm that rescue/unrescue are not common operations in VMware deployments and they had issues which Gary stated above. That being said, I really prefer to go with option 1) which Matt proposed instead complicating the driver to support the old mechanism. The impact will be minimal (if any) and it will be documented as a known issue.","commit_id":"de5fc6240558cd36518e9ddd13c29b3b60bcee7c"}]}
