Пример #1
0
def test_execute_chronos_rerun_on_remote_master(test_case):
    fake_system_paasta_config = SystemPaastaConfig({}, '/fake/config')

    with contextlib.nested(
        patch('paasta_tools.cli.utils.calculate_remote_masters', autospec=True),
        patch('paasta_tools.cli.utils.find_connectable_master', autospec=True),
        patch('paasta_tools.cli.utils.run_chronos_rerun', autospec=True),
    ) as (
        mock_calculate_remote_masters,
        mock_find_connectable_master,
        mock_run_chronos_rerun,
    ):
        (mock_calculate_remote_masters.return_value,
         mock_find_connectable_master.return_value,
         mock_run_chronos_rerun.return_value) = test_case

        outcome = utils.execute_chronos_rerun_on_remote_master(
            'service',
            'instance',
            'cluster',
            fake_system_paasta_config,
            verbose=1,
        )
        # Always return an (rc, output) tuple
        assert type(outcome) == tuple and \
            len(outcome) == 2 and \
            type(outcome[0]) == int and \
            type(outcome[1]) == str
        assert bool(mock_find_connectable_master.return_value) == mock_find_connectable_master.called
        assert bool(mock_run_chronos_rerun.return_value) == mock_run_chronos_rerun.called
Пример #2
0
def test_execute_chronos_rerun_on_remote_master(test_case,
                                                system_paasta_config):

    with patch(
            'paasta_tools.cli.utils.calculate_remote_masters',
            autospec=True,
    ) as mock_calculate_remote_masters, patch(
            'paasta_tools.cli.utils.find_connectable_master',
            autospec=True,
    ) as mock_find_connectable_master, patch(
            'paasta_tools.cli.utils.run_chronos_rerun',
            autospec=True,
    ) as mock_run_chronos_rerun:
        (
            mock_calculate_remote_masters.return_value,
            mock_find_connectable_master.return_value,
            mock_run_chronos_rerun.return_value,
        ) = test_case

        outcome = utils.execute_chronos_rerun_on_remote_master(
            'service',
            'instance',
            'cluster',
            system_paasta_config,
            verbose=1,
        )
        # Always return an (rc, output) tuple
        assert type(outcome) == tuple and \
            len(outcome) == 2 and \
            type(outcome[0]) == int and \
            isinstance(outcome[1], str)
        assert bool(mock_find_connectable_master.return_value
                    ) == mock_find_connectable_master.called
        assert bool(mock_run_chronos_rerun.return_value
                    ) == mock_run_chronos_rerun.called
Пример #3
0
def test_execute_chronos_rerun_on_remote_master(test_case):
    fake_system_paasta_config = SystemPaastaConfig({}, '/fake/config')

    with contextlib.nested(
        patch('paasta_tools.cli.utils.calculate_remote_masters', autospec=True),
        patch('paasta_tools.cli.utils.find_connectable_master', autospec=True),
        patch('paasta_tools.cli.utils.run_chronos_rerun', autospec=True),
    ) as (
        mock_calculate_remote_masters,
        mock_find_connectable_master,
        mock_run_chronos_rerun,
    ):
        (mock_calculate_remote_masters.return_value,
         mock_find_connectable_master.return_value,
         mock_run_chronos_rerun.return_value) = test_case

        outcome = utils.execute_chronos_rerun_on_remote_master(
            'service',
            'instance',
            'cluster',
            fake_system_paasta_config,
            verbose=1,
        )
        # Always return an (rc, output) tuple
        assert type(outcome) == tuple and \
            len(outcome) == 2 and \
            type(outcome[0]) == int and \
            type(outcome[1]) == str
        assert bool(mock_find_connectable_master.return_value) == mock_find_connectable_master.called
        assert bool(mock_run_chronos_rerun.return_value) == mock_run_chronos_rerun.called
Пример #4
0
def test_execute_chronos_rerun_on_remote_master(test_case,
                                                system_paasta_config):

    with patch("paasta_tools.cli.utils.calculate_remote_masters",
               autospec=True) as mock_calculate_remote_masters, patch(
                   "paasta_tools.cli.utils.find_connectable_master",
                   autospec=True) as mock_find_connectable_master, patch(
                       "paasta_tools.cli.utils.run_chronos_rerun",
                       autospec=True) as mock_run_chronos_rerun:
        (
            mock_calculate_remote_masters.return_value,
            mock_find_connectable_master.return_value,
            mock_run_chronos_rerun.return_value,
        ) = test_case

        outcome = utils.execute_chronos_rerun_on_remote_master(
            "service", "instance", "cluster", system_paasta_config, verbose=1)
        # Always return an (rc, output) tuple
        assert (type(outcome) == tuple and len(outcome) == 2
                and type(outcome[0]) == int and isinstance(outcome[1], str))
        assert (bool(mock_find_connectable_master.return_value) ==
                mock_find_connectable_master.called)
        assert (bool(mock_run_chronos_rerun.return_value) ==
                mock_run_chronos_rerun.called)
