コード例 #1
0
def build_service_job_mapping(client, configured_jobs):
    """
    :param client: A Chronos client used for getting the list of running jobs
    :param configured_jobs: A list of jobs configured in Paasta, i.e. jobs we
        expect to be able to find
    :returns: A dict of {(service, instance): [(chronos job, lastrunstate)]}
        where the chronos job is any with a matching (service, instance) in its
        name and disabled == False
    """
    service_job_mapping = {}
    for job in configured_jobs:
        # find all the jobs belonging to each service
        matching_jobs = chronos_tools.lookup_chronos_jobs(
            service=job[0],
            instance=job[1],
            client=client,
            include_disabled=True,
        )
        matching_jobs = chronos_tools.sort_jobs(matching_jobs)
        # Only consider the most recent one
        if len(matching_jobs) > 0:
            matching_jobs = [matching_jobs[0]]
        with_states = last_run_state_for_jobs(matching_jobs)
        service_job_mapping[job] = with_states
    return service_job_mapping
コード例 #2
0
def build_service_job_mapping(client, configured_jobs):
    """
    :param client: A Chronos client used for getting the list of running jobs
    :param configured_jobs: A list of jobs configured in Paasta, i.e. jobs we
        expect to be able to find
    :returns: A dict of {(service, instance): last_chronos_job}
        where last_chronos_job is the latest job matching (service, instance)
        or None if there is no such job
    """
    service_job_mapping = {}
    all_chronos_jobs = client.list()
    for job in configured_jobs:
        # find all the jobs belonging to each service
        matching_jobs = chronos_tools.filter_chronos_jobs(
            jobs=all_chronos_jobs,
            service=job[0],
            instance=job[1],
            include_disabled=True,
            include_temporary=True,
        )
        matching_jobs = chronos_tools.sort_jobs(matching_jobs)
        # Only consider the most recent one
        service_job_mapping[job] = matching_jobs[0] if len(
            matching_jobs) > 0 else None
    return service_job_mapping
コード例 #3
0
ファイル: setup_chronos_job.py プロジェクト: ashwinaj/paasta
def setup_job(service, instance, chronos_job_config, complete_job_config, client, cluster):
    job_id = complete_job_config['name']
    # Sort this initial list since other lists of jobs will come from it (with
    # their orders preserved by list comprehensions) and since we'll care about
    # ordering by recency when we go calculate jobs_to_delete.
    all_existing_jobs = chronos_tools.sort_jobs(chronos_tools.lookup_chronos_jobs(
        service=service,
        instance=instance,
        client=client,
    ))
    old_jobs = [job for job in all_existing_jobs if job["name"] != job_id]
    enabled_old_jobs = [job for job in old_jobs if not job["disabled"]]

    if all_existing_jobs == old_jobs:
        job_to_create = complete_job_config
    else:
        job_to_create = None

    number_of_old_jobs_to_keep = 5
    return bounce_chronos_job(
        service=service,
        instance=instance,
        cluster=cluster,
        jobs_to_disable=enabled_old_jobs,
        jobs_to_delete=old_jobs[number_of_old_jobs_to_keep:],
        job_to_create=job_to_create,
        client=client,
    )
コード例 #4
0
def setup_job(service, instance, chronos_job_config, complete_job_config,
              client, cluster):
    job_id = complete_job_config['name']
    # Sort this initial list since other lists of jobs will come from it (with
    # their orders preserved by list comprehensions) and since we'll care about
    # ordering by recency when we go calculate jobs_to_delete.
    all_existing_jobs = chronos_tools.sort_jobs(
        chronos_tools.lookup_chronos_jobs(
            service=service,
            instance=instance,
            client=client,
        ))
    old_jobs = [job for job in all_existing_jobs if job["name"] != job_id]
    enabled_old_jobs = [job for job in old_jobs if not job["disabled"]]

    if all_existing_jobs == old_jobs:
        job_to_create = complete_job_config
    else:
        job_to_create = None

    number_of_old_jobs_to_keep = 5
    return bounce_chronos_job(
        service=service,
        instance=instance,
        cluster=cluster,
        jobs_to_disable=enabled_old_jobs,
        jobs_to_delete=old_jobs[number_of_old_jobs_to_keep:],
        job_to_create=job_to_create,
        client=client,
    )
コード例 #5
0
def build_service_job_mapping(client, configured_jobs):
    """
    :param client: A Chronos client used for getting the list of running jobs
    :param configured_jobs: A list of jobs configured in Paasta, i.e. jobs we
        expect to be able to find
    :returns: A dict of {(service, instance): [(chronos job, lastrunstate)]}
        where the chronos job is any with a matching (service, instance) in its
        name and disabled == False
    """
    service_job_mapping = {}
    for job in configured_jobs:
        # find all the jobs belonging to each service
        matching_jobs = chronos_tools.lookup_chronos_jobs(
            service=job[0],
            instance=job[1],
            client=client,
            include_disabled=True,
        )
        matching_jobs = chronos_tools.sort_jobs(matching_jobs)
        # Only consider the most recent one
        if len(matching_jobs) > 0:
            matching_jobs = [matching_jobs[0]]
        with_states = last_run_state_for_jobs(matching_jobs)
        service_job_mapping[job] = with_states
    return service_job_mapping
コード例 #6
0
ファイル: chronos_serviceinit.py プロジェクト: snafis/paasta
def perform_command(command, service, instance, cluster, verbose, soa_dir):
    """Performs a start/stop/restart/status on an instance
    :param command: String of start, stop, restart, status or scale
    :param service: service name
    :param instance: instance name, like "main" or "canary"
    :param cluster: cluster name
    :param verbose: int verbosity level
    :returns: A unix-style return code
    """
    chronos_config = chronos_tools.load_chronos_config()
    client = chronos_tools.get_chronos_client(chronos_config)
    job_config = chronos_tools.load_chronos_job_config(
        service=service,
        instance=instance,
        cluster=cluster,
        soa_dir=soa_dir,
    )
    complete_job_config = chronos_tools.create_complete_config(service,
                                                               instance,
                                                               soa_dir=soa_dir)
    job_id = complete_job_config["name"]

    if command == "start":
        start_chronos_job(
            service=service,
            instance=instance,
            job_id=job_id,
            client=client,
            cluster=cluster,
            job_config=job_config,
            complete_job_config=complete_job_config,
            emergency=True,
        )
    elif command == "stop":
        matching_jobs = chronos_tools.lookup_chronos_jobs(
            service=service,
            instance=instance,
            client=client,
            include_disabled=True,
            include_temporary=True)
        stop_chronos_job(service,
                         instance,
                         client,
                         cluster,
                         matching_jobs,
                         emergency=True)
    elif command == "restart":
        matching_jobs = chronos_tools.lookup_chronos_jobs(
            service=service,
            instance=instance,
            client=client,
            include_disabled=True,
        )
        restart_chronos_job(
            service=service,
            instance=instance,
            job_id=job_id,
            client=client,
            cluster=cluster,
            matching_jobs=matching_jobs,
            job_config=job_config,
            complete_job_config=complete_job_config,
            emergency=True,
        )
    elif command == "status":
        # Verbose mode shows previous versions.
        matching_jobs = chronos_tools.lookup_chronos_jobs(
            service=service,
            instance=instance,
            client=client,
            include_disabled=True,
        )
        sorted_matching_jobs = chronos_tools.sort_jobs(matching_jobs)
        job_config = chronos_tools.load_chronos_job_config(
            service=service,
            instance=instance,
            cluster=cluster,
            soa_dir=soa_dir,
        )
        paasta_print(
            status_chronos_jobs(client, sorted_matching_jobs, job_config,
                                verbose))
    else:
        # The command parser shouldn't have let us get this far...
        raise NotImplementedError("Command %s is not implemented!" % command)
    return 0
コード例 #7
0
ファイル: chronos_serviceinit.py プロジェクト: Yelp/paasta
def perform_command(command, service, instance, cluster, verbose, soa_dir):
    """Performs a start/stop/restart/status on an instance
    :param command: String of start, stop, restart, status or scale
    :param service: service name
    :param instance: instance name, like "main" or "canary"
    :param cluster: cluster name
    :param verbose: int verbosity level
    :returns: A unix-style return code
    """
    chronos_config = chronos_tools.load_chronos_config()
    client = chronos_tools.get_chronos_client(chronos_config)
    job_config = chronos_tools.load_chronos_job_config(
        service=service,
        instance=instance,
        cluster=cluster,
        soa_dir=soa_dir,
    )
    complete_job_config = chronos_tools.create_complete_config(service, instance, soa_dir=soa_dir)
    job_id = complete_job_config["name"]

    if command == "start":
        start_chronos_job(
            service=service,
            instance=instance,
            job_id=job_id,
            client=client,
            cluster=cluster,
            job_config=job_config,
            complete_job_config=complete_job_config,
            emergency=True,
        )
    elif command == "stop":
        matching_jobs = chronos_tools.lookup_chronos_jobs(
            service=service,
            instance=instance,
            client=client,
            include_disabled=True,
            include_temporary=True
        )
        stop_chronos_job(service, instance, client, cluster, matching_jobs, emergency=True)
    elif command == "restart":
        matching_jobs = chronos_tools.lookup_chronos_jobs(
            service=service,
            instance=instance,
            client=client,
            include_disabled=True,
        )
        restart_chronos_job(
            service=service,
            instance=instance,
            job_id=job_id,
            client=client,
            cluster=cluster,
            matching_jobs=matching_jobs,
            job_config=job_config,
            complete_job_config=complete_job_config,
            emergency=True,
        )
    elif command == "status":
        # Verbose mode shows previous versions.
        matching_jobs = chronos_tools.lookup_chronos_jobs(
            service=service,
            instance=instance,
            client=client,
            include_disabled=True,
        )
        sorted_matching_jobs = chronos_tools.sort_jobs(matching_jobs)
        job_config = chronos_tools.load_chronos_job_config(
            service=service,
            instance=instance,
            cluster=cluster,
            soa_dir=soa_dir,
        )
        paasta_print(status_chronos_jobs(client, sorted_matching_jobs, job_config, verbose))
    else:
        # The command parser shouldn't have let us get this far...
        raise NotImplementedError("Command %s is not implemented!" % command)
    return 0