def run(approot, runtime, container_dir): """Runs container given a container dir.""" # Intercept SIGTERM from s6 supervisor, so that initialization is not # left in broken state. with lc.LogContext(_LOGGER, os.path.basename(container_dir), lc.ContainerAdapter) as log: terminated = utils.make_signal_flag(utils.term_signal()) tm_env = None try: log.info('run %r %r', approot, container_dir) tm_env = appenv.AppEnvironment(approot) app_runtime.get_runtime(runtime, tm_env, container_dir).run(terminated) # If we reach here, the application was terminated. except Exception as exc: # pylint: disable=W0703 if not terminated: log.critical('Failed to start, app will be aborted.', exc_info=True) app_abort.flag_aborted(tm_env, container_dir, exc) else: log.logger.info('Exception while handling term, ignore.', exc_info=True)
def invoke(self, runtime, instance, runtime_param=None): """Actually do the cleanup of the instance. """ cleanup_link = os.path.join(self.tm_env.cleanup_dir, instance) container_dir = os.readlink(cleanup_link) _LOGGER.info('Cleanup: %s => %s', instance, container_dir) if os.path.exists(container_dir): with lc.LogContext(_LOGGER, os.path.basename(container_dir), lc.ContainerAdapter) as log: try: app_runtime.get_runtime(runtime, self.tm_env, container_dir, runtime_param).finish() except Exception: # pylint: disable=W0703 if not os.path.exists(container_dir): log.info('Container dir does not exist: %s', container_dir) else: log.exception('Fatal error running finish %r.', container_dir) raise else: _LOGGER.info('Container dir does not exist: %r', container_dir) fs.rm_safe(cleanup_link)
def finish(approot, runtime, container_dir): """Finish treadmill application on the node.""" with lc.LogContext(_LOGGER, os.path.basename(container_dir), lc.ContainerAdapter) as log: log.info('finish (approot %s)', approot) tm_env = appenv.AppEnvironment(approot) app_runtime.get_runtime(runtime, tm_env, container_dir).finish()
def finish(approot, runtime, container_dir, runtime_param): """Finish treadmill application on the node.""" # Run with finish context as finish runs in cleanup. with lc.LogContext(_LOGGER, os.path.basename(container_dir), lc.ContainerAdapter) as log: log.info('finish (approot %s)', approot) tm_env = appenv.AppEnvironment(approot) param = utils.equals_list2dict(runtime_param or []) app_runtime.get_runtime( runtime, tm_env, container_dir, param ).finish()
def run(approot, runtime, container_dir): """Runs container given a container dir.""" # Make sure container_dir is a fully resolved path. container_dir = os.path.realpath(container_dir) _LOGGER.info('run %r %r', approot, container_dir) tm_env = appenv.AppEnvironment(approot) try: app_runtime.get_runtime(runtime, tm_env, container_dir).run() except Exception as exc: # pylint: disable=W0703 _LOGGER.exception('Failed to start, app will be aborted.') app_abort.flag_aborted(tm_env, container_dir, exc)
def _shutdown_container(tm_env, instance_id): """Shutdown a container. """ container_dir = os.path.join(tm_env.apps_dir, instance_id) utils.touch(os.path.join(container_dir, 'data', 'oom')) linux_runtime = runtime.get_runtime('linux', tm_env, container_dir) linux_runtime.kill()
def invoke(self, runtime, instance, runtime_param=None): """Actually do the cleanup of the instance. """ cleanup_link = os.path.join(self.tm_env.cleanup_dir, instance) try: container_dir = os.readlink(cleanup_link) except OSError as err: if err.errno == errno.ENOENT: _LOGGER.info('Cleanup link does not exist: %r', cleanup_link) return raise _LOGGER.info('Cleanup: %s => %s', instance, container_dir) if os.path.exists(container_dir): with lc.LogContext(_LOGGER, os.path.basename(container_dir), lc.ContainerAdapter) as log: try: app_runtime.get_runtime(runtime, self.tm_env, container_dir, runtime_param).finish() except supervisor.InvalidServiceDirError: log.info('Container dir is invalid, removing: %s', container_dir) shutil.rmtree(container_dir) except Exception: # pylint: disable=W0703 if not os.path.exists(container_dir): log.info('Container dir does not exist: %s', container_dir) else: log.exception('Fatal error running finish %r.', container_dir) raise else: _LOGGER.info('Container dir does not exist: %r', container_dir) fs.rm_safe(cleanup_link)
def run(approot, runtime, container_dir, runtime_param=None): """Runs container given a container dir.""" # Make sure container_dir is a fully resolved path. container_dir = os.path.realpath(container_dir) service = supervisor.open_service(container_dir) _LOGGER.info('run %r %r', approot, container_dir) tm_env = appenv.AppEnvironment(approot) param = utils.equals_list2dict(runtime_param or []) try: app_runtime.get_runtime( runtime, tm_env, service, param ).run() except exc.ContainerSetupError as err: _LOGGER.exception('Failed to start, app will be aborted.') app_abort.flag_aborted(service.data_dir, why=err.reason, payload=traceback.format_exc()) except Exception as err: # pylint: disable=W0703 _LOGGER.exception('Failed to start, app will be aborted.') app_abort.flag_aborted(service.data_dir, why=app_abort.AbortedReason.UNKNOWN, payload=traceback.format_exc())