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
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
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
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)
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
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)
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