Пример #1
0
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()
Пример #2
0
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()
Пример #3
0
    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)
Пример #4
0
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()
Пример #5
0
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
Пример #6
0
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()