def main(): namespace = parse_job_mode() if namespace.jmx_username: namespace.jmx_password = getpass.getpass(prompt="JMX Password ") else: namespace.jmx_password = None if bool(namespace.seed_host) + bool(namespace.host) + bool( namespace.host_file) != 1: error( "Exactly one of --seed-host, --host and --host-file must be used", print_traceback=False) hosts = None if namespace.host_file: with open(namespace.host_file) as f: hosts = f.readlines() if namespace.host: hosts = namespace.host cstar.output.configure(namespace.verbose) with cstar.job.Job() as job: env = {} job_id = str(uuid.uuid4()) msg("Job id is", emph(job_id)) cstar.signalhandler.print_message_and_save_on_sigint(job, job_id) job.setup(hosts=hosts, seeds=namespace.seed_host, command=namespace.command, job_id=job_id, strategy=cstar.strategy.parse( fallback(namespace.strategy, "topology")), cluster_parallel=fallback(namespace.cluster_parallel, False), dc_parallel=fallback(namespace.dc_parallel, False), max_concurrency=namespace.max_concurrency, timeout=namespace.timeout, env=env, stop_after=namespace.stop_after, job_runner=cstar.jobrunner.LocalJobRunner, key_space=namespace.key_space, output_directory=namespace.output_directory, ignore_down_nodes=False, dc_filter=namespace.dc_filter, sleep_on_new_runner=namespace.ssh_pause_time, sleep_after_done=namespace.node_done_pause_time, ssh_username=namespace.ssh_username, ssh_password=namespace.ssh_password, ssh_identity_file=namespace.ssh_identity_file, ssh_lib=namespace.ssh_lib, jmx_username=namespace.jmx_username, jmx_password=namespace.jmx_password, resolve_hostnames=namespace.resolve_hostnames, hosts_variables=namespace.hosts_variables) job.run()
def execute_command(args): cstar.output.debug(args) command = args.command if bool(args.seed_host) + bool(args.host) + bool(args.host_file) != 1: error( "Exactly one of --seed-host, --host and --host-file must be used", print_traceback=False) hosts = None if args.host_file: with open(args.host_file) as f: hosts = f.readlines() if args.host: hosts = args.host with cstar.job.Job() as job: env = dict( (arg.name, getattr(args, arg.name)) for arg in command.arguments) if bool(args.enforced_job_id) == 1: job_id = args.enforced_job_id if not (validate_uuid4(job_id)): raise BadArgument("Job id is not a valid UUID v4 value.") else: job_id = str(uuid.uuid4()) msg("Job id is", emph(job_id)) msg("Running", command.file) cstar.signalhandler.print_message_and_save_on_sigint(job, job_id) job.setup(hosts=hosts, seeds=args.seed_host, command=command.file, job_id=job_id, strategy=cstar.strategy.parse( fallback(args.strategy, command.strategy, "topology")), cluster_parallel=fallback(args.cluster_parallel, command.cluster_parallel, False), dc_parallel=fallback(args.dc_parallel, command.dc_parallel, False), max_concurrency=args.max_concurrency, timeout=args.timeout, env=env, stop_after=args.stop_after, job_runner=cstar.jobrunner.RemoteJobRunner, key_space=args.key_space, output_directory=args.output_directory, ignore_down_nodes=args.ignore_down_nodes, dc_filter=args.dc_filter, sleep_on_new_runner=args.ssh_pause_time, sleep_after_done=args.node_done_pause_time, ssh_username=args.ssh_username, ssh_password=args.ssh_password, ssh_identity_file=args.ssh_identity_file, ssh_lib=args.ssh_lib, jmx_username=args.jmx_username, jmx_password=args.jmx_password, jmx_passwordfile=args.jmx_passwordfile) job.run()
def __exit__(self, exc_type, exc_value, exc_traceback): self.close() if exc_type: if exc_type == NoHostsSpecified: error("No hosts specified") elif exc_type in [BadSSHHost, NoDefaultKeyspace, HostIsDown, UnknownHost]: error(exc_value)
def execute_continue(args): with cstar.job.Job() as job: try: cstar.jobreader.read(job, args.job_id, args.stop_after, max_days=args.max_job_age, output_directory=args.output_directory) except (FileTooOld, BadFileFormatVersion) as e: error(e) msg("Resuming job", job.job_id) msg("Running ", job.command) cstar.signalhandler.print_message_and_save_on_sigint(job, job.job_id) job.resume()
def args_from_strategy_shortcut(args): """Returns args Takes command options and a strategy shortcut in: {--one, --one-per-dc, --topology, --topology-per-dc, --all} Returns options (args) with --strategy and --dc-parallel set accordingly """ strategy_shortcuts = { "--one": int(args.strategy_one), "--one-per-dc": int(args.strategy_one_per_dc), "--topology": int(args.strategy_topology), "--topology-per-dc": int(args.strategy_topology_per_dc), "--all": int(args.strategy_all) } total_shortcuts_used = sum(strategy_shortcuts.values()) if total_shortcuts_used > 1: error("Exactly one of {} must be used".format(', '.join( strategy_shortcuts.keys())), print_traceback=False) if total_shortcuts_used == 1: if args.strategy is not None: error("--strategy option is not compatible with {} options that " "defines the stratgy already".format(', '.join( strategy_shortcuts.keys())), print_traceback=False) elif args.dc_parallel is not None: error("--dc-parallel option is not compatible with {} options " "that defines the stratgy already".format(', '.join( strategy_shortcuts.keys())), print_traceback=False) else: # Identify the strategy_?* option used for (k, v) in strategy_shortcuts.items(): if v == 1: # Set corresponding option if k == "--one": args.strategy = "one" args.dc_parallel = False elif k == "--one-per-dc": args.strategy = "one" args.dc_parallel = True elif k == "--topology": args.strategy = "topology" args.dc_parallel = False elif k == "--topology-per-dc": args.strategy = "topology" args.dc_parallel = True elif k == "--all": args.strategy = "all" args.dc_parallel = True else: error("Unknown shortcut option: {}".format(k)) return args
def execute_continue(args): msg("Retry : ", args.retry_failed) with cstar.job.Job() as job: try: cstar.jobreader.read(job, args.job_id, args.stop_after, max_days=args.max_job_age, output_directory=args.output_directory, retry=args.retry_failed) except (FileTooOld, BadFileFormatVersion) as e: error(e) msg("Resuming job", job.job_id) if job.jmx_username and not job.jmx_passwordfile: job.jmx_password = getpass.getpass(prompt="JMX Password ") msg("Running ", job.command) cstar.signalhandler.print_message_and_save_on_sigint(job, job.job_id) job.resume()