Пример #5
0
def paasta_rerun(args):
    """Reruns a Chronos job.
    :param args: argparse.Namespace obj created from sys.args by cli"""
    system_paasta_config = load_system_paasta_config()
    soa_dir = args.soa_dir
    service = figure_out_service_name(
        args, soa_dir)  # exit with an error if the service doesn't exist
    if args.execution_date:
        execution_date = args.execution_date
    else:
        execution_date = None

    all_clusters = list_clusters(soa_dir=soa_dir)
    actual_deployments = get_actual_deployments(
        service, soa_dir)  # cluster.instance: sha
    if actual_deployments:
        deploy_pipeline = list(get_planned_deployments(
            service, soa_dir))  # cluster.instance
        deployed_clusters = list_deployed_clusters(deploy_pipeline,
                                                   actual_deployments)
        deployed_cluster_instance = _get_cluster_instance(
            actual_deployments.keys())

    if args.clusters is not None:
        clusters = args.clusters.split(",")
    else:
        clusters = deployed_clusters

    for cluster in clusters:
        print "cluster: %s" % cluster

        if cluster not in all_clusters:
            print "  Warning: \"%s\" does not look like a valid cluster." % cluster
            continue
        if cluster not in deployed_clusters:
            print "  Warning: service \"%s\" has not been deployed to \"%s\" yet." % (
                service, cluster)
            continue
        if not deployed_cluster_instance[cluster].get(args.instance, False):
            print(
                "  Warning: instance \"%s\" is either invalid "
                "or has not been deployed to \"%s\" yet." %
                (args.instance, cluster))
            continue

        try:
            chronos_job_config = chronos_tools.load_chronos_job_config(
                service,
                args.instance,
                cluster,
                load_deployments=False,
                soa_dir=soa_dir)
            if chronos_tools.uses_time_variables(
                    chronos_job_config) and execution_date is None:
                print(
                    "  Warning: \"%s\" uses time variables interpolation, "
                    "please supply a `--execution_date` argument." %
                    args.instance)
                continue
        except chronos_tools.UnknownChronosJobError as e:
            print "  Warning: %s" % e.message
            continue
        if execution_date is None:
            execution_date = _get_default_execution_date()

        rc, output = execute_chronos_rerun_on_remote_master(
            service=service,
            instancename=args.instance,
            cluster=cluster,
            verbose=args.verbose,
            execution_date=execution_date.strftime(
                chronos_tools.EXECUTION_DATE_FORMAT),
            system_paasta_config=system_paasta_config,
        )
        if rc == 0:
            print PaastaColors.green('  successfully created job')
        else:
            print PaastaColors.red('  error')
            print output
Пример #6
0
def paasta_rerun(args):
    """Reruns a Chronos job.
    :param args: argparse.Namespace obj created from sys.args by cli"""
    system_paasta_config = load_system_paasta_config()
    soa_dir = args.soa_dir
    service = figure_out_service_name(
        args, soa_dir)  # exit with an error if the service doesn't exist
    if args.execution_date:
        execution_date = args.execution_date
    else:
        execution_date = None

    all_clusters = list_clusters(soa_dir=soa_dir)
    actual_deployments = get_actual_deployments(
        service, soa_dir)  # cluster.instance: sha
    if actual_deployments:
        deploy_pipeline = list(get_planned_deployments(
            service, soa_dir))  # cluster.instance
        deployed_clusters = list_deployed_clusters(deploy_pipeline,
                                                   actual_deployments)
        deployed_cluster_instance = _get_cluster_instance(
            actual_deployments.keys())

    if args.clusters is not None:
        clusters = args.clusters.split(",")
    else:
        clusters = deployed_clusters

    for cluster in clusters:
        paasta_print("cluster: %s" % cluster)

        if cluster not in all_clusters:
            paasta_print(
                "  Warning: \"%s\" does not look like a valid cluster." %
                cluster)
            continue
        if cluster not in deployed_clusters:
            paasta_print(
                f"  Warning: service \"{service}\" has not been deployed to \"{cluster}\" yet."
            )
            continue
        if not deployed_cluster_instance[cluster].get(args.instance, False):
            paasta_print(("  Warning: instance \"%s\" is either invalid "
                          "or has not been deployed to \"%s\" yet." %
                          (args.instance, cluster)))
            continue

        try:
            chronos_job_config = chronos_tools.load_chronos_job_config(
                service,
                args.instance,
                cluster,
                load_deployments=False,
                soa_dir=soa_dir,
            )
            if chronos_tools.uses_time_variables(
                    chronos_job_config) and execution_date is None:
                paasta_print(
                    ("  Warning: \"%s\" uses time variables interpolation, "
                     "please supply a `--execution_date` argument." %
                     args.instance))
                continue
        except NoConfigurationForServiceError as e:
            paasta_print("  Warning: %s" % e)
            continue
        if execution_date is None:
            execution_date = _get_default_execution_date()

        related_job_configs = get_related_jobs_configs(cluster, service,
                                                       args.instance)

        if not args.rerun_type and len(related_job_configs) > 1:
            instance_names = sorted([
                f'- {srv}{chronos_tools.INTERNAL_SPACER}{inst}'
                for srv, inst in related_job_configs
                if srv != service or inst != args.instance
            ])
            paasta_print(PaastaColors.red('  error'))
            paasta_print(
                'Instance {instance} has dependency relations with the following jobs:\n'
                '{relations}\n'
                '\n'
                'Please specify the rerun policy via --rerun-type argument'.
                format(
                    instance=args.instance,
                    relations='\n'.join(instance_names),
                ), )
            return

        rc, output = execute_chronos_rerun_on_remote_master(
            service=service,
            instancename=args.instance,
            cluster=cluster,
            verbose=args.verbose,
            execution_date=execution_date.strftime(
                chronos_tools.EXECUTION_DATE_FORMAT),
            system_paasta_config=system_paasta_config,
            run_all_related_jobs=args.rerun_type == 'graph',
            force_disabled=args.force_disabled,
        )
        if rc == 0:
            paasta_print(PaastaColors.green('  successfully created job'))
        else:
            paasta_print(PaastaColors.red('  error'))
            paasta_print(output)
Пример #7
0
def paasta_rerun(args):
    """Reruns a Chronos job.
    :param args: argparse.Namespace obj created from sys.args by cli"""
    soa_dir = args.soa_dir
    service = figure_out_service_name(args, soa_dir)  # exit with an error if the service doesn't exist
    if args.execution_date:
        execution_date = args.execution_date
    else:
        execution_date = None

    all_clusters = list_clusters(soa_dir=soa_dir)
    actual_deployments = get_actual_deployments(service, soa_dir)  # cluster.instance: sha
    if actual_deployments:
        deploy_pipeline = list(get_planned_deployments(service, soa_dir))  # cluster.instance
        deployed_clusters = list_deployed_clusters(deploy_pipeline, actual_deployments)
        deployed_cluster_instance = _get_cluster_instance(actual_deployments.keys())

    if args.clusters is not None:
        clusters = args.clusters.split(",")
    else:
        clusters = deployed_clusters

    for cluster in clusters:
        print "cluster: %s" % cluster

        if cluster not in all_clusters:
            print "  Warning: \"%s\" does not look like a valid cluster." % cluster
            continue
        if cluster not in deployed_clusters:
            print "  Warning: service \"%s\" has not been deployed to \"%s\" yet." % (service, cluster)
            continue
        if not deployed_cluster_instance[cluster].get(args.instance, False):
            print ("  Warning: instance \"%s\" is either invalid "
                   "or has not been deployed to \"%s\" yet." % (args.instance, cluster))
            continue

        try:
            chronos_job_config = chronos_tools.load_chronos_job_config(
                service, args.instance, cluster, load_deployments=False, soa_dir=soa_dir)
            if chronos_tools.uses_time_variables(chronos_job_config) and execution_date is None:
                print ("  Warning: \"%s\" uses time variables interpolation, "
                       "please supply a `--execution_date` argument." % args.instance)
                continue
        except chronos_tools.UnknownChronosJobError as e:
            print "  Warning: %s" % e.message
            continue
        if execution_date is None:
            execution_date = _get_default_execution_date()

        rc, output = execute_chronos_rerun_on_remote_master(
            service=service,
            instancename=args.instance,
            cluster=cluster,
            verbose=args.verbose,
            execution_date=execution_date.strftime(chronos_tools.EXECUTION_DATE_FORMAT)
        )
        if rc == 0:
            print PaastaColors.green('  successfully created job')
        else:
            print PaastaColors.red('  error')
            print output