def delete_app(app_id, client): """Deletes a marathon app safely and logs to notify the user that it happened""" log.warn("%s appears to be old; attempting to delete" % app_id) service, instance, _, __ = marathon_tools.deformat_job_id(app_id) try: with bounce_lib.bounce_lock_zookeeper(marathon_tools.compose_job_id(service, instance)): bounce_lib.delete_marathon_app(app_id, client) log_line = "Deleted stale marathon job that looks lost: %s" % app_id _log(service=service, component='deploy', level='event', cluster=load_system_paasta_config().get_cluster(), instance=instance, line=log_line) except IOError: log.debug("%s is being bounced, skipping" % app_id) except Exception: loglines = ['Exception raised during cleanup of service %s:' % service] loglines.extend(traceback.format_exc().rstrip().split("\n")) for logline in loglines: _log(service=service, component='deploy', level='debug', cluster=load_system_paasta_config().get_cluster(), instance=instance, line=logline) raise
def delete_app(app_id, client): """Deletes a marathon app safely and logs to notify the user that it happened""" log.warn("%s appears to be old; attempting to delete" % app_id) service, instance, _, __ = marathon_tools.deformat_job_id(app_id) try: with bounce_lib.bounce_lock_zookeeper( marathon_tools.compose_job_id(service, instance)): bounce_lib.delete_marathon_app(app_id, client) log_line = "Deleted stale marathon job that looks lost: %s" % app_id _log(service=service, component='deploy', level='event', cluster=load_system_paasta_config().get_cluster(), instance=instance, line=log_line) except IOError: log.debug("%s is being bounced, skipping" % app_id) except Exception: loglines = ['Exception raised during cleanup of service %s:' % service] loglines.extend(traceback.format_exc().rstrip().split("\n")) for logline in loglines: _log(service=service, component='deploy', level='debug', cluster=load_system_paasta_config().get_cluster(), instance=instance, line=logline) raise
def delete_app(app_id, client, soa_dir): """Deletes a marathon app safely and logs to notify the user that it happened""" log.warn("%s appears to be old; attempting to delete" % app_id) service, instance, _, __ = marathon_tools.deformat_job_id(app_id) cluster = load_system_paasta_config().get_cluster() try: short_app_id = marathon_tools.compose_job_id(service, instance) with bounce_lib.bounce_lock_zookeeper(short_app_id): bounce_lib.delete_marathon_app(app_id, client) send_event( service=service, check_name='check_marathon_services_replication.%s' % short_app_id, soa_dir=soa_dir, status=pysensu_yelp.Status.OK, overrides={}, output="This instance was removed and is no longer running", ) send_event( service=service, check_name='setup_marathon_job.%s' % short_app_id, soa_dir=soa_dir, status=pysensu_yelp.Status.OK, overrides={}, output="This instance was removed and is no longer running", ) send_event( service=service, check_name='paasta_bounce_progress.%s' % short_app_id, soa_dir=soa_dir, status=pysensu_yelp.Status.OK, overrides={}, output="This instance was removed and is no longer running", ) log_line = "Deleted stale marathon job that looks lost: %s" % app_id _log( service=service, component='deploy', level='event', cluster=cluster, instance=instance, line=log_line, ) except IOError: log.debug("%s is being bounced, skipping" % app_id) except Exception: loglines = ['Exception raised during cleanup of service %s:' % service] loglines.extend(traceback.format_exc().rstrip().split("\n")) for logline in loglines: _log( service=service, component='deploy', level='debug', cluster=load_system_paasta_config().get_cluster(), instance=instance, line=logline, ) raise
def test_delete_marathon_app(self): fake_client = mock.Mock(delete_app=mock.Mock()) fake_id = 'fake_deletion' with mock.patch( 'paasta_tools.bounce_lib.wait_for_delete', autospec=True, ) as wait_patch, mock.patch( 'time.sleep', autospec=True, ): bounce_lib.delete_marathon_app(fake_id, fake_client) fake_client.scale_app.assert_called_once_with(fake_id, instances=0, force=True) fake_client.delete_app.assert_called_once_with(fake_id, force=True) wait_patch.assert_called_once_with(fake_id, fake_client)
def test_delete_marathon_app(self): fake_client = mock.Mock(delete_app=mock.Mock()) fake_id = 'fake_deletion' with contextlib.nested( mock.patch('paasta_tools.bounce_lib.create_app_lock', spec=contextlib.contextmanager), mock.patch('paasta_tools.bounce_lib.wait_for_delete'), mock.patch('time.sleep')) as (lock_patch, wait_patch, sleep_patch): bounce_lib.delete_marathon_app(fake_id, fake_client) fake_client.scale_app.assert_called_once_with(fake_id, instances=0, force=True) fake_client.delete_app.assert_called_once_with(fake_id, force=True) sleep_patch.assert_called_once_with(1) wait_patch.assert_called_once_with(fake_id, fake_client) assert lock_patch.called
def test_delete_marathon_app(self): fake_client = mock.Mock(delete_app=mock.Mock()) fake_id = 'fake_deletion' with contextlib.nested( mock.patch('paasta_tools.bounce_lib.create_app_lock', spec=contextlib.contextmanager, autospec=None), mock.patch('paasta_tools.bounce_lib.wait_for_delete', autospec=True), mock.patch('time.sleep', autospec=True) ) as ( lock_patch, wait_patch, sleep_patch ): bounce_lib.delete_marathon_app(fake_id, fake_client) fake_client.scale_app.assert_called_once_with(fake_id, instances=0, force=True) fake_client.delete_app.assert_called_once_with(fake_id, force=True) sleep_patch.assert_called_once_with(1) wait_patch.assert_called_once_with(fake_id, fake_client) assert lock_patch.called