def test_02_delete_vm_snapshot_between_reverts(self): '''Delete VM snapshot after revert of one vm snapshot ''' self.virtual_machine.stop(self.apiclient, forced=True) try: cfg.logger.info("revert vm snapshot created with UUID") VmSnapshot.revertToSnapshot(self.apiclient, self.vm_snapshot1.id) except Exception as e: cfg.logger.info(e) self.virtual_machine.start(self.apiclient) time.sleep(20) try: ssh_client = self.virtual_machine.get_ssh_client(reconnect=True) cmds = ["cat %s/%s" % (self.test_dir, self.random_data)] for c in cmds: result = ssh_client.execute(c) except Exception: self.fail("SSH failed for Virtual machine: %s" % self.virtual_machine.ipaddress) self.assertEqual( self.random_data_vm_snapshot1, result[0], "Check the random data is equal with the ramdom file!") cfg.logger.info("Data before taking a snapshot %s \n\ Data after revert of snapshot %s" % (self.random_data_vm_snapshot1, result[0])) vm_snapshot_glid = VmSnapshot.create(self.apiclient, self.virtual_machine.id, False, "TestSnapshot", "Display Text") deleted_vm = VmSnapshot.deleteVMSnapshot( self.apiclient, vmsnapshotid=vm_snapshot_glid.id) self.assertTrue(deleted_vm, "The virtual machine snapshot was not deleted") deleted_vm2 = VmSnapshot.deleteVMSnapshot( self.apiclient, vmsnapshotid=self.vm_snapshot_for_delete.id) self.assertTrue(deleted_vm2, "VM snapshot was not deleted")
def test_02_take_VM_snapshot_with_data_disk(self): self.virtual_machine.start(self.apiClient) data_volume = Volume.create(self.apiClient, self.testdata[TestData.volume_1], account=self.account.name, domainid=self.domain.id, zoneid=self.zone.id, diskofferingid=self.disk_offering.id) self.cleanup = [data_volume] self.virtual_machine.attach_volume(self.apiClient, data_volume) root_volumes = list_volumes(self.apiClient, type="ROOT", listAll="true") sf_util.check_list( root_volumes, 1, self, TestVMSnapshots._should_only_be_one_root_volume_err_msg) root_volume = root_volumes[0] root_volume_id = {'volumeid': root_volume.id} sf_iscsi_name_result = self.cs_api.getVolumeiScsiName(root_volume_id) sf_iscsi_root_volume_name = sf_iscsi_name_result['apivolumeiscsiname'][ 'volumeiScsiName'] sf_util.check_iscsi_name(sf_iscsi_root_volume_name, self) root_volume_path_1 = self._get_path(root_volume_id) data_volumes = list_volumes(self.apiClient, type="DATADISK", listAll="true") sf_util.check_list(data_volumes, 1, self, "There should only be one data volume.") data_volume = data_volumes[0] data_volume_id = {'volumeid': data_volume.id} sf_iscsi_name_result = self.cs_api.getVolumeiScsiName(data_volume_id) sf_iscsi_data_volume_name = sf_iscsi_name_result['apivolumeiscsiname'][ 'volumeiScsiName'] sf_util.check_iscsi_name(sf_iscsi_data_volume_name, self) data_volume_path_1 = self._get_path(data_volume_id) ####################################### ####################################### # STEP 1: Take snapshot of running VM # ####################################### ####################################### vm_snapshot = VmSnapshot.create(self.apiClient, vmid=self.virtual_machine.id, snapshotmemory="false", name="Test Snapshot", description="Test Snapshot Desc") list_vm_snapshots = VmSnapshot.list(self.apiClient, listAll="true") self._verify_vm_snapshot(list_vm_snapshots, vm_snapshot) root_volume_path_2 = self._get_path(root_volume_id) self.assertEqual(root_volume_path_1, root_volume_path_2, TestVMSnapshots._path_should_not_have_changed_err_msg) data_volume_path_2 = self._get_path(data_volume_id) self.assertEqual(data_volume_path_1, data_volume_path_2, TestVMSnapshots._path_should_not_have_changed_err_msg) root_volume_xen_sr = self.xen_session.xenapi.SR.get_by_name_label( sf_iscsi_root_volume_name)[0] root_volume_xen_vdis = self.xen_session.xenapi.SR.get_VDIs( root_volume_xen_sr) sf_util.check_list(root_volume_xen_vdis, 3, self, TestVMSnapshots._should_be_three_vdis_err_msg) root_volume_vdis_after_create = self._get_vdis(root_volume_xen_vdis) vdiSnapshotOf = self.xen_session.xenapi.VDI.get_record( root_volume_vdis_after_create.snapshot_vdi["snapshot_of"]) self.assertEqual(vdiSnapshotOf["uuid"], root_volume_vdis_after_create.active_vdi["uuid"], TestVMSnapshots._snapshot_parent_not_correct_err_msg) data_volume_xen_sr = self.xen_session.xenapi.SR.get_by_name_label( sf_iscsi_data_volume_name)[0] data_volume_xen_vdis = self.xen_session.xenapi.SR.get_VDIs( data_volume_xen_sr) sf_util.check_list(data_volume_xen_vdis, 3, self, TestVMSnapshots._should_be_three_vdis_err_msg) data_volume_vdis_after_create = self._get_vdis(data_volume_xen_vdis) vdiSnapshotOf = self.xen_session.xenapi.VDI.get_record( data_volume_vdis_after_create.snapshot_vdi["snapshot_of"]) self.assertEqual(vdiSnapshotOf["uuid"], data_volume_vdis_after_create.active_vdi["uuid"], TestVMSnapshots._snapshot_parent_not_correct_err_msg) ####################################### ####################################### ### STEP 2: Revert VM to Snapshot ### ####################################### ####################################### self.virtual_machine.stop(self.apiClient) VmSnapshot.revertToSnapshot(self.apiClient, vmsnapshotid=vm_snapshot.id) list_vm_snapshots = VmSnapshot.list(self.apiClient, listAll="true") sf_util.check_list( list_vm_snapshots, 1, self, TestVMSnapshots._should_only_be_one_vm_snapshot_err_msg) root_volume_path_3 = self._get_path(root_volume_id) self.assertNotEqual(root_volume_path_1, root_volume_path_3, TestVMSnapshots._path_should_have_changed_err_msg) root_volume_xen_vdis = self.xen_session.xenapi.SR.get_VDIs( root_volume_xen_sr) sf_util.check_list(root_volume_xen_vdis, 3, self, TestVMSnapshots._should_be_three_vdis_err_msg) root_volume_vdis_after_revert = self._get_vdis(root_volume_xen_vdis) self.assertNotEqual( root_volume_vdis_after_create.active_vdi["uuid"], root_volume_vdis_after_revert.active_vdi["uuid"], TestVMSnapshots._active_vdis_should_not_be_the_same_err_msg) self.assertEqual( root_volume_vdis_after_create.snapshot_vdi["uuid"], root_volume_vdis_after_revert.snapshot_vdi["uuid"], TestVMSnapshots._snapshot_vdis_should_be_the_same_err_msg) self.assertEqual(root_volume_vdis_after_create.base_vdi["uuid"], root_volume_vdis_after_revert.base_vdi["uuid"], TestVMSnapshots._base_vdis_should_be_the_same_err_msg) data_volume_path_3 = self._get_path(data_volume_id) self.assertNotEqual(data_volume_path_1, data_volume_path_3, TestVMSnapshots._path_should_have_changed_err_msg) data_volume_xen_vdis = self.xen_session.xenapi.SR.get_VDIs( data_volume_xen_sr) sf_util.check_list(data_volume_xen_vdis, 3, self, TestVMSnapshots._should_be_three_vdis_err_msg) data_volume_vdis_after_revert = self._get_vdis(data_volume_xen_vdis) self.assertNotEqual( data_volume_vdis_after_create.active_vdi["uuid"], data_volume_vdis_after_revert.active_vdi["uuid"], TestVMSnapshots._active_vdis_should_not_be_the_same_err_msg) self.assertEqual( data_volume_vdis_after_create.snapshot_vdi["uuid"], data_volume_vdis_after_revert.snapshot_vdi["uuid"], TestVMSnapshots._snapshot_vdis_should_be_the_same_err_msg) self.assertEqual(data_volume_vdis_after_create.base_vdi["uuid"], data_volume_vdis_after_revert.base_vdi["uuid"], TestVMSnapshots._base_vdis_should_be_the_same_err_msg) ####################################### ####################################### ##### STEP 3: Delete VM snapshot ##### ####################################### ####################################### VmSnapshot.deleteVMSnapshot(self.apiClient, vmsnapshotid=vm_snapshot.id) list_vm_snapshots = VmSnapshot.list(self.apiClient, listAll="true") self.assertEqual(list_vm_snapshots, None, TestVMSnapshots._should_be_no_vm_snapshots_err_msg) root_volume_path_4 = self._get_path(root_volume_id) self.assertEqual(root_volume_path_3, root_volume_path_4, TestVMSnapshots._path_should_not_have_changed_err_msg) root_volume_xen_vdis = self.xen_session.xenapi.SR.get_VDIs( root_volume_xen_sr) sf_util.check_list(root_volume_xen_vdis, 1, self, TestVMSnapshots._should_only_be_one_vdi_err_msg) root_volume_vdis_after_delete = self._get_vdis(root_volume_xen_vdis, True) self.assertEqual( root_volume_vdis_after_revert.active_vdi["uuid"], root_volume_vdis_after_delete.active_vdi["uuid"], TestVMSnapshots._active_vdis_should_be_the_same_err_msg) data_volume_path_4 = self._get_path(data_volume_id) self.assertEqual(data_volume_path_3, data_volume_path_4, TestVMSnapshots._path_should_not_have_changed_err_msg) data_volume_xen_vdis = self.xen_session.xenapi.SR.get_VDIs( data_volume_xen_sr) sf_util.check_list(data_volume_xen_vdis, 1, self, TestVMSnapshots._should_only_be_one_vdi_err_msg) data_volume_vdis_after_delete = self._get_vdis(data_volume_xen_vdis, True) self.assertEqual( data_volume_vdis_after_revert.active_vdi["uuid"], data_volume_vdis_after_delete.active_vdi["uuid"], TestVMSnapshots._active_vdis_should_be_the_same_err_msg) ####################################### ####################################### ##### STEP 4: Start VM ##### ####################################### ####################################### self.virtual_machine.detach_volume(self.apiClient, data_volume) self.virtual_machine.start(self.apiClient)
def test_01_take_VM_snapshot(self): self.virtual_machine.start(self.apiClient) root_volumes = list_volumes(self.apiClient, type="ROOT", listAll="true") sf_util.check_list( root_volumes, 1, self, TestVMSnapshots._should_only_be_one_root_volume_err_msg) root_volume = root_volumes[0] volume_id = {'volumeid': root_volume.id} sf_iscsi_name_result = self.cs_api.getVolumeiScsiName(volume_id) sf_iscsi_name = sf_iscsi_name_result['apivolumeiscsiname'][ 'volumeiScsiName'] sf_util.check_iscsi_name(sf_iscsi_name, self) root_volume_path_1 = self._get_path(volume_id) ####################################### ####################################### # STEP 1: Take snapshot of running VM # ####################################### ####################################### vm_snapshot = VmSnapshot.create(self.apiClient, vmid=self.virtual_machine.id, snapshotmemory="false", name="Test Snapshot", description="Test Snapshot Desc") list_vm_snapshots = VmSnapshot.list(self.apiClient, listAll="true") self._verify_vm_snapshot(list_vm_snapshots, vm_snapshot) root_volume_path_2 = self._get_path(volume_id) self.assertEqual(root_volume_path_1, root_volume_path_2, TestVMSnapshots._path_should_not_have_changed_err_msg) xen_sr = self.xen_session.xenapi.SR.get_by_name_label(sf_iscsi_name)[0] xen_vdis = self.xen_session.xenapi.SR.get_VDIs(xen_sr) sf_util.check_list(xen_vdis, 3, self, TestVMSnapshots._should_be_three_vdis_err_msg) vdis_after_create = self._get_vdis(xen_vdis) vdiSnapshotOf = self.xen_session.xenapi.VDI.get_record( vdis_after_create.snapshot_vdi["snapshot_of"]) self.assertEqual(vdiSnapshotOf["uuid"], vdis_after_create.active_vdi["uuid"], TestVMSnapshots._snapshot_parent_not_correct_err_msg) ####################################### ####################################### ### STEP 2: Revert VM to Snapshot ### ####################################### ####################################### self.virtual_machine.stop(self.apiClient) VmSnapshot.revertToSnapshot(self.apiClient, vmsnapshotid=vm_snapshot.id) list_vm_snapshots = VmSnapshot.list(self.apiClient, listAll="true") sf_util.check_list( list_vm_snapshots, 1, self, TestVMSnapshots._should_only_be_one_vm_snapshot_err_msg) root_volume_path_3 = self._get_path(volume_id) self.assertNotEqual(root_volume_path_1, root_volume_path_3, TestVMSnapshots._path_should_have_changed_err_msg) xen_vdis = self.xen_session.xenapi.SR.get_VDIs(xen_sr) sf_util.check_list(xen_vdis, 3, self, TestVMSnapshots._should_be_three_vdis_err_msg) vdis_after_revert = self._get_vdis(xen_vdis) self.assertNotEqual( vdis_after_create.active_vdi["uuid"], vdis_after_revert.active_vdi["uuid"], TestVMSnapshots._active_vdis_should_not_be_the_same_err_msg) self.assertEqual( vdis_after_create.snapshot_vdi["uuid"], vdis_after_revert.snapshot_vdi["uuid"], TestVMSnapshots._snapshot_vdis_should_be_the_same_err_msg) self.assertEqual(vdis_after_create.base_vdi["uuid"], vdis_after_revert.base_vdi["uuid"], TestVMSnapshots._base_vdis_should_be_the_same_err_msg) ####################################### ####################################### ##### STEP 3: Delete VM snapshot ##### ####################################### ####################################### VmSnapshot.deleteVMSnapshot(self.apiClient, vmsnapshotid=vm_snapshot.id) list_vm_snapshots = VmSnapshot.list(self.apiClient, listAll="true") self.assertEqual(list_vm_snapshots, None, TestVMSnapshots._should_be_no_vm_snapshots_err_msg) root_volume_path_4 = self._get_path(volume_id) self.assertEqual(root_volume_path_3, root_volume_path_4, TestVMSnapshots._path_should_not_have_changed_err_msg) xen_vdis = self.xen_session.xenapi.SR.get_VDIs(xen_sr) sf_util.check_list(xen_vdis, 1, self, TestVMSnapshots._should_only_be_one_vdi_err_msg) vdis_after_delete = self._get_vdis(xen_vdis, True) self.assertEqual( vdis_after_revert.active_vdi["uuid"], vdis_after_delete.active_vdi["uuid"], TestVMSnapshots._active_vdis_should_be_the_same_err_msg) ####################################### ####################################### ##### STEP 4: Start VM ##### ####################################### ####################################### self.virtual_machine.start(self.apiClient)
def test_02_revert_vm_snapshots(self): """Test to revert VM snapshots """ try: ssh_client = self.virtual_machine.get_ssh_client() cmds = [ "rm -rf %s/%s" % (self.test_dir, self.random_data), "ls %s/%s" % (self.test_dir, self.random_data) ] for c in cmds: self.debug(c) result = ssh_client.execute(c) self.debug(result) except Exception: self.fail("SSH failed for Virtual machine: %s" % self.virtual_machine.ipaddress) if str(result[0]).index("No such file or directory") == -1: self.fail("Check the random data has be delete from temp file!") time.sleep(30) list_snapshot_response = VmSnapshot.list( self.apiclient, virtualmachineid=self.virtual_machine.id, listall=True) self.assertEqual(isinstance(list_snapshot_response, list), True, "Check list response returns a valid list") self.assertNotEqual(list_snapshot_response, None, "Check if snapshot exists in ListSnapshot") self.assertEqual(list_snapshot_response[0].state, "Ready", "Check the snapshot of vm is ready!") self.virtual_machine.stop(self.apiclient) VmSnapshot.revertToSnapshot(self.apiclient, list_snapshot_response[0].id) self.virtual_machine.start(self.apiclient) try: ssh_client = self.virtual_machine.get_ssh_client(reconnect=True) cmds = ["cat %s/%s" % (self.test_dir, self.random_data)] for c in cmds: self.debug(c) result = ssh_client.execute(c) self.debug(result) except Exception: self.fail("SSH failed for Virtual machine: %s" % self.virtual_machine.ipaddress) self.assertEqual( self.random_data_0, result[0], "Check the random data is equal with the ramdom file!")
def test_02_take_VM_snapshot_with_data_disk(self): self.virtual_machine.start(self.apiClient) data_volume = Volume.create( self.apiClient, self.testdata[TestData.volume_1], account=self.account.name, domainid=self.domain.id, zoneid=self.zone.id, diskofferingid=self.disk_offering.id ) self.cleanup = [data_volume] self.virtual_machine.attach_volume(self.apiClient, data_volume) root_volumes = list_volumes(self.apiClient, type="ROOT", listAll="true") self._check_list(root_volumes, 1, TestVMSnapshots._should_only_be_one_root_volume_err_msg) root_volume = root_volumes[0] root_volume_id = {'volumeid': root_volume.id} sf_iscsi_name_result = self.cs_api.getVolumeiScsiName(root_volume_id) sf_iscsi_root_volume_name = sf_iscsi_name_result['apivolumeiscsiname']['volumeiScsiName'] self._check_iscsi_name(sf_iscsi_root_volume_name) root_volume_path_1 = self._get_path(root_volume_id) data_volumes = list_volumes(self.apiClient, type="DATADISK", listAll="true") self._check_list(data_volumes, 1, "There should only be one data volume.") data_volume = data_volumes[0] data_volume_id = {'volumeid': data_volume.id} sf_iscsi_name_result = self.cs_api.getVolumeiScsiName(data_volume_id) sf_iscsi_data_volume_name = sf_iscsi_name_result['apivolumeiscsiname']['volumeiScsiName'] self._check_iscsi_name(sf_iscsi_data_volume_name) data_volume_path_1 = self._get_path(data_volume_id) ####################################### ####################################### # STEP 1: Take snapshot of running VM # ####################################### ####################################### vm_snapshot = VmSnapshot.create( self.apiClient, vmid=self.virtual_machine.id, snapshotmemory="false", name="Test Snapshot", description="Test Snapshot Desc" ) list_vm_snapshots = VmSnapshot.list(self.apiClient, listAll="true") self._verify_vm_snapshot(list_vm_snapshots, vm_snapshot) root_volume_path_2 = self._get_path(root_volume_id) self.assertEqual( root_volume_path_1, root_volume_path_2, TestVMSnapshots._path_should_not_have_changed_err_msg ) data_volume_path_2 = self._get_path(data_volume_id) self.assertEqual( data_volume_path_1, data_volume_path_2, TestVMSnapshots._path_should_not_have_changed_err_msg ) root_volume_xen_sr = self.xen_session.xenapi.SR.get_by_name_label(sf_iscsi_root_volume_name)[0] root_volume_xen_vdis = self.xen_session.xenapi.SR.get_VDIs(root_volume_xen_sr) self._check_list(root_volume_xen_vdis, 3, TestVMSnapshots._should_be_three_vdis_err_msg) root_volume_vdis_after_create = self._get_vdis(root_volume_xen_vdis) vdiSnapshotOf = self.xen_session.xenapi.VDI.get_record(root_volume_vdis_after_create.snapshot_vdi["snapshot_of"]) self.assertEqual( vdiSnapshotOf["uuid"], root_volume_vdis_after_create.active_vdi["uuid"], TestVMSnapshots._snapshot_parent_not_correct_err_msg ) data_volume_xen_sr = self.xen_session.xenapi.SR.get_by_name_label(sf_iscsi_data_volume_name)[0] data_volume_xen_vdis = self.xen_session.xenapi.SR.get_VDIs(data_volume_xen_sr) self._check_list(data_volume_xen_vdis, 3, TestVMSnapshots._should_be_three_vdis_err_msg) data_volume_vdis_after_create = self._get_vdis(data_volume_xen_vdis) vdiSnapshotOf = self.xen_session.xenapi.VDI.get_record(data_volume_vdis_after_create.snapshot_vdi["snapshot_of"]) self.assertEqual( vdiSnapshotOf["uuid"], data_volume_vdis_after_create.active_vdi["uuid"], TestVMSnapshots._snapshot_parent_not_correct_err_msg ) ####################################### ####################################### ### STEP 2: Revert VM to Snapshot ### ####################################### ####################################### self.virtual_machine.stop(self.apiClient) VmSnapshot.revertToSnapshot(self.apiClient, vmsnapshotid=vm_snapshot.id) list_vm_snapshots = VmSnapshot.list(self.apiClient, listAll="true") self._check_list(list_vm_snapshots, 1, TestVMSnapshots._should_only_be_one_vm_snapshot_err_msg) root_volume_path_3 = self._get_path(root_volume_id) self.assertNotEqual( root_volume_path_1, root_volume_path_3, TestVMSnapshots._path_should_have_changed_err_msg ) root_volume_xen_vdis = self.xen_session.xenapi.SR.get_VDIs(root_volume_xen_sr) self._check_list(root_volume_xen_vdis, 3, TestVMSnapshots._should_be_three_vdis_err_msg) root_volume_vdis_after_revert = self._get_vdis(root_volume_xen_vdis) self.assertNotEqual( root_volume_vdis_after_create.active_vdi["uuid"], root_volume_vdis_after_revert.active_vdi["uuid"], TestVMSnapshots._active_vdis_should_not_be_the_same_err_msg ) self.assertEqual( root_volume_vdis_after_create.snapshot_vdi["uuid"], root_volume_vdis_after_revert.snapshot_vdi["uuid"], TestVMSnapshots._snapshot_vdis_should_be_the_same_err_msg ) self.assertEqual( root_volume_vdis_after_create.base_vdi["uuid"], root_volume_vdis_after_revert.base_vdi["uuid"], TestVMSnapshots._base_vdis_should_be_the_same_err_msg ) data_volume_path_3 = self._get_path(data_volume_id) self.assertNotEqual( data_volume_path_1, data_volume_path_3, TestVMSnapshots._path_should_have_changed_err_msg ) data_volume_xen_vdis = self.xen_session.xenapi.SR.get_VDIs(data_volume_xen_sr) self._check_list(data_volume_xen_vdis, 3, TestVMSnapshots._should_be_three_vdis_err_msg) data_volume_vdis_after_revert = self._get_vdis(data_volume_xen_vdis) self.assertNotEqual( data_volume_vdis_after_create.active_vdi["uuid"], data_volume_vdis_after_revert.active_vdi["uuid"], TestVMSnapshots._active_vdis_should_not_be_the_same_err_msg ) self.assertEqual( data_volume_vdis_after_create.snapshot_vdi["uuid"], data_volume_vdis_after_revert.snapshot_vdi["uuid"], TestVMSnapshots._snapshot_vdis_should_be_the_same_err_msg ) self.assertEqual( data_volume_vdis_after_create.base_vdi["uuid"], data_volume_vdis_after_revert.base_vdi["uuid"], TestVMSnapshots._base_vdis_should_be_the_same_err_msg ) ####################################### ####################################### ##### STEP 3: Delete VM snapshot ##### ####################################### ####################################### VmSnapshot.deleteVMSnapshot(self.apiClient, vmsnapshotid=vm_snapshot.id) list_vm_snapshots = VmSnapshot.list(self.apiClient, listAll="true") self.assertEqual( list_vm_snapshots, None, TestVMSnapshots._should_be_no_vm_snapshots_err_msg ) root_volume_path_4 = self._get_path(root_volume_id) self.assertEqual( root_volume_path_3, root_volume_path_4, TestVMSnapshots._path_should_not_have_changed_err_msg ) root_volume_xen_vdis = self.xen_session.xenapi.SR.get_VDIs(root_volume_xen_sr) self._check_list(root_volume_xen_vdis, 1, TestVMSnapshots._should_only_be_one_vdi_err_msg) root_volume_vdis_after_delete = self._get_vdis(root_volume_xen_vdis, True) self.assertEqual( root_volume_vdis_after_revert.active_vdi["uuid"], root_volume_vdis_after_delete.active_vdi["uuid"], TestVMSnapshots._active_vdis_should_be_the_same_err_msg ) data_volume_path_4 = self._get_path(data_volume_id) self.assertEqual( data_volume_path_3, data_volume_path_4, TestVMSnapshots._path_should_not_have_changed_err_msg ) data_volume_xen_vdis = self.xen_session.xenapi.SR.get_VDIs(data_volume_xen_sr) self._check_list(data_volume_xen_vdis, 1, TestVMSnapshots._should_only_be_one_vdi_err_msg) data_volume_vdis_after_delete = self._get_vdis(data_volume_xen_vdis, True) self.assertEqual( data_volume_vdis_after_revert.active_vdi["uuid"], data_volume_vdis_after_delete.active_vdi["uuid"], TestVMSnapshots._active_vdis_should_be_the_same_err_msg ) ####################################### ####################################### ##### STEP 4: Start VM ##### ####################################### ####################################### self.virtual_machine.detach_volume(self.apiClient, data_volume) self.virtual_machine.start(self.apiClient)
def test_01_take_VM_snapshot(self): self.virtual_machine.start(self.apiClient) root_volumes = list_volumes(self.apiClient, type="ROOT", listAll="true") self._check_list(root_volumes, 1, TestVMSnapshots._should_only_be_one_root_volume_err_msg) root_volume = root_volumes[0] volume_id = {'volumeid': root_volume.id} sf_iscsi_name_result = self.cs_api.getVolumeiScsiName(volume_id) sf_iscsi_name = sf_iscsi_name_result['apivolumeiscsiname']['volumeiScsiName'] self._check_iscsi_name(sf_iscsi_name) root_volume_path_1 = self._get_path(volume_id) ####################################### ####################################### # STEP 1: Take snapshot of running VM # ####################################### ####################################### vm_snapshot = VmSnapshot.create( self.apiClient, vmid=self.virtual_machine.id, snapshotmemory="false", name="Test Snapshot", description="Test Snapshot Desc" ) list_vm_snapshots = VmSnapshot.list(self.apiClient, listAll="true") self._verify_vm_snapshot(list_vm_snapshots, vm_snapshot) root_volume_path_2 = self._get_path(volume_id) self.assertEqual( root_volume_path_1, root_volume_path_2, TestVMSnapshots._path_should_not_have_changed_err_msg ) xen_sr = self.xen_session.xenapi.SR.get_by_name_label(sf_iscsi_name)[0] xen_vdis = self.xen_session.xenapi.SR.get_VDIs(xen_sr) self._check_list(xen_vdis, 3, TestVMSnapshots._should_be_three_vdis_err_msg) vdis_after_create = self._get_vdis(xen_vdis) vdiSnapshotOf = self.xen_session.xenapi.VDI.get_record(vdis_after_create.snapshot_vdi["snapshot_of"]) self.assertEqual( vdiSnapshotOf["uuid"], vdis_after_create.active_vdi["uuid"], TestVMSnapshots._snapshot_parent_not_correct_err_msg ) ####################################### ####################################### ### STEP 2: Revert VM to Snapshot ### ####################################### ####################################### self.virtual_machine.stop(self.apiClient) VmSnapshot.revertToSnapshot(self.apiClient, vmsnapshotid=vm_snapshot.id) list_vm_snapshots = VmSnapshot.list(self.apiClient, listAll="true") self._check_list(list_vm_snapshots, 1, TestVMSnapshots._should_only_be_one_vm_snapshot_err_msg) root_volume_path_3 = self._get_path(volume_id) self.assertNotEqual( root_volume_path_1, root_volume_path_3, TestVMSnapshots._path_should_have_changed_err_msg ) xen_vdis = self.xen_session.xenapi.SR.get_VDIs(xen_sr) self._check_list(xen_vdis, 3, TestVMSnapshots._should_be_three_vdis_err_msg) vdis_after_revert = self._get_vdis(xen_vdis) self.assertNotEqual( vdis_after_create.active_vdi["uuid"], vdis_after_revert.active_vdi["uuid"], TestVMSnapshots._active_vdis_should_not_be_the_same_err_msg ) self.assertEqual( vdis_after_create.snapshot_vdi["uuid"], vdis_after_revert.snapshot_vdi["uuid"], TestVMSnapshots._snapshot_vdis_should_be_the_same_err_msg ) self.assertEqual( vdis_after_create.base_vdi["uuid"], vdis_after_revert.base_vdi["uuid"], TestVMSnapshots._base_vdis_should_be_the_same_err_msg ) ####################################### ####################################### ##### STEP 3: Delete VM snapshot ##### ####################################### ####################################### VmSnapshot.deleteVMSnapshot(self.apiClient, vmsnapshotid=vm_snapshot.id) list_vm_snapshots = VmSnapshot.list(self.apiClient, listAll="true") self.assertEqual( list_vm_snapshots, None, TestVMSnapshots._should_be_no_vm_snapshots_err_msg ) root_volume_path_4 = self._get_path(volume_id) self.assertEqual( root_volume_path_3, root_volume_path_4, TestVMSnapshots._path_should_not_have_changed_err_msg ) xen_vdis = self.xen_session.xenapi.SR.get_VDIs(xen_sr) self._check_list(xen_vdis, 1, TestVMSnapshots._should_only_be_one_vdi_err_msg) vdis_after_delete = self._get_vdis(xen_vdis, True) self.assertEqual( vdis_after_revert.active_vdi["uuid"], vdis_after_delete.active_vdi["uuid"], TestVMSnapshots._active_vdis_should_be_the_same_err_msg ) ####################################### ####################################### ##### STEP 4: Start VM ##### ####################################### ####################################### self.virtual_machine.start(self.apiClient)
def test_02_revert_vm_snapshots(self): """Test to revert VM snapshots """ try: ssh_client = self.virtual_machine.get_ssh_client() cmds = [ "rm -rf %s/%s" % (self.test_dir, self.random_data), "ls %s/%s" % (self.test_dir, self.random_data) ] for c in cmds: self.debug(c) result = ssh_client.execute(c) self.debug(result) except Exception: self.fail("SSH failed for Virtual machine: %s" % self.virtual_machine.ipaddress) if str(result[0]).index("No such file or directory") == -1: self.fail("Check the random data has be delete from temp file!") time.sleep(self.services["sleep"]) list_snapshot_response = VmSnapshot.list(self.apiclient, vmid=self.virtual_machine.id, listall=True) self.assertEqual( isinstance(list_snapshot_response, list), True, "Check list response returns a valid list" ) self.assertNotEqual( list_snapshot_response, None, "Check if snapshot exists in ListSnapshot" ) self.assertEqual( list_snapshot_response[0].state, "Ready", "Check the snapshot of vm is ready!" ) VmSnapshot.revertToSnapshot(self.apiclient, list_snapshot_response[0].id) list_vm_response = list_virtual_machines( self.apiclient, id=self.virtual_machine.id ) self.assertEqual( list_vm_response[0].state, "Stopped", "Check the state of vm is Stopped!" ) cmd = startVirtualMachine.startVirtualMachineCmd() cmd.id = list_vm_response[0].id self.apiclient.startVirtualMachine(cmd) time.sleep(self.services["sleep"]) try: ssh_client = self.virtual_machine.get_ssh_client(reconnect=True) cmds = [ "cat %s/%s" % (self.test_dir, self.random_data) ] for c in cmds: self.debug(c) result = ssh_client.execute(c) self.debug(result) except Exception: self.fail("SSH failed for Virtual machine: %s" % self.virtual_machine.ipaddress) self.assertEqual( self.random_data_0, result[0], "Check the random data is equal with the ramdom file!" )
def test_change_service_offering_for_vm_with_snapshots(self): """Test to change service offering for instances with vm snapshots """ # 1) Create Virtual Machine using service offering 1 self.debug("Creating VM using Service Offering 1") virtual_machine = VirtualMachine.create( self.apiclient, self.services["small"], accountid=self.account.name, domainid=self.account.domainid, templateid=self.template.id, zoneid=self.zone.id, hypervisor=self.hypervisor, mode=self.zone.networktype, serviceofferingid=self.service_offering_1.id) # Verify Service OFfering 1 CPU cores and memory try: ssh_client = virtual_machine.get_ssh_client(reconnect=True) self.checkCPUAndMemory(ssh_client, self.service_offering_1) except Exception as e: self.fail("SSH failed for virtual machine: %s - %s" % (virtual_machine.ipaddress, e)) # 2) Take VM Snapshot self.debug("Taking VM Snapshot for VM - ID: %s" % virtual_machine.id) vm_snapshot = VmSnapshot.create( self.apiclient, virtual_machine.id, ) # 3) Stop Virtual Machine self.debug("Stopping VM - ID: %s" % virtual_machine.id) try: virtual_machine.stop(self.apiclient) timeout = self.services["timeout"] while True: time.sleep(self.services["sleep"]) # Ensure that VM is in stopped state list_vm_response = list_virtual_machines(self.apiclient, id=virtual_machine.id) if isinstance(list_vm_response, list): vm = list_vm_response[0] if vm.state == 'Stopped': self.debug("VM state: %s" % vm.state) break if timeout == 0: raise Exception( "Failed to stop VM (ID: %s) in change service offering" % vm.id) timeout = timeout - 1 except Exception as e: self.fail("Failed to stop VM: %s" % e) # 4) Change service offering for VM with snapshots from Service Offering 1 to Service Offering 2 self.debug( "Changing service offering from Service Offering 1 to Service Offering 2 for VM - ID: %s" % virtual_machine.id) virtual_machine.change_service_offering(self.apiclient, self.service_offering_2.id) # 5) Start VM self.debug("Starting VM - ID: %s" % virtual_machine.id) try: virtual_machine.start(self.apiclient) except Exception as e: self.fail("Failed to start virtual machine: %s, %s" % (virtual_machine.name, e)) # Wait for vm to start timeout = self.wait_vm_start(self.apiclient, virtual_machine.id, self.services["timeout"], self.services["sleep"]) if timeout == 0: self.fail( "The virtual machine %s failed to start even after %s minutes" % (virtual_machine.name, self.services["timeout"])) list_vm_response = list_virtual_machines(self.apiclient, id=virtual_machine.id) self.assertEqual(isinstance(list_vm_response, list), True, "Check list response returns a valid list") self.assertNotEqual(len(list_vm_response), 0, "Check VM avaliable in List Virtual Machines") self.assertEqual(list_vm_response[0].state, "Running", "Check virtual machine is in running state") self.assertEqual(list_vm_response[0].id, virtual_machine.id, "Check virtual machine id") # 6) Verify service offering has changed try: ssh_client_2 = virtual_machine.get_ssh_client(reconnect=True) self.checkCPUAndMemory(ssh_client_2, self.service_offering_2) except Exception as e: self.fail("SSH failed for virtual machine: %s - %s" % (virtual_machine.ipaddress, e)) # 7) Stop Virtual Machine self.debug("Stopping VM - ID: %s" % virtual_machine.id) try: virtual_machine.stop(self.apiclient) except Exception as e: self.fail("Failed to stop VM: %s" % e) time.sleep(30) # 8) Revert to VM Snapshot self.debug("Revert to vm snapshot: %s" % vm_snapshot.id) try: VmSnapshot.revertToSnapshot(self.apiclient, vm_snapshot.id) except Exception as e: self.fail("Failed to revert to VM Snapshot: %s - %s" % (vm_snapshot.id, e)) # 9) Start VM self.debug("Starting VM - ID: %s" % virtual_machine.id) try: virtual_machine.start(self.apiclient) except Exception as e: self.fail("Failed to start virtual machine: %s, %s" % (virtual_machine.name, e)) # 10) Verify service offering has changed to Service Offering 1 (from VM Snapshot) try: ssh_client_3 = virtual_machine.get_ssh_client(reconnect=True) self.checkCPUAndMemory(ssh_client_3, self.service_offering_1) except Exception as e: self.fail("SSH failed for virtual machine: %s - %s" % (virtual_machine.ipaddress, e)) return
def test_change_service_offering_for_vm_with_snapshots(self): """Test to change service offering for instances with vm snapshots """ # 1) Create Virtual Machine using service offering 1 self.debug("Creating VM using Service Offering 1") virtual_machine = VirtualMachine.create( self.apiclient, self.services["small"], accountid=self.account.name, domainid=self.account.domainid, templateid=self.template.id, zoneid=self.zone.id, hypervisor=self.hypervisor, mode=self.zone.networktype, serviceofferingid=self.service_offering_1.id ) # Verify Service OFfering 1 CPU cores and memory try: ssh_client = virtual_machine.get_ssh_client(reconnect=True) self.checkCPUAndMemory(ssh_client, self.service_offering_1) except Exception as e: self.fail("SSH failed for virtual machine: %s - %s" % (virtual_machine.ipaddress, e)) # 2) Take VM Snapshot self.debug("Taking VM Snapshot for VM - ID: %s" % virtual_machine.id) vm_snapshot = VmSnapshot.create( self.apiclient, virtual_machine.id, ) # 3) Stop Virtual Machine self.debug("Stopping VM - ID: %s" % virtual_machine.id) try: virtual_machine.stop(self.apiclient) except Exception as e: self.fail("Failed to stop VM: %s" % e) # 4) Change service offering for VM with snapshots from Service Offering 1 to Service Offering 2 self.debug("Changing service offering from Service Offering 1 to Service Offering 2 for VM - ID: %s" % virtual_machine.id) virtual_machine.change_service_offering(self.apiclient, self.service_offering_2.id) # 5) Start VM self.debug("Starting VM - ID: %s" % virtual_machine.id) try: virtual_machine.start(self.apiclient) except Exception as e: self.fail("Failed to start virtual machine: %s, %s" % (virtual_machine.name, e)) # Wait for vm to start timeout = self.wait_vm_start(self.apiclient, virtual_machine.id, self.services["timeout"], self.services["sleep"]) if timeout == 0: self.fail("The virtual machine %s failed to start even after %s minutes" % (virtual_machine.name, self.services["timeout"])) list_vm_response = list_virtual_machines( self.apiclient, id=virtual_machine.id ) self.assertEqual( isinstance(list_vm_response, list), True, "Check list response returns a valid list" ) self.assertNotEqual( len(list_vm_response), 0, "Check VM avaliable in List Virtual Machines" ) self.assertEqual( list_vm_response[0].state, "Running", "Check virtual machine is in running state" ) self.assertEqual( list_vm_response[0].id, virtual_machine.id, "Check virtual machine id" ) # 6) Verify service offering has changed try: ssh_client_2 = virtual_machine.get_ssh_client(reconnect=True) self.checkCPUAndMemory(ssh_client_2, self.service_offering_2) except Exception as e: self.fail("SSH failed for virtual machine: %s - %s" % (virtual_machine.ipaddress, e)) # 7) Stop Virtual Machine self.debug("Stopping VM - ID: %s" % virtual_machine.id) try: virtual_machine.stop(self.apiclient) except Exception as e: self.fail("Failed to stop VM: %s" % e) time.sleep(30) # 8) Revert to VM Snapshot self.debug("Revert to vm snapshot: %s" % vm_snapshot.id) try: VmSnapshot.revertToSnapshot( self.apiclient, vm_snapshot.id ) except Exception as e: self.fail("Failed to revert to VM Snapshot: %s - %s" % (vm_snapshot.id, e)) # 9) Start VM self.debug("Starting VM - ID: %s" % virtual_machine.id) try: virtual_machine.start(self.apiclient) except Exception as e: self.fail("Failed to start virtual machine: %s, %s" % (virtual_machine.name, e)) # 10) Verify service offering has changed to Service Offering 1 (from VM Snapshot) try: ssh_client_3 = virtual_machine.get_ssh_client(reconnect=True) self.checkCPUAndMemory(ssh_client_3, self.service_offering_1) except Exception as e: self.fail("SSH failed for virtual machine: %s - %s" % (virtual_machine.ipaddress, e)) return
def test_08_create_vm_snpashot(self): '''Test Create virtual machine snapshot with attached disk created with globalid''' volume = Volume.create( self.apiclient, {"diskname": "StorPoolDisk-GlId"}, zoneid=self.zone.id, diskofferingid=self.disk_offering.id, ) self._cleanup.append(volume) self.virtual_machine3.attach_volume(self.apiclient, volume) #attached disk created with globalid list = list_volumes(self.apiclient, virtualmachineid=self.virtual_machine3.id, id=volume.id) volume = list[0] name = volume.path.split("/")[3] try: spvolume = self.spapi.volumeList(volumeName="~" + name) except spapi.ApiError as err: cfg.logger.info(err) raise Exception(err) random_data_vm_snapshot = random_gen(size=100) self.helper.write_on_disks(random_data_vm_snapshot, self.virtual_machine3, self.test_dir, self.random_data) MemorySnapshot = False vm_snapshot = self.helper.create_vm_snapshot(MemorySnapshot, self.virtual_machine3) self.helper.delete_random_data_after_vmsnpashot( vm_snapshot, self.virtual_machine3, self.test_dir, self.random_data) self.virtual_machine3.stop(self.apiclient, forced=True) try: cfg.logger.info("revert vm snapshot created with globalId") VmSnapshot.revertToSnapshot(self.apiclient, vm_snapshot.id) except Exception as e: cfg.logger.info(e) self.virtual_machine3.start(self.apiclient) time.sleep(20) try: ssh_client = self.virtual_machine3.get_ssh_client(reconnect=True) cmds = ["cat %s/%s" % (self.test_dir, self.random_data)] for c in cmds: result = ssh_client.execute(c) except Exception: self.fail("SSH failed for Virtual machine: %s" % self.virtual_machine3.ipaddress) self.assertEqual( random_data_vm_snapshot, result[0], "Check the random data is equal with the ramdom file!") cfg.logger.info("Data before taking a snapshot %s \n\ Data after revert of snapshot %s" % (random_data_vm_snapshot, result[0]))
def test_03_revert_vm_snapshot(self): ''' Revert few vm snapshots''' # revert vm snapshot created with globalid self.virtual_machine.stop(self.apiclient, forced=True) global vm_snapshot_glId global random_data_vm_snapshot_glid try: cfg.logger.info("revert vm snapshot created with globalid") VmSnapshot.revertToSnapshot(self.apiclient, vm_snapshot_glId.id) except Exception as e: cfg.logger.info(e) self.virtual_machine.start(self.apiclient) time.sleep(20) try: ssh_client = self.virtual_machine.get_ssh_client(reconnect=True) cmds = ["cat %s/%s" % (self.test_dir, self.random_data)] for c in cmds: result = ssh_client.execute(c) except Exception: self.fail("SSH failed for Virtual machine: %s" % self.virtual_machine.ipaddress) self.assertEqual( random_data_vm_snapshot_glid, result[0], "Check the random data is equal with the ramdom file!") cfg.logger.info("Data before taking a snapshot %s \n\ Data after revert of snapshot %s" % (random_data_vm_snapshot_glid, result[0])) # revert second snapshot self.virtual_machine.stop(self.apiclient, forced=True) try: cfg.logger.info("revert vm snapshot created with UUID") VmSnapshot.revertToSnapshot(self.apiclient, self.vm_snapshot2.id) except Exception as e: cfg.logger.info(e) self.virtual_machine.start(self.apiclient) time.sleep(20) try: ssh_client = self.virtual_machine.get_ssh_client(reconnect=True) cmds = ["cat %s/%s" % (self.test_dir, self.random_data)] for c in cmds: result = ssh_client.execute(c) except Exception: self.fail("SSH failed for Virtual machine: %s" % self.virtual_machine.ipaddress) self.assertEqual( self.random_data_vm_snapshot2, result[0], "Check the random data is equal with the ramdom file!") cfg.logger.info("Data before taking a snapshot %s \n\ Data after revert of snapshot %s" % (self.random_data_vm_snapshot2, result[0]))