Skip to content

Commit 3f09072

Browse files
committed
Virtual disk: add different migration test cases
Automate: RHEL-175001 - [Migration] Migrate vm with disk type= block - logical volume based on iscsi VIRT-19098 - [Migration] Migrate with nbd disk defined in xml Signed-off-by: Meina Li <[email protected]>
1 parent 6d41ed1 commit 3f09072

File tree

3 files changed

+161
-1
lines changed

3 files changed

+161
-1
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
- migration.migration_with_disk.migration_with_different_disks:
2+
type = migration_with_different_disks
3+
start_vm = "no"
4+
migration_setup = "yes"
5+
storage_type = "nfs"
6+
setup_local_nfs = "yes"
7+
disk_type = "file"
8+
disk_source_protocol = "netfs"
9+
mnt_path_name = ${nfs_mount_dir}
10+
# Console output can only be monitored via virsh console output
11+
only_pty = True
12+
take_regular_screendumps = no
13+
# Extra options to pass after <domain> <desturi>
14+
virsh_migrate_extra = ""
15+
ssh_timeout = 60
16+
virsh_migrate_connect_uri = "qemu:///system"
17+
virsh_migrate_dest_state = "running"
18+
virsh_migrate_src_state = "shut off"
19+
server_ip = "${migrate_dest_host}"
20+
server_user = "root"
21+
server_pwd = "${migrate_dest_pwd}"
22+
client_ip = "${migrate_source_host}"
23+
client_pwd = "${migrate_source_pwd}"
24+
migrate_desturi_port = "22"
25+
migrate_desturi_type = "ssh"
26+
virsh_migrate_desturi = "qemu+ssh://${migrate_dest_host}/system"
27+
check_disk_after_mig = "yes"
28+
simple_disk_check_after_mig = "yes"
29+
no ppc64le
30+
variants test_scenario:
31+
- block_disk:
32+
disk_type = "block"
33+
check_disk_kname_after_mig = "sda"
34+
vg_name = "vg0"
35+
lv_name = "lv0"
36+
lv_size = "200M"
37+
target_emulate_image = "emulated-iscsi2"
38+
disk_dict = {"type_name": "block", "device": "disk", "driver": {"name": "qemu", "type": "raw"}, "target": {"dev": "${check_disk_kname_after_mig}", "bus": "scsi"}}
39+
- nbd_disk:
40+
disk_type = "nbd"
41+
enable_tls = "no"
42+
check_disk_kname_after_mig = "vdb"
43+
nbd_server_port = "10809"
44+
shared_num = "2"
45+
disk_dict = {"type_name": "network", "device": "disk", "driver": {"name": "qemu", "type": "raw"}, "target": {"dev": "${check_disk_kname_after_mig}", "bus": "virtio"}}
46+
variants:
47+
- with_precopy:
48+
virsh_migrate_options = "--live --p2p --persistent --verbose"
49+
- with_postcopy:
50+
virsh_migrate_options = "--live --p2p --persistent --verbose --postcopy --timeout 10 --timeout-postcopy"
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
import ast
2+
3+
from avocado.utils import process
4+
5+
from virttest import remote
6+
from virttest import utils_disk
7+
from virttest import utils_test
8+
from virttest import utils_iptables
9+
10+
from virttest.utils_libvirt import libvirt_disk
11+
from virttest.utils_test import libvirt
12+
13+
from provider.migration import base_steps
14+
from provider.virtual_disk import disk_base
15+
16+
17+
def setup_block_remote(params, test):
18+
"""
19+
Setup iSCSI target on remote host.
20+
21+
:param params: test parameters
22+
:param test: test object
23+
"""
24+
test.log.info("Setting up iSCSI target on remote host.")
25+
client_ip = params.get("client_ip")
26+
vg_name = params.get("vg_name", "vg0")
27+
lv_name = params.get("lv_name", "lv0")
28+
lv_size = params.get("lv_size", "200M")
29+
target_emulate_image = params.get("target_emulate_image", "emulated-iscsi2")
30+
block_dev = utils_test.RemoteDiskManager(params)
31+
iscsi_target, _ = libvirt.setup_or_cleanup_iscsi(is_setup=True,
32+
is_login=False,
33+
emulated_image=target_emulate_image,
34+
portal_ip=client_ip)
35+
36+
remote_device = block_dev.iscsi_login_setup(client_ip, iscsi_target)
37+
clear_dm_dev = (
38+
f"dmsetup ls --noheadings | awk '/^{vg_name}-/ {{print $1}}' "
39+
f"| xargs -r dmsetup remove --force; rm -rf /dev/{vg_name}"
40+
)
41+
remote.run_remote_cmd(clear_dm_dev, params, ignore_status=True)
42+
block_dev.create_vg(vg_name, remote_device)
43+
block_dev.create_image("lvm",
44+
size=lv_size,
45+
vgname=vg_name,
46+
lvname=lv_name,
47+
sparse=False,
48+
timeout=60)
49+
50+
51+
def run(test, params, env):
52+
"""
53+
Test migration with different disk types (iSCSI LV and NBD).
54+
"""
55+
def setup_test():
56+
"""
57+
Setup steps for migration with different disk types.
58+
"""
59+
test.log.info("Setting up %s disk test environment for guest.", disk_type)
60+
migration_obj.setup_connection()
61+
disk_obj.new_image_path = disk_obj.add_vm_disk(disk_type, disk_dict)
62+
if not vm.is_alive():
63+
vm.start()
64+
65+
vm_session = vm.wait_for_login()
66+
source_disk_name, _ = libvirt_disk.get_non_root_disk_name(vm_session)
67+
utils_disk.dd_data_to_vm_disk(vm_session, source_disk_name)
68+
vm_session.close()
69+
70+
if disk_type == "block":
71+
setup_block_remote(params, test)
72+
73+
if disk_type == "nbd":
74+
firewall_cmd.add_port(nbd_server_port, "tcp", permanent=True)
75+
76+
def cleanup_test():
77+
"""
78+
Cleanup steps for migration with different disk types.
79+
"""
80+
test.log.info("Cleanup steps for migration with different disk types.")
81+
migration_obj.cleanup_connection()
82+
disk_obj.cleanup_disk_preparation(disk_type)
83+
if disk_type == "block":
84+
remote.run_remote_cmd("iscsiadm -m session -u", params, ignore_status=True)
85+
libvirt.setup_or_cleanup_iscsi(is_setup=False,
86+
emulated_image=target_emulate_image,
87+
portal_ip=client_ip)
88+
if disk_type == "nbd":
89+
firewall_cmd.remove_port(nbd_server_port, "tcp", permanent=True)
90+
91+
vm_name = params.get("migrate_main_vm")
92+
vm = env.get_vm(vm_name)
93+
disk_type = params.get("disk_type")
94+
client_ip = params.get("client_ip")
95+
target_emulate_image = params.get("target_emulate_image", "emulated-iscsi2")
96+
disk_dict = ast.literal_eval(params.get("disk_dict", "{}"))
97+
nbd_server_port = params.get("nbd_server_port", "10809")
98+
99+
base_steps.sync_cpu_for_mig(params)
100+
migration_obj = base_steps.MigrationBase(test, vm, params)
101+
disk_obj = disk_base.DiskBase(test, vm, params)
102+
firewall_cmd = utils_iptables.Firewall_cmd()
103+
104+
try:
105+
setup_test()
106+
migration_obj.run_migration()
107+
migration_obj.verify_default()
108+
finally:
109+
cleanup_test()

provider/virtual_disk/disk_base.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,12 +200,13 @@ def prepare_disk_obj(self, disk_type, disk_dict, new_image_path='', **kwargs):
200200
device_format = self.params.get("device_format", "qcow2")
201201
export_name = self.params.get("export_name", "new")
202202
tls_enabled = "yes" == self.params.get("enable_tls", "yes")
203+
shared_num = self.params.get("shared_num")
203204
image_size = kwargs.get("size",
204205
self.params.get("image_size", "500M"))
205206

206207
self.disk_backend = NbdExport(
207208
image_path, image_format=device_format, port=nbd_server_port,
208-
image_size=image_size, export_name=export_name, tls=tls_enabled)
209+
image_size=image_size, export_name=export_name, tls=tls_enabled, shared_num=shared_num)
209210
self.disk_backend.start_nbd_server()
210211
utils_misc.wait_for(
211212
lambda: process.system('netstat -nlp | grep %s ' % nbd_server_port, ignore_status=True, shell=True) == 0, 10)

0 commit comments

Comments
 (0)