def test_get_old_live_draining_tasks_not_empty(self): fake_name = 'whoa' fake_instance = 'the_earth_is_tiny' fake_id = marathon_tools.format_job_id(fake_name, fake_instance) def fake_task(state): return mock.Mock(_drain_state=state) fake_apps = [ mock.Mock(id=fake_id, tasks=[fake_task('up'), fake_task('down')]), mock.Mock(id=('%s2' % fake_id), tasks=[fake_task('up'), fake_task('down')]) ] expected_live_tasks = { fake_apps[0].id: set([fake_apps[0].tasks[0]]), fake_apps[1].id: set([fake_apps[1].tasks[0]]), } expected_draining_tasks = { fake_apps[0].id: set([fake_apps[0].tasks[1]]), fake_apps[1].id: set([fake_apps[1].tasks[1]]), } fake_drain_method = mock.Mock(is_draining=lambda t: t._drain_state == 'down') actual = setup_marathon_job.get_old_live_draining_tasks(fake_apps, fake_drain_method) actual_live_tasks, actual_draining_tasks = actual assert actual_live_tasks == expected_live_tasks assert actual_draining_tasks == expected_draining_tasks
def test_get_old_live_draining_tasks_empty(self): fake_name = 'whoa' fake_instance = 'the_earth_is_tiny' fake_id = marathon_tools.format_job_id(fake_name, fake_instance) fake_apps = [ mock.Mock(id=fake_id, tasks=[]), mock.Mock(id=('%s2' % fake_id), tasks=[]) ] expected_live_tasks = { fake_apps[0].id: set(), fake_apps[1].id: set(), } expected_draining_tasks = { fake_apps[0].id: set(), fake_apps[1].id: set(), } fake_drain_method = mock.Mock(is_draining=lambda _: True) actual = setup_marathon_job.get_old_live_draining_tasks(fake_apps, fake_drain_method) actual_live_tasks, actual_draining_tasks = actual assert actual_live_tasks == expected_live_tasks assert actual_draining_tasks == expected_draining_tasks
def test_get_old_live_draining_tasks_not_empty(self): fake_name = "whoa" fake_instance = "the_earth_is_tiny" fake_id = marathon_tools.format_job_id(fake_name, fake_instance) def fake_task(state): return mock.Mock(_drain_state=state) fake_apps = [ mock.Mock(id=fake_id, tasks=[fake_task("up"), fake_task("down")]), mock.Mock(id=("%s2" % fake_id), tasks=[fake_task("up"), fake_task("down")]), ] expected_live_tasks = { fake_apps[0].id: set([fake_apps[0].tasks[0]]), fake_apps[1].id: set([fake_apps[1].tasks[0]]), } expected_draining_tasks = { fake_apps[0].id: set([fake_apps[0].tasks[1]]), fake_apps[1].id: set([fake_apps[1].tasks[1]]), } fake_drain_method = mock.Mock(is_draining=lambda t: t._drain_state == "down") actual = setup_marathon_job.get_old_live_draining_tasks(fake_apps, fake_drain_method) actual_live_tasks, actual_draining_tasks = actual assert actual_live_tasks == expected_live_tasks assert actual_draining_tasks == expected_draining_tasks
def test_get_old_live_draining_tasks_empty(self): fake_name = "whoa" fake_instance = "the_earth_is_tiny" fake_id = marathon_tools.format_job_id(fake_name, fake_instance) fake_apps = [mock.Mock(id=fake_id, tasks=[]), mock.Mock(id=("%s2" % fake_id), tasks=[])] expected_live_tasks = {fake_apps[0].id: set(), fake_apps[1].id: set()} expected_draining_tasks = {fake_apps[0].id: set(), fake_apps[1].id: set()} fake_drain_method = mock.Mock(is_draining=lambda _: True) actual = setup_marathon_job.get_old_live_draining_tasks(fake_apps, fake_drain_method) actual_live_tasks, actual_draining_tasks = actual assert actual_live_tasks == expected_live_tasks assert actual_draining_tasks == expected_draining_tasks
def main(): args = parse_args() full_appid = args.appname.lstrip('/') soa_dir = args.soa_dir marathon_config = marathon_tools.load_marathon_config() client = marathon_tools.get_marathon_client( url=marathon_config.get_url(), user=marathon_config.get_username(), passwd=marathon_config.get_password(), ) if not marathon_tools.is_app_id_running(app_id=full_appid, client=client): print("Couldn't find an app named {0}".format(full_appid)) sys.exit(1) service, instance, _, __ = (s.replace('--', '_') for s in decompose_job_id(full_appid)) complete_config = marathon_tools.create_complete_config( service, instance, marathon_config) cluster = load_system_paasta_config().get_cluster() service_instance_config = marathon_tools.load_marathon_service_config( service=service, instance=instance, cluster=cluster, soa_dir=soa_dir, ) nerve_ns = service_instance_config.get_nerve_namespace() service_namespace_config = marathon_tools.load_service_namespace_config( service=service, namespace=nerve_ns) drain_method = drain_lib.get_drain_method( service_instance_config.get_drain_method(service_namespace_config), service=service, instance=instance, nerve_ns=nerve_ns, drain_method_params=service_instance_config.get_drain_method_params( service_namespace_config), ) bounce_func = bounce_lib.get_bounce_method_func('down') while marathon_tools.is_app_id_running(app_id=full_appid, client=client): app_to_kill = client.get_app(full_appid) old_app_live_tasks, old_app_draining_tasks = get_old_live_draining_tasks( [app_to_kill], drain_method) do_bounce( bounce_func=bounce_func, drain_method=drain_method, config=complete_config, new_app_running='', happy_new_tasks=[], old_app_live_tasks=old_app_live_tasks, old_app_draining_tasks=old_app_draining_tasks, serviceinstance="{0}.{1}".format(service, instance), bounce_method='down', service=service, cluster=cluster, instance=instance, marathon_jobid=full_appid, client=client, soa_dir=soa_dir, ) print "Sleeping for 10 seconds to give the tasks time to drain" time.sleep(10) print("Sucessfully killed {0}".format(full_appid))
def main(): args = parse_args() full_appid = args.appname.lstrip('/') soa_dir = args.soa_dir marathon_config = marathon_tools.load_marathon_config() client = marathon_tools.get_marathon_client( url=marathon_config.get_url(), user=marathon_config.get_username(), passwd=marathon_config.get_password(), ) if not marathon_tools.is_app_id_running(app_id=full_appid, client=client): print("Couldn't find an app named {0}".format(full_appid)) sys.exit(1) service, instance, _, __ = (s.replace('--', '_') for s in decompose_job_id(full_appid)) complete_config = marathon_tools.create_complete_config(service, instance, marathon_config) cluster = load_system_paasta_config().get_cluster() service_instance_config = marathon_tools.load_marathon_service_config( service=service, instance=instance, cluster=cluster, soa_dir=soa_dir, ) nerve_ns = service_instance_config.get_nerve_namespace() service_namespace_config = marathon_tools.load_service_namespace_config(service=service, namespace=nerve_ns) drain_method = drain_lib.get_drain_method( service_instance_config.get_drain_method(service_namespace_config), service=service, instance=instance, nerve_ns=nerve_ns, drain_method_params=service_instance_config.get_drain_method_params(service_namespace_config), ) bounce_func = bounce_lib.get_bounce_method_func('down') while marathon_tools.is_app_id_running(app_id=full_appid, client=client): app_to_kill = client.get_app(full_appid) old_app_live_tasks, old_app_draining_tasks = get_old_live_draining_tasks([app_to_kill], drain_method) do_bounce( bounce_func=bounce_func, drain_method=drain_method, config=complete_config, new_app_running='', happy_new_tasks=[], old_app_live_tasks=old_app_live_tasks, old_app_draining_tasks=old_app_draining_tasks, serviceinstance="{0}.{1}".format(service, instance), bounce_method='down', service=service, cluster=cluster, instance=instance, marathon_jobid=full_appid, client=client, soa_dir=soa_dir, ) print "Sleeping for 10 seconds to give the tasks time to drain" time.sleep(10) print("Sucessfully killed {0}".format(full_appid))