def test_detach_cdrom(self): """ Tests detach iso from VM. Verify Detaching a real iso from a VM. """ if not self._remote_iso_file: raise SkipTest("ISO file on server not provided") si = self.get_service_instance() file_manager = si.RetrieveContent().fileManager iso_path = self._generate_new_iso_ds_path() self._make_new_iso_copy(file_manager, iso_path) iso_path_2 = self._generate_new_iso_ds_path() self._make_new_iso_copy(file_manager, iso_path_2) vm_wrapper = VmWrapper(self.host_client) reservation = vm_wrapper.place_and_reserve().reservation request = vm_wrapper.create_request(res_id=reservation) vm_id = vm_wrapper.create(request=request).vm.id vm_wrapper.attach_iso(vm_id, iso_path, Host.AttachISOResultCode.OK) vm_wrapper.detach_iso(vm_id, True, Host.DetachISOResultCode.OK) vm_wrapper.attach_iso(vm_id, iso_path_2, Host.AttachISOResultCode.OK) # verify detach works when powered on vm_wrapper.power(Host.PowerVmOp.ON) vm_wrapper.detach_iso(vm_id, True, Host.DetachISOResultCode.OK) vm_wrapper.power(Host.PowerVmOp.OFF) vm_wrapper.delete(request=vm_wrapper.delete_request())
def test_attach_cdrom(self): """ Tests attach iso code path. 1. Attach an iso to a non existent VM. Check correct error 2. Attach a non existent iso file to a valid VM. Check correct error 3. Attach a real iso if specified to a VM. Verify it succeeds. Test should pass the iso path as [datastore_name]/path/to/iso.iso """ if not self._remote_iso_file: raise SkipTest("ISO file on server not provided") si = self.get_service_instance() file_manager = si.RetrieveContent().fileManager iso_path = self._generate_new_iso_ds_path() iso_path_2 = self._generate_new_iso_ds_path() vm_wrapper = VmWrapper(self.host_client) image = DiskImage("ttylinux", CloneType.COPY_ON_WRITE) disks = [ Disk(new_id(), "default", False, True, image=image, capacity_gb=1, flavor_info=self.DEFAULT_DISK_FLAVOR), ] # Create disk and VM. reservation = vm_wrapper.place_and_reserve(vm_disks=disks).reservation request = vm_wrapper.create_request(res_id=reservation) vm_id = vm_wrapper.create(request=request).vm.id # Verify the result when the VM is not found. fake_id = str(uuid.uuid4()) vm_wrapper.attach_iso(fake_id, "/tmp/foo.iso", Host.AttachISOResultCode.VM_NOT_FOUND) # Verify the result when the the iso doesn't exist. vm_wrapper.attach_iso(vm_id, "/tmp/foo.iso", Host.AttachISOResultCode.SYSTEM_ERROR) self._make_new_iso_copy(file_manager, iso_path) self._make_new_iso_copy(file_manager, iso_path_2) # Doing enough attaches will indirectly verify that we do not grow the # device list on reattach. for i in xrange(3): # verify attach works vm_wrapper.attach_iso(vm_id, iso_path) # verify re-attach to another iso works vm_wrapper.attach_iso(vm_id, iso_path_2) vm_wrapper.power(Host.PowerVmOp.ON) # Verify reattach fails when vm is powered on. vm_wrapper.attach_iso(vm_id, iso_path, Host.AttachISOResultCode.ISO_ATTACHED_ERROR) vm_wrapper.power(Host.PowerVmOp.OFF) vm_wrapper.detach_iso(vm_id, True) vm_wrapper.attach_iso(vm_id, iso_path) vm_wrapper.detach_iso(vm_id, True) self.clear()
def test_detach_cdrom_failure(self): """ Tests failures of detach iso from VM. """ vm_wrapper = VmWrapper(self.host_client) reservation = vm_wrapper.place_and_reserve().reservation request = vm_wrapper.create_request(res_id=reservation) vm_id = vm_wrapper.create(request=request).vm.id # no prior attach of iso vm_wrapper.detach_iso(vm_id, True, Host.DetachISOResultCode.ISO_NOT_ATTACHED) # nonexistent VM id fake_id = str(uuid.uuid4()) vm_wrapper.detach_iso(fake_id, True, Host.DetachISOResultCode.VM_NOT_FOUND) # Attaching nonexistent iso path still should succeed as long # as a valid datastore path format is used random = str(uuid.uuid4()) vm_wrapper.attach_iso(vm_id, "[] /tmp/%s_nonexistent_.iso" % random, Host.AttachISOResultCode.OK) # Not supporting detach without delete yet. vm_wrapper.detach_iso(vm_id, False, Host.DetachISOResultCode.SYSTEM_ERROR) # But detach a non-exist iso should work. vm_wrapper.detach_iso(vm_id, True, Host.DetachISOResultCode.OK) vm_wrapper.delete(request=vm_wrapper.delete_request())