def build_docker_image(task_id, base, file_path): task = Task.get(task_id) if not task: _log.error('Task (id=%s) not found, quit', task_id) return _log.info('Task<id=%s>: Start on host %s', task_id, task.host.ip) notifier = TaskNotifier(task) app = task.app host = task.host version = task.version try: repo, tag = base.split(':', 1) repo = repo if repo.startswith('eru/') else 'eru/' + repo.strip('/') _log.info('Task<id=%s>: Pull base image (base=%s)', task_id, base) notifier.store_and_broadcast(dockerjob.pull_image(host, repo, tag)) _log.info('Task<id=%s>: Build image (base=%s)', task_id, base) notifier.store_and_broadcast(dockerjob.build_image(host, version, base, file_path)) _log.info('Task<id=%s>: Push image (base=%s)', task_id, base) last_line = notifier.store_and_broadcast(dockerjob.push_image(host, version)) dockerjob.remove_image(version, host) except Exception, e: task.finish(consts.TASK_FAILED) task.reason = str(e.message) notifier.pub_fail() _log.error('Task<id=%s>, exception', task_id) _log.exception(e)
def remove_containers(task_id, cids, rmi=False): current_flask.logger.info('Task<id=%s>: Started', task_id) task = Task.get(task_id) if not task: current_flask.logger.error('Task (id=%s) not found, quit', task_id) return notifier = TaskNotifier(task) containers = Container.get_multi(cids) container_ids = [c.container_id for c in containers] host = task.host try: flags = {'eru:agent:%s:container:flag' % cid: 1 for cid in container_ids} rds.mset(**flags) for c in containers: remove_container_backends(c) current_flask.logger.info('Task<id=%s>: Container (cid=%s) backends removed', task_id, c.container_id[:7]) appnames = {c.appname for c in containers} publish_to_service_discovery(*appnames) dockerjob.remove_host_containers(containers, host) current_flask.logger.info('Task<id=%s>: Containers (cids=%s) removed', task_id, cids) if rmi: dockerjob.remove_image(task.version, host) except Exception, e: task.finish_with_result(consts.TASK_FAILED) notifier.pub_fail() current_flask.logger.error('Task<id=%s>: Exception (e=%s)', task_id, e)
def build_docker_image(task_id, base, file_path): task = Task.get(task_id) if not task: _log.error('Task (id=%s) not found, quit', task_id) return _log.info('Task<id=%s>: Start on host %s', task_id, task.host.ip) notifier = TaskNotifier(task) app = task.app host = task.host version = task.version try: repo, tag = base.split(':', 1) repo = repo if repo.startswith('eru/') else 'eru/' + repo.strip('/') _log.info('Task<id=%s>: Pull base image (base=%s)', task_id, base) notifier.store_and_broadcast(dockerjob.pull_image(host, repo, tag)) _log.info('Task<id=%s>: Build image (base=%s)', task_id, base) notifier.store_and_broadcast( dockerjob.build_image(host, version, base, file_path)) _log.info('Task<id=%s>: Push image (base=%s)', task_id, base) last_line = notifier.store_and_broadcast( dockerjob.push_image(host, version)) dockerjob.remove_image(version, host) except Exception, e: task.finish(consts.TASK_FAILED) task.reason = str(e.message) notifier.pub_fail() _log.error('Task<id=%s>, exception', task_id) _log.exception(e)
def remove_containers(task_id, cids, rmi=False): task = Task.get(task_id) if not task: _log.error('Task (id=%s) not found, quit', task_id) return _log.info('Task<id=%s>: Start on host %s', task_id, task.host.ip) notifier = TaskNotifier(task) containers = Container.get_multi(cids) if not containers: _log.error('Task (id=%s) no container found, quit') return host = containers[0].host for c in containers: c.in_removal = 1 container_ids = [c.container_id for c in containers if c] try: set_flag_for_agent(container_ids) for c in containers: remove_container_backends(c) _log.info('Task<id=%s>: Container (cid=%s) backends removed', task_id, c.short_id) appnames = {c.appname for c in containers} publish_to_service_discovery(*appnames) time.sleep(3) dockerjob.remove_host_containers(containers, host) _log.info('Task<id=%s>: Containers (cids=%s) removed', task_id, cids) if rmi: try: dockerjob.remove_image(task.version, host) except Exception as e: _log.error('Task<id=%s>, fail to remove image', task_id, e) except Exception as e: task.finish(consts.TASK_FAILED) task.reason = str(e.message) notifier.pub_fail() _log.error('Task<id=%s> exception', task_id) _log.exception(e) else: for c in containers: c.delete() task.finish(consts.TASK_SUCCESS) task.reason = 'ok' notifier.pub_success() remove_container_for_agent(host, container_ids) remove_flag_for_agent(container_ids) _log.info('Task<id=%s>: Done', task_id)
def remove_containers(task_id, cids, rmi=False): task = Task.get(task_id) if not task: current_flask.logger.error('Task (id=%s) not found, quit', task_id) return current_flask.logger.info('Task<id=%s>: Start on host %s' % (task_id, task.host.ip)) notifier = TaskNotifier(task) containers = Container.get_multi(cids) container_ids = [c.container_id for c in containers if c] host = task.host version = task.version try: # flag, don't report these flags = {'eru:agent:%s:container:flag' % cid: 1 for cid in container_ids} rds.mset(**flags) for c in containers: remove_container_backends(c) current_flask.logger.info('Task<id=%s>: Container (cid=%s) backends removed', task_id, c.container_id[:7]) appnames = {c.appname for c in containers} publish_to_service_discovery(*appnames) time.sleep(3) dockerjob.remove_host_containers(containers, host) current_flask.logger.info('Task<id=%s>: Containers (cids=%s) removed', task_id, cids) if rmi: try: dockerjob.remove_image(task.version, host) except Exception as e: current_flask.logger.error('Task<id=%s>: Exception (e=%s), fail to remove image', task_id, e) except Exception as e: task.finish_with_result(consts.TASK_FAILED) notifier.pub_fail() current_flask.logger.error('Task<id=%s>: Exception (e=%s)', task_id, e) else: for c in containers: c.delete() task.finish_with_result(consts.TASK_SUCCESS) notifier.pub_success() if container_ids: rds.hdel('eru:agent:%s:containers:meta' % host.name, *container_ids) rds.delete(*flags.keys()) current_flask.logger.info('Task<id=%s>: Done', task_id) if not version.containers.count(): falcon_remove_alarms(version)
def build_docker_image(task_id, base): task = Task.get(task_id) notifier = TaskNotifier(task) try: repo, tag = base.split(':', 1) notifier.store_and_broadcast(dockerjob.pull_image(task.host, repo, tag)) notifier.store_and_broadcast(dockerjob.build_image(task.host, task.version, base)) notifier.store_and_broadcast(dockerjob.push_image(task.host, task.version)) try: dockerjob.remove_image(task.version, task.host) except: pass except Exception, e: logger.exception(e) task.finish_with_result(code.TASK_FAILED) notifier.pub_fail()
def remove_containers(task_id, cids, rmi): task = Task.get(task_id) notifier = TaskNotifier(task) containers = Container.get_multi(cids) container_ids = [c.container_id for c in containers] host = task.host try: flags = {'eru:agent:%s:container:flag' % cid: 1 for cid in container_ids} rds.mset(**flags) for c in containers: remove_container_backends(c) appnames = {c.appname for c in containers} publish_to_service_discovery(*appnames) dockerjob.remove_host_containers(containers, host) if rmi: dockerjob.remove_image(task.version, host) except Exception, e: logger.exception(e) task.finish_with_result(code.TASK_FAILED) notifier.pub_fail()
def build_docker_image(task_id, base): current_flask.logger.info('Task<id=%s>: Started', task_id) task = Task.get(task_id) if not task: current_flask.logger.error('Task (id=%s) not found, quit', task_id) return notifier = TaskNotifier(task) try: repo, tag = base.split(':', 1) current_flask.logger.info('Task<id=%s>: Pull base image (base=%s)', task_id, base) notifier.store_and_broadcast(dockerjob.pull_image(task.host, repo, tag)) current_flask.logger.info('Task<id=%s>: Build image (base=%s)', task_id, base) notifier.store_and_broadcast(dockerjob.build_image(task.host, task.version, base)) current_flask.logger.info('Task<id=%s>: Push image (base=%s)', task_id, base) notifier.store_and_broadcast(dockerjob.push_image(task.host, task.version)) dockerjob.remove_image(task.version, task.host) except Exception, e: task.finish_with_result(consts.TASK_FAILED) notifier.pub_fail() current_flask.logger.error('Task<id=%s>: Exception (e=%s)', task_id, e)