def add_disks(api): engine = api.system_service() vm_service = test_utils.get_vm_service(engine, VM0_NAME) glance_disk = test_utils.get_disk_service(engine, GLANCE_DISK_NAME) nt.assert_true(vm_service and glance_disk) vm0_disk_attachments_service = test_utils.get_disk_attachments_service(engine, VM0_NAME) vm0_disk_attachments_service.add( types.DiskAttachment( disk=types.Disk( id=glance_disk.get().id, storage_domains=[ types.StorageDomain( name=SD_ISCSI_NAME, ), ], ), interface=types.DiskInterface.VIRTIO, active=True, bootable=True, ), ) disk_params = types.Disk( provisioned_size=1 * GB, format=types.DiskFormat.COW, status=None, sparse=True, active=True, bootable=True, ) for vm_name, disk_name, sd_name in ( (VM1_NAME, DISK1_NAME, SD_NFS_NAME), (VM2_NAME, DISK2_NAME, SD_SECOND_NFS_NAME), (BACKUP_VM_NAME, BACKUP_DISK_NAME, SD_NFS_NAME)): disk_params.name = disk_name disk_params.storage_domains = [ types.StorageDomain( name=sd_name, ) ] disk_attachments_service = test_utils.get_disk_attachments_service(engine, vm_name) nt.assert_true( disk_attachments_service.add(types.DiskAttachment( disk=disk_params, interface=types.DiskInterface.VIRTIO)) ) for disk_name in (GLANCE_DISK_NAME, DISK1_NAME, DISK2_NAME, BACKUP_DISK_NAME): disk_service = test_utils.get_disk_service(engine, disk_name) testlib.assert_true_within_short( lambda: disk_service.get().status == types.DiskStatus.OK )
def add_disks(api): engine = api.system_service() vm_service = test_utils.get_vm_service(engine, VM0_NAME) glance_disk = test_utils.get_disk_service(engine, GLANCE_DISK_NAME) nt.assert_true(vm_service and glance_disk) vm0_disk_attachments_service = (test_utils.get_disk_attachments_service( engine, VM0_NAME)) vm0_disk_attachments_service.add( types.DiskAttachment( disk=types.Disk( id=glance_disk.get().id, storage_domains=[ types.StorageDomain(name=SD_ISCSI_NAME, ), ], ), interface=types.DiskInterface.VIRTIO, active=True, bootable=True, ), ) disk_params = types.Disk( provisioned_size=1 * GB, format=types.DiskFormat.COW, status=None, sparse=True, active=True, bootable=True, ) for vm_name, disk_name, sd_name in ((VM1_NAME, DISK1_NAME, SD_NFS_NAME), (VM2_NAME, DISK2_NAME, SD_SECOND_NFS_NAME), (BACKUP_VM_NAME, BACKUP_DISK_NAME, SD_NFS_NAME)): disk_params.name = disk_name disk_params.storage_domains = [types.StorageDomain(name=sd_name, )] disk_attachments_service = (test_utils.get_disk_attachments_service( engine, vm_name)) nt.assert_true( disk_attachments_service.add( types.DiskAttachment(disk=disk_params, interface=types.DiskInterface.VIRTIO))) for disk_name in ( GLANCE_DISK_NAME, DISK1_NAME, DISK2_NAME, BACKUP_DISK_NAME, ): disk_service = test_utils.get_disk_service(engine, disk_name) testlib.assert_true_within_short( lambda: disk_service.get().status == types.DiskStatus.OK)
def test_add_disks(engine_api, cirros_image_glance_disk_name): engine = engine_api.system_service() vm_service = test_utils.get_vm_service(engine, VM0_NAME) glance_disk = test_utils.get_disk_service( engine, cirros_image_glance_disk_name, ) assert vm_service and glance_disk vm0_disk_attachments_service = test_utils.get_disk_attachments_service( engine, VM0_NAME) vm0_disk_attachments_service.add( types.DiskAttachment( disk=types.Disk( id=glance_disk.get().id, storage_domains=[ types.StorageDomain(name=SD_ISCSI_NAME, ), ], ), interface=types.DiskInterface.VIRTIO, active=True, bootable=True, ), ) disk_params = types.Disk( provisioned_size=1 * GB, format=types.DiskFormat.COW, status=None, sparse=True, active=True, bootable=True, backup=types.DiskBackup.INCREMENTAL, ) for vm_name, disk_name, sd_name in ((VM1_NAME, DISK1_NAME, SD_NFS_NAME), (VM2_NAME, DISK2_NAME, SD_SECOND_NFS_NAME), (BACKUP_VM_NAME, BACKUP_DISK_NAME, SD_NFS_NAME)): disk_params.name = disk_name disk_params.storage_domains = [types.StorageDomain(name=sd_name, )] disk_attachments_service = test_utils.get_disk_attachments_service( engine, vm_name) assert disk_attachments_service.add( types.DiskAttachment(disk=disk_params, interface=types.DiskInterface.VIRTIO)) for disk_name in (cirros_image_glance_disk_name, DISK1_NAME, DISK2_NAME, BACKUP_DISK_NAME): disk_service = test_utils.get_disk_service(engine, disk_name) assertions.assert_true_within_short( lambda: disk_service.get().status == types.DiskStatus.OK)
def test_add_snapshot_for_backup(api_v4): engine = api_v4.system_service() vm2_disk_attachments_service = test_utils.get_disk_attachments_service( engine, VM2_NAME) disk = vm2_disk_attachments_service.list()[0] backup_snapshot_params = types.Snapshot( description=SNAPSHOT_FOR_BACKUP_VM, persist_memorystate=False, disk_attachments=[types.DiskAttachment(disk=types.Disk(id=disk.id))]) vm2_snapshots_service = test_utils.get_vm_snapshots_service( engine, VM2_NAME) correlation_id = uuid.uuid4() with test_utils.TestEvent(engine, [45, 68]): # USER_CREATE_SNAPSHOT(41) event # USER_CREATE_SNAPSHOT_FINISHED_SUCCESS(68) event vm2_snapshots_service.add(backup_snapshot_params, query={'correlation_id': correlation_id}) testlib.assert_true_within_long( lambda: test_utils.all_jobs_finished(engine, correlation_id)) testlib.assert_true_within_long( lambda: vm2_snapshots_service.list()[-1].snapshot_status == types. SnapshotStatus.OK, )
def add_directlun(prefix): luns = test_utils.get_luns(prefix, SD_ISCSI_HOST_NAME, SD_ISCSI_PORT, SD_ISCSI_TARGET, from_lun=SD_ISCSI_NR_LUNS + 1) dlun_params = sdk4.types.Disk( name=DLUN_DISK_NAME, format=sdk4.types.DiskFormat.RAW, lun_storage=sdk4.types.HostStorage( type=sdk4.types.StorageType.ISCSI, logical_units=luns, ), ) api = prefix.virt_env.engine_vm().get_api_v4() engine = api.system_service() disk_attachments_service = test_utils.get_disk_attachments_service( engine, VM0_NAME) with test_utils.TestEvent(engine, 97): disk_attachments_service.add( sdk4.types.DiskAttachment( disk=dlun_params, interface=sdk4.types.DiskInterface.VIRTIO_SCSI)) disk_service = test_utils.get_disk_service(engine, DLUN_DISK_NAME) attachment_service = disk_attachments_service.attachment_service( disk_service.get().id) nt.assert_not_equal( attachment_service.get(), None, 'Failed to attach Direct LUN disk to {}'.format(VM0_NAME))
def hotplug_disk(api): engine = api.system_service() disk_attachments_service = test_utils.get_disk_attachments_service(engine, VM0_NAME) disk_attachment = disk_attachments_service.add( types.DiskAttachment( disk=types.Disk( name=DISK0_NAME, provisioned_size=2 * GB, format=types.DiskFormat.COW, storage_domains=[ types.StorageDomain( name=SD_NFS_NAME, ), ], status=None, sparse=True, ), interface=types.DiskInterface.VIRTIO, bootable=False, active=True ) ) disks_service = engine.disks_service() disk_service = disks_service.disk_service(disk_attachment.disk.id) attachment_service = disk_attachments_service.attachment_service(disk_attachment.id) testlib.assert_true_within_short( lambda: attachment_service.get().active == True ) testlib.assert_true_within_short( lambda: disk_service.get().status == types.DiskStatus.OK )
def test_hotplug_disk(prefix): api_v4 = prefix.virt_env.engine_vm().get_api_v4() engine = api_v4.system_service() disk_attachments_service = test_utils.get_disk_attachments_service( engine, VM0_NAME) disk_attachment = disk_attachments_service.add( types.DiskAttachment(disk=types.Disk( name=DISK0_NAME, provisioned_size=2 * GB, format=types.DiskFormat.COW, storage_domains=[ types.StorageDomain(name=SD_NFS_NAME, ), ], status=None, sparse=True, ), interface=types.DiskInterface.VIRTIO, bootable=False, active=True)) disks_service = engine.disks_service() disk_service = disks_service.disk_service(disk_attachment.disk.id) attachment_service = disk_attachments_service.attachment_service( disk_attachment.id) testlib.assert_true_within_short( lambda: attachment_service.get().active == True) testlib.assert_true_within_short( lambda: disk_service.get().status == types.DiskStatus.OK) assert_vm0_is_alive(prefix)
def add_disk(api): engine = api.system_service() vm0_service = test_utils.get_vm_service(engine, VM0_NAME) vm0_disk_attachments_service = test_utils.get_disk_attachments_service( engine, VM0_NAME) vm0_disk_attachments_service.add( types.DiskAttachment( disk=types.Disk( name=DISK0_NAME, format=types.DiskFormat.COW, initial_size=10 * GB, provisioned_size=1, sparse=True, storage_domains=[ types.StorageDomain(name=MASTER_SD_NAME, ), ], ), interface=types.DiskInterface.VIRTIO, active=True, bootable=True, ), ) disk0_service = test_utils.get_disk_service(engine, DISK0_NAME) disk0_attachment_service = vm0_disk_attachments_service.attachment_service( disk0_service.get().id) testlib.assert_true_within_long( lambda: disk0_attachment_service.get().active == True) testlib.assert_true_within_long( lambda: disk0_service.get().status == types.DiskStatus.OK)
def add_disk(api): engine = api.system_service() vm0_service = test_utils.get_vm_service(engine, VM0_NAME) glance_disk = test_utils.get_disk_service(engine, GLANCE_DISK_NAME) nt.assert_true(vm0_service and glance_disk) vm0_disk_attachments_service = test_utils.get_disk_attachments_service( engine, VM0_NAME) vm0_disk_attachments_service.add( types.DiskAttachment( disk=types.Disk( id=glance_disk.get().id, storage_domains=[ types.StorageDomain(name=SD_NFS_NAME, ), ], ), interface=types.DiskInterface.VIRTIO, active=True, bootable=True, ), ) disk_service = test_utils.get_disk_service(engine, GLANCE_DISK_NAME) testlib.assert_true_within_short( lambda: disk_service.get().status == types.DiskStatus.OK)
def add_snapshot_for_backup(api): engine = api.system_service() vm2_disk_attachments_service = test_utils.get_disk_attachments_service(engine, VM2_NAME) disk = vm2_disk_attachments_service.list()[0] backup_snapshot_params = types.Snapshot( description=SNAPSHOT_FOR_BACKUP_VM, persist_memorystate=False, disk_attachments=[ types.DiskAttachment( disk=types.Disk( id=disk.id ) ) ] ) vm2_snapshots_service = test_utils.get_vm_snapshots_service(engine, VM2_NAME) correlation_id = uuid.uuid4() with test_utils.TestEvent(engine, [45, 68]): # USER_CREATE_SNAPSHOT(41) event # USER_CREATE_SNAPSHOT_FINISHED_SUCCESS(68) event vm2_snapshots_service.add(backup_snapshot_params, query={'correlation_id': correlation_id}) testlib.assert_true_within_long( lambda: test_utils.all_jobs_finished(engine, correlation_id) ) testlib.assert_true_within_long( lambda: vm2_snapshots_service.list()[-1].snapshot_status == types.SnapshotStatus.OK, )
def attach_snapshot_to_backup_vm(api): engine = api.system_service() vm2_snapshots_service = (test_utils.get_vm_snapshots_service( engine, VM2_NAME)) vm2_disk_attachments_service = (test_utils.get_disk_attachments_service( engine, VM2_NAME)) vm2_disk = vm2_disk_attachments_service.list()[0] disk_attachments_service = (test_utils.get_disk_attachments_service( engine, BACKUP_VM_NAME)) disk_attachments_service.add( types.DiskAttachment(disk=types.Disk( id=vm2_disk.id, snapshot=types.Snapshot(id=vm2_snapshots_service.list()[-1].id)), interface=types.DiskInterface.VIRTIO_SCSI, bootable=False, active=True)) nt.assert_true(len(disk_attachments_service.list()) > 0)
def test_verify_add_vm1_from_template(api_v4): engine = api_v4.system_service() _verify_vm_state(engine, VM1_NAME, types.VmStatus.DOWN) disks_service = engine.disks_service() vm1_disk_attachments_service = test_utils.get_disk_attachments_service( engine, VM1_NAME) for disk_attachment in vm1_disk_attachments_service.list(): disk_service = disks_service.disk_service(disk_attachment.disk.id) testlib.assert_true_within_short( lambda: disk_service.get().status == types.DiskStatus.OK)
def test_attach_snapshot_to_backup_vm(api_v4): engine = api_v4.system_service() vm2_snapshots_service = test_utils.get_vm_snapshots_service( engine, VM2_NAME) vm2_disk_attachments_service = test_utils.get_disk_attachments_service( engine, VM2_NAME) vm2_disk = vm2_disk_attachments_service.list()[0] disk_attachments_service = test_utils.get_disk_attachments_service( engine, BACKUP_VM_NAME) with test_utils.TestEvent(engine, 2016): # USER_ATTACH_DISK_TO_VM event disk_attachments_service.add( types.DiskAttachment(disk=types.Disk( id=vm2_disk.id, snapshot=types.Snapshot( id=vm2_snapshots_service.list()[-1].id)), interface=types.DiskInterface.VIRTIO_SCSI, bootable=False, active=True)) assert len(disk_attachments_service.list()) > 0
def verify_add_vm1_from_template(api): engine = api.system_service() _verify_vm_state(engine, VM1_NAME, types.VmStatus.DOWN) disks_service = engine.disks_service() vm1_disk_attachments_service = test_utils.get_disk_attachments_service(engine, VM1_NAME) for disk_attachment in vm1_disk_attachments_service.list(): disk_service = disks_service.disk_service(disk_attachment.disk.id) testlib.assert_true_within_short( lambda: disk_service.get().status == types.DiskStatus.OK )
def hotunplug_disk(api): engine = api.system_service() disk_service = test_utils.get_disk_service(engine, DISK0_NAME) disk_attachments_service = test_utils.get_disk_attachments_service( engine, VM0_NAME) disk_attachment = disk_attachments_service.attachment_service( disk_service.get().id) nt.assert_true(disk_attachment.update(types.DiskAttachment(active=False))) testlib.assert_true_within_short( lambda: disk_attachment.get().active == False)
def attach_snapshot_to_backup_vm(api): engine = api.system_service() vm2_snapshots_service = test_utils.get_vm_snapshots_service(engine, VM2_NAME) vm2_disk_attachments_service = test_utils.get_disk_attachments_service(engine, VM2_NAME) vm2_disk = vm2_disk_attachments_service.list()[0] disk_attachments_service = test_utils.get_disk_attachments_service(engine, BACKUP_VM_NAME) with test_utils.TestEvent(engine, 2016): # USER_ATTACH_DISK_TO_VM event disk_attachments_service.add( types.DiskAttachment( disk=types.Disk( id=vm2_disk.id, snapshot=types.Snapshot( id=vm2_snapshots_service.list()[-1].id ) ), interface=types.DiskInterface.VIRTIO_SCSI, bootable=False, active=True ) ) nt.assert_true(len(disk_attachments_service.list()) > 0)
def test_hotunplug_disk(api_v4): engine = api_v4.system_service() disk_service = test_utils.get_disk_service(engine, DISK0_NAME) disk_attachments_service = test_utils.get_disk_attachments_service( engine, VM0_NAME) disk_attachment = disk_attachments_service.attachment_service( disk_service.get().id) with test_utils.TestEvent(engine, 2002): # USER_HOTUNPLUG_DISK(2,002) assert disk_attachment.update(types.DiskAttachment(active=False)) testlib.assert_true_within_short( lambda: disk_attachment.get().active == False)
def add_snapshot_for_backup(api): engine = api.system_service() vm2_disk_attachments_service = test_utils.get_disk_attachments_service( engine, VM2_NAME) disk = vm2_disk_attachments_service.list()[0] backup_snapshot_params = types.Snapshot( description=SNAPSHOT_FOR_BACKUP_VM, persist_memorystate=False, disk_attachments=[types.DiskAttachment(disk=types.Disk(id=disk.id))]) vm2_snapshots_service = test_utils.get_vm_snapshots_service( engine, VM2_NAME) vm2_snapshots_service.add(backup_snapshot_params)
def hotunplug_disk(api): engine = api.system_service() disk_service = test_utils.get_disk_service(engine, DISK0_NAME) disk_attachments_service = test_utils.get_disk_attachments_service(engine, VM0_NAME) disk_attachment = disk_attachments_service.attachment_service(disk_service.get().id) with test_utils.TestEvent(engine, 2002): # USER_HOTUNPLUG_DISK(2,002) nt.assert_true( disk_attachment.update(types.DiskAttachment(active=False)) ) testlib.assert_true_within_short( lambda: disk_attachment.get().active == False )
def add_directlun(prefix): # Find LUN GUIDs iscsi_host = prefix.virt_env.get_vm(SD_ISCSI_HOST_NAME) ret = iscsi_host.ssh(['cat', '/root/multipath.txt']) nt.assert_equals(ret.code, 0) all_guids = ret.out.splitlines() # Take the first unused LUN. 0-(SD_ISCSI_NR_LUNS) are used by iSCSI SD lun_guid = all_guids[SD_ISCSI_NR_LUNS] ips = iscsi_host.all_ips() luns = [] for ip in ips: lun = types.LogicalUnit( id=lun_guid, address=ip, port=SD_ISCSI_PORT, target=SD_ISCSI_TARGET, username='******', password='******', ) luns.append(lun) dlun_params = types.Disk( name=DLUN_DISK_NAME, format=types.DiskFormat.RAW, lun_storage=types.HostStorage( type=types.StorageType.ISCSI, logical_units=luns, ), # sgio=types.ScsiGenericIO.UNFILTERED, ) api = prefix.virt_env.engine_vm().get_api_v4() engine = api.system_service() disk_attachments_service = (test_utils.get_disk_attachments_service( engine, VM0_NAME)) disk_attachments_service.add( types.DiskAttachment(disk=dlun_params, interface=types.DiskInterface.VIRTIO_SCSI)) disk_service = test_utils.get_disk_service(engine, DLUN_DISK_NAME) attachment_service = (disk_attachments_service.attachment_service( disk_service.get().id)) nt.assert_not_equal(attachment_service.get(), None, 'Direct LUN disk not attached')
def extend_disk1(api): engine = api.system_service() disk_attachments_service = (test_utils.get_disk_attachments_service( engine, VM1_NAME)) for disk_attachment in disk_attachments_service.list(): disk = api.follow_link(disk_attachment.disk) if disk.name == DISK1_NAME: attachment_service = (disk_attachments_service.attachment_service( disk_attachment.id)) attachment_service.update( types.DiskAttachment(disk=types.Disk(provisioned_size=2 * GB, ))) disk_service = test_utils.get_disk_service(engine, DISK1_NAME) testlib.assert_true_within_short( lambda: disk_service.get().status == types.DiskStatus.OK and \ disk_service.get().provisioned_size == 2 * GB )
def make_snapshot_with_memory(api): engine = api.system_service() vm_service = test_utils.get_vm_service(engine, VM0_NAME) disks_service = engine.disks_service() vm_disks_service = \ test_utils.get_disk_attachments_service(engine, VM0_NAME) vm_disks = [ disks_service.disk_service(attachment.disk.id).get() for attachment in vm_disks_service.list() ] disk_attachments = [ types.DiskAttachment(disk=types.Disk(id=disk.id)) for disk in vm_disks if disk.storage_type != types.DiskStorageType.LUN ] snapshots_service = vm_service.snapshots_service() snapshot_params = types.Snapshot(description=SNAPSHOT_DESC_MEM, persist_memorystate=True, disk_attachments=disk_attachments) snapshots_service.add(snapshot_params)
def test_extend_disk1(api_v4): engine = api_v4.system_service() disk_attachments_service = test_utils.get_disk_attachments_service( engine, VM1_NAME) for disk_attachment in disk_attachments_service.list(): disk = api_v4.follow_link(disk_attachment.disk) if disk.name == DISK1_NAME: attachment_service = disk_attachments_service.attachment_service( disk_attachment.id) with test_utils.TestEvent(engine, 371): # USER_EXTEND_DISK_SIZE_SUCCESS(371) attachment_service.update( types.DiskAttachment(disk=types.Disk(provisioned_size=2 * GB, ))) disk_service = test_utils.get_disk_service(engine, DISK1_NAME) testlib.assert_true_within_short( lambda: disk_service.get().status == types.DiskStatus.OK) testlib.assert_true_within_short( lambda: disk_service.get().provisioned_size == 2 * GB)
def make_snapshot_with_memory(api): engine = api.system_service() vm_service = test_utils.get_vm_service(engine, VM0_NAME) disks_service = engine.disks_service() vm_disks_service = \ test_utils.get_disk_attachments_service(engine, VM0_NAME) vm_disks = [disks_service.disk_service(attachment.disk.id).get() for attachment in vm_disks_service.list()] disk_attachments = [types.DiskAttachment(disk=types.Disk(id=disk.id)) for disk in vm_disks if disk.storage_type != types.DiskStorageType.LUN] snapshots_service = vm_service.snapshots_service() snapshot_params = types.Snapshot( description=SNAPSHOT_DESC_MEM, persist_memorystate=True, disk_attachments=disk_attachments ) with test_utils.TestEvent(engine, 45): # USER_CREATE_SNAPSHOT event snapshots_service.add(snapshot_params)
def test_hotunplug_disk(engine_api): engine = engine_api.system_service() disk_service = test_utils.get_disk_service(engine, DISK0_NAME) disk_attachments_service = test_utils.get_disk_attachments_service( engine, VM0_NAME) disk_attachment = disk_attachments_service.attachment_service( disk_service.get().id) with engine_utils.wait_for_event(engine, 2002): # USER_HOTUNPLUG_DISK(2,002) correlation_id = 'test_hotunplug_disk' assert disk_attachment.update(types.DiskAttachment(active=False), query={'correlation_id': correlation_id}) assertions.assert_true_within_long( lambda: test_utils.all_jobs_finished(engine, correlation_id)) assertions.assert_true_within_short( lambda: disk_service.get().status == types.DiskStatus.OK) assertions.assert_true_within_short( lambda: disk_attachment.get().active == False)
def extend_disk1(api): engine = api.system_service() disk_attachments_service = test_utils.get_disk_attachments_service(engine, VM1_NAME) for disk_attachment in disk_attachments_service.list(): disk = api.follow_link(disk_attachment.disk) if disk.name == DISK1_NAME: attachment_service = disk_attachments_service.attachment_service(disk_attachment.id) with test_utils.TestEvent(engine, 371): # USER_EXTEND_DISK_SIZE_SUCCESS(371) attachment_service.update( types.DiskAttachment( disk=types.Disk(provisioned_size=2 * GB,))) disk_service = test_utils.get_disk_service(engine, DISK1_NAME) testlib.assert_true_within_short( lambda: disk_service.get().status == types.DiskStatus.OK ) testlib.assert_true_within_short( lambda: disk_service.get().provisioned_size == 2 * GB )