Introduce the server migration control file, that makes possible to run the multi host migration. It parses the base config file, restricts it with appropriate parameters, generates the test dicts, modify the test_dicts so there's a distinction between the migration roles ('destination' or 'source'). Signed-off-by: Lucas Meneghel Rodrigues <lmr@xxxxxxxxxx> --- client/tests/kvm/migration_control.srv | 103 ++++++++++++++++++++++++++++++++ 1 files changed, 103 insertions(+), 0 deletions(-) create mode 100644 client/tests/kvm/migration_control.srv diff --git a/client/tests/kvm/migration_control.srv b/client/tests/kvm/migration_control.srv new file mode 100644 index 0000000..781e820 --- /dev/null +++ b/client/tests/kvm/migration_control.srv @@ -0,0 +1,103 @@ +AUTHOR = "Yolkfull Chow <yzhou@xxxxxxxxxx>" +TIME = "SHORT" +NAME = "Migration across multiple hosts" +TEST_CATEGORY = "Functional" +TEST_CLASS = "Virtualization" +TEST_TYPE = "Server" +DOC = """ +Migrate KVM guest between two hosts. It parses the base config file, restricts +it with appropriate parameters, generates the test dicts, modify the test_dicts +so there's a distinction between the migration roles ('dest' or 'source'). +""" + +import sys, os, commands, glob, shutil, logging +from autotest_lib.server import utils + +# Specify the directory of autotest before you start this test +AUTOTEST_DIR = '/usr/local/autotest' + +# Specify the root directory that on client machines +rootdir = '/tmp/kvm_autotest_root' + +# Make possible to import the KVM test APIs +KVM_DIR = os.path.join(AUTOTEST_DIR, 'client/tests/kvm') +sys.path.append(KVM_DIR) + +import common, kvm_config + +def run(pair): + logging.info("KVM migration running on source host [%s] and destination " + "host [%s]\n", pair[0], pair[1]) + + source = hosts.create_host(pair[0]) + dest = hosts.create_host(pair[1]) + source_at = autotest.Autotest(source) + dest_at = autotest.Autotest(dest) + + cfg_file = os.path.join(KVM_DIR, "tests_base.cfg") + + if not os.path.exists(cfg_file): + raise error.JobError("Config file %s was not found", cfg_file) + + # Get test set (dictionary list) from the configuration file + cfg = kvm_config.config() + test_variants = """ +image_name(_.*)? ?<= /tmp/kvm_autotest_root/images/ +cdrom(_.*)? ?<= /tmp/kvm_autotest_root/ +floppy ?<= /tmp/kvm_autotest_root/ +Linux: + unattended_install: + kernel ?<= /tmp/kvm_autotest_root/ + initrd ?<= /tmp/kvm_autotest_root/ +only qcow2 +only virtio_net +only virtio_blk +only smp2 +only no_pci_assignable +only smallpages +only Fedora.13.64 +only migrate_multi_host +nic_mode = tap +""" + cfg.fork_and_parse(cfg_file, test_variants) + test_list = cfg.get_list() + + for params in test_list: + params['srchost'] = source.ip + params['dsthost'] = dest.ip + params['rootdir'] = rootdir + + source_params = params.copy() + source_params['role'] = "source" + + dest_params = params.copy() + dest_params['role'] = "destination" + dest_params['migration_mode'] = "tcp" + + # Report the parameters we've received + print "Test parameters:" + keys = test_dict.keys() + keys.sort() + for key in keys: + logging.debug(" %s = %s", key, test_dict[key]) + + source_control_file = "job.run_test('kvm', params=%s)" % source_dict + dest_control_file = "job.run_test('kvm', params=%s)" % dest_dict + + dest_command = subcommand(dest_at.run, + [dest_control_file, dest.hostname]) + + source_command = subcommand(source_at.run, + [source_control_file, source.hostname]) + + parallel([dest_command, source_command]) + +# Grab the pairs (and failures) +(pairs, failures) = utils.form_ntuples_from_machines(machines, 2) + +# Log the failures +for failure in failures: + job.record("FAIL", failure[0], "kvm", failure[1]) + +# Now run through each pair and run +job.parallel_simple(run, pairs, log=False) \ No newline at end of file -- 1.7.2.3 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html