def parse_yaml(options, input_yaml_file): with open(input_yaml_file, 'r') as f: try: y = yaml.safe_load(f) if y == None: y = {} except yaml.YAMLError as e: emsg = "YAML parse error: " + str(e) raise FsDriftParseException(emsg) try: for k in y.keys(): v = y[k] if k == 'input_yaml': raise FsDriftParseException( 'cannot specify YAML input file from within itself!') elif k == 'top': options.top_directory = v elif k == 'output_json': options.output_json = v elif k == 'workload_table': options.workload_table = v elif k == 'duration': options.duration = positive_integer(v) elif k == 'host_set': options.host_set = host_set(v) elif k == 'threads': options.threads = positive_integer(v) elif k == 'max_files': options.max_files = positive_integer(v) elif k == 'max_file_size_kb': options.max_file_size_kb = positive_integer(v) elif k == 'pause_between_opts': options.pause_between_opts = non_negative_integer(v) elif k == 'max_record_size_kb': options.max_record_size_kb = positive_integer(v) elif k == 'max_random_reads': options.max_random_reads = positive_integer(v) elif k == 'max_random_writes': options.max_random_writes = positive_integer(v) elif k == 'fdatasync_pct': options.fdatasync_probability_pct = non_negative_integer(v) elif k == 'fsync_pct': options.fsync_probability_pct = non_negative_integer(v) elif k == 'levels': options.levels = positive_integer(v) elif k == 'dirs_per_level': options.dirs_per_level = positive_integer(v) elif k == 'report_interval': options.stats_report_interval = positive_integer(v) elif k == 'response_times': options.rsptimes = boolean(v) elif k == 'incompressible': options.incompressible = boolean(v) elif k == 'random_distribution': options.random_distribution = file_access_distrib(v) elif k == 'mean_velocity': options.mean_velocity = float(v) elif k == 'gaussian_stddev': options.gaussian_stddev = float(v) elif k == 'create_stddevs_ahead': options.create_stddevs_ahead = float(v) elif k == 'tolerate_stale_file_handles': options.tolerate_stale_fh = boolean(v) elif k == 'fullness_limit_percent': options.fullness_limit_pct = positive_percentage(v) elif k == 'verbosity': options.verbosity = bitmask(v) elif k == 'launch_as_daemon': options.launch_as_daemon = boolean(v) else: raise FsDriftParseException('unrecognized parameter name %s' % k) except TypeExc as e: emsg = 'YAML parse error for key "%s" : %s' % (k, str(e)) raise FsDriftParseException(emsg)
def parse_yaml(test_params, input_yaml_file): inv = test_params.master_invoke with open(input_yaml_file, 'r') as f: try: y = yaml.load(f) if y == None: y = {} except yaml.YAMLError as e: emsg = "YAML parse error: " + str(e) raise SmfParseException(emsg) try: for k in y.keys(): v = y[k] if k == 'yaml-input-file': raise SmfParseException('cannot specify YAML input file from within itself!') elif k == 'output-json': test_params.output_json = v elif k == 'response-times': inv.measure_rsptimes = boolean(v) elif k == 'network-sync-dir': inv.network_dir = boolean(v) elif k == 'operation': if not smallfile.SmallfileWorkload.all_op_names.__contains__(v): raise SmfParseException('operation "%s" not recognized') inv.opname = v elif k == 'top': test_params.top_dirs = [ os.path.abspath(p) for p in y['top'].split(',') ] elif k == 'host-set': test_params.host_set = host_set(v) elif k == 'files': inv.iterations = positive_integer(v) elif k == 'threads': test_params.thread_count = positive_integer(v) elif k == 'files-per-dir': inv.files_per_dir = positive_integer(v) elif k == 'dirs-per-dir': inv.dirs_per_dir = positive_integer(v) elif k == 'record-size': inv.record_sz_kb = positive_integer(v) elif k == 'file-size': inv.total_sz_kb = non_negative_integer(v) elif k == 'file-size-distribution': test_params.size_distribution = inv.filesize_distr = file_size_distrib(v) elif k == 'fsync': inv.fsync = boolean(v) elif k == 'xattr-size': inv.xattr_size = positive_integer(v) elif k == 'xattr-count': inv.xattr_count = positive_integer(v) elif k == 'pause': inv.pause_between_files = non_negative_integer(v) elif k == 'stonewall': inv.stonewall = boolean(v) elif k == 'finish': inv.finish_all_rq = boolean(v) elif k == 'prefix': inv.prefix = v elif k == 'suffix': inv.suffix = v elif k == 'hash-into-dirs': inv.hash_to_dir = boolean(v) elif k == 'same-dir': inv.is_shared_dir = boolean(v) elif k == 'verbose': inv.verbose = boolean(v) elif k == 'permute-host-dirs': test_params.permute_host_dirs = boolean(v) elif k == 'record-time-size': inv.record_ctime_size = boolean(v) elif k == 'verify-read': inv.verify_read = boolean(v) elif k == 'incompressible': inv.incompressible = boolean(v) elif k == 'min-dirs-per-sec': test_params.min_directories_per_sec = positive_integer(v) elif k == 'log-to-stderr': raise SmfParseException('%s: not allowed in YAML input' % k) elif k == 'remote-pgm-dir': raise SmfParseException('%s: not allowed in YAML input' % k) else: raise SmfParseException('%s: unrecognized input parameter name' % k) except TypeExc as e: emsg = 'YAML parse error for key "%s" : %s' % (k, str(e)) raise SmfParseException(emsg)
def parse_yaml(test_params, input_yaml_file): inv = test_params.master_invoke with open(input_yaml_file, 'r') as f: try: y = yaml.load(f) except yaml.YAMLError as e: emsg = "YAML parse error: " + str(e) raise SmfParseException(emsg) try: for k in y.keys(): v = y[k] if k == 'yaml-input-file': raise SmfParseException( 'cannot specify YAML input file from within itself!') elif k == 'output-json': test_params.output_json = v elif k == 'response-times': inv.measure_rsptimes = boolean(v) elif k == 'network-sync-dir': inv.network_dir = boolean(v) elif k == 'operation': if not smallfile.SmallfileWorkload.all_op_names.__contains__( v): raise SmfParseException('operation "%s" not recognized') inv.opname = v elif k == 'top': test_params.top_dirs = [ os.path.abspath(p) for p in y['top'].split(',') ] elif k == 'host-set': test_params.host_set = host_set(v) elif k == 'files': inv.iterations = positive_integer(v) elif k == 'threads': test_params.thread_count = positive_integer(v) elif k == 'files-per-dir': inv.files_per_dir = positive_integer(v) elif k == 'dirs-per-dir': inv.dirs_per_dir = positive_integer(v) elif k == 'record-size': inv.record_sz_kb = positive_integer(v) elif k == 'file-size': inv.total_sz_kb = non_negative_integer(v) elif k == 'file-size-distribution': test_params.size_distribution = inv.filesize_distr = file_size_distrib( v) elif k == 'fsync': inv.fsync = boolean(v) elif k == 'xattr-size': inv.xattr_size = positive_integer(v) elif k == 'xattr-count': inv.xattr_count = positive_integer(v) elif k == 'pause': inv.pause_between_files = non_negative_integer(v) elif k == 'stonewall': inv.stonewall = boolean(v) elif k == 'finish': inv.finish_all_rq = boolean(v) elif k == 'prefix': inv.prefix = v elif k == 'suffix': inv.suffix = v elif k == 'hash-into-dirs': inv.hash_to_dir = boolean(v) elif k == 'same-dir': inv.is_shared_dir = boolean(v) elif k == 'verbose': inv.verbose = boolean(v) elif k == 'permute-host-dirs': test_params.permute_host_dirs = boolean(v) elif k == 'record-time-size': inv.record_ctime_size = boolean(v) elif k == 'verify-read': inv.verify_read = boolean(v) elif k == 'incompressible': inv.incompressible = boolean(v) elif k == 'min-dirs-per-sec': test_params.min_directories_per_sec = positive_integer(v) elif k == 'log-to-stderr': raise SmfParseException('%s: not allowed in YAML input' % k) elif k == 'remote-pgm-dir': raise SmfParseException('%s: not allowed in YAML input' % k) else: raise SmfParseException( '%s: unrecognized input parameter name' % k) except TypeExc as e: emsg = 'YAML parse error for key "%s" : %s' % (k, str(e)) raise SmfParseException(emsg)