Implement MOL-168 - Allow to run set of tests on single vm
diff --git a/run_test.py b/run_test.py
index 04176b6..bc1f8fc 100644
--- a/run_test.py
+++ b/run_test.py
@@ -5,6 +5,7 @@
import pprint
import os.path
import argparse
+import traceback
import io_scenario
from itest import IOPerfTest
@@ -46,9 +47,12 @@
help="print some extra log info")
parser.add_argument("-o", "--io-opts", dest='io_opts',
- required=True,
help="cmd line options for io.py")
+ parser.add_argument("-f", "--io-opts-file", dest='io_opts_file',
+ type=argparse.FileType('r'), default=None,
+ help="file with cmd line options for io.py")
+
parser.add_argument("-t", "--test-directory", help="directory with test",
dest="test_directory", required=True)
@@ -69,65 +73,7 @@
return parser.parse_args(argv)
-def main(argv):
- opts = parse_args(argv)
-
- if not opts.extra_logs:
- def nolog(x):
- pass
-
- setlogger(nolog)
-
- script_args = [opt.strip()
- for opt in opts.io_opts.split(" ")
- if opt.strip() != ""]
-
- if opts.runner == "rally":
- runner = rally_runner.get_rally_runner(
- files_dir=os.path.dirname(io_scenario.__file__),
- rally_extra_opts=opts.runner_opts.split(" "),
- max_preparation_time=opts.max_preparation_time,
- keep_temp_files=opts.keep_temp_files)
- res = run_io_test(opts.tool_type,
- script_args,
- runner,
- opts.keep_temp_files)
- elif opts.runner == "ssh":
- user, key_file = opts.runner_opts.split(" ", 1)
-
- latest_start_time = opts.max_preparation_time + time.time()
-
- nova = nova_connect()
-
- # nova, amount, keypair_name, img_name,
- # flavor_name, vol_sz=None, network_zone_name=None,
- # flt_ip_pool=None, name_templ='ceph-test-{}',
- # scheduler_hints=None
-
- try:
- ips = [i[0] for i in create_vms_mt(nova, 3,
- keypair_name='ceph',
- img_name='ubuntu',
- flavor_name='ceph.512',
- network_zone_name='net04',
- flt_ip_pool='net04_ext')]
-
- uris = ["{0}@{1}::{2}".format(user, ip, key_file) for ip in ips]
-
- runner = ssh_runner.get_ssh_runner(uris,
- latest_start_time,
- opts.keep_temp_files)
- res = run_io_test(opts.tool_type,
- script_args,
- runner,
- opts.keep_temp_files)
- finally:
- clear_all(nova)
-
- print "=" * 80
- print pprint.pformat(res)
- print "=" * 80
-
+def print_measurements_stat(res):
if len(res) != 0:
bw_mean = 0.0
for measurement in res:
@@ -148,6 +94,126 @@
print
print "=" * 80
+
+def get_io_opts(io_opts_file, io_opts):
+ if io_opts_file is not None and io_opts is not None:
+ print "Options --io-opts-file and --io-opts can't be " + \
+ "provided same time"
+ exit(1)
+
+ if io_opts_file is None and io_opts is None:
+ print "Either --io-opts-file or --io-opts should " + \
+ "be provided"
+ exit(1)
+
+ if io_opts_file is not None:
+ io_opts = []
+
+ opt_lines = io_opts_file.readlines()
+ opt_lines = [i for i in opt_lines if i != "" and not i.startswith("#")]
+
+ for opt_line in opt_lines:
+ io_opts.append([opt.strip()
+ for opt in opt_line.split(" ")
+ if opt.strip() != ""])
+ else:
+ io_opts = [[opt.strip()
+ for opt in io_opts.split(" ")
+ if opt.strip() != ""]]
+
+ if len(io_opts) == 0:
+ print "Can't found parameters for io. Check" + \
+ "--io-opts-file or --io-opts options"
+ exit(1)
+
+ return io_opts
+
+
+def main(argv):
+ opts = parse_args(argv)
+
+ if not opts.extra_logs:
+ def nolog(x):
+ pass
+
+ setlogger(nolog)
+
+ io_opts = get_io_opts(opts.io_opts_file, opts.io_opts)
+
+ if opts.runner == "rally":
+ for script_args in io_opts:
+ runner = rally_runner.get_rally_runner(
+ files_dir=os.path.dirname(io_scenario.__file__),
+ rally_extra_opts=opts.runner_opts.split(" "),
+ max_preparation_time=opts.max_preparation_time,
+ keep_temp_files=opts.keep_temp_files)
+
+ res = run_io_test(opts.tool_type,
+ script_args,
+ runner,
+ opts.keep_temp_files)
+
+ print "=" * 80
+ print pprint.pformat(res)
+ print "=" * 80
+
+ print_measurements_stat(res)
+
+ elif opts.runner == "ssh":
+ create_vms_opts = {}
+ for opt in opts.runner_opts.split(","):
+ name, val = opt.split("=", 1)
+ create_vms_opts[name] = val
+
+ user = create_vms_opts.pop("user")
+ key_file = create_vms_opts.pop("key_file")
+ aff_group = create_vms_opts.pop("aff_group", None)
+ raw_count = create_vms_opts.pop("count", "x1")
+
+ if raw_count.startswith("x"):
+ raise NotImplementedError("xXXXX count not implemented yet")
+ else:
+ count = int(raw_count)
+
+ if aff_group is not None:
+ scheduler_hints = {'group': aff_group}
+ else:
+ scheduler_hints = None
+
+ create_vms_opts['scheduler_hints'] = scheduler_hints
+
+ latest_start_time = opts.max_preparation_time + time.time()
+
+ nova = nova_connect()
+
+ # nova, amount, keypair_name, img_name,
+ # flavor_name, vol_sz=None, network_zone_name=None,
+ # flt_ip_pool=None, name_templ='ceph-test-{}',
+ # scheduler_hints=None
+
+ try:
+ ips = [i[0] for i in create_vms_mt(nova, count, **create_vms_opts)]
+
+ uris = ["{0}@{1}::{2}".format(user, ip, key_file) for ip in ips]
+
+ for script_args in io_opts:
+ runner = ssh_runner.get_ssh_runner(uris,
+ latest_start_time,
+ opts.keep_temp_files)
+ res = run_io_test(opts.tool_type,
+ script_args,
+ runner,
+ opts.keep_temp_files)
+ print "=" * 80
+ print pprint.pformat(res)
+ print "=" * 80
+
+ print_measurements_stat(res)
+ except:
+ traceback.print_exc()
+ finally:
+ clear_all(nova)
+
return 0