def add_one_container(task): """ 添加一个容器 :return: boolean, 容器信息 """ try: app_obj = AppModel.select().where(AppModel.id == task.app_id).get() except: return False, None api_url, api_host = get_a_api_url() if api_url is None: return False, {} d = api_url api_url += "build" data = { "code_address": urllib.request.quote(app_obj.code_address), "memory": app_obj.memory, "image_name": app_obj.env } r = request_api(api_url, data) if r.status_code != 200: return False, {} obj = json.loads(r.text) if obj['code'] != 0: return False, {} return True, {"r": obj, "host": api_host, "api_url": d}
def init(): """ 入口函数 :return: """ apps = AppModel.select() for app in apps: handle_app(app)
def get_apps(): """ 获取用户所有应用 :return: dict """ user_id = get_login_user_id() apps = AppModel.select().where(AppModel.user_id == user_id) data = map(AppModel.get_dict_from_model_obj, apps) return json.dumps(list(data))
def get_apps(): """ 获取用户所有应用 :return: dict """ user_id = get_login_user_id() apps = AppModel.select().where(AppModel.user_id==user_id) data = map(AppModel.get_dict_from_model_obj, apps) return json.dumps(list(data))
def deployment_app(): """ 重新部署应用 :return: """ user_id = get_login_user_id() app_id = request.forms.app_id # 防止越权操作 AppModel.select().where(AppModel.user_id == user_id).get() if TaskQueueModel.select().where(TaskQueueModel.app_id == app_id, TaskQueueModel.command_code == 3).count(): return {"code": -1} obj = TaskQueueModel(app_id=app_id, user_id=user_id, command_code=3, command_content='{}', create_time=datetime.datetime.now()) obj.save() return {"code": 0}
def build_nginx_config(app_id): """ 生成应用nginx配置文件 :param app_id: :return: """ nginx_str = """ upstream site%d { %s } server{ listen %s:%d; index index.html index.htm; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://site%d; } } """ try: app = AppModel.select().where(AppModel.id == app_id).get() except: return False app_lists = "" containers = AppContainModel.select().where( AppContainModel.app_id == app_id) for obj in containers: app_lists = app_lists + ("server %s:%d;\n" % (obj.host, obj.port)) config_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) config_path = config_path + "/data/nginx_config/" + str(app_id) + ".conf" if os.path.exists(config_path): os.remove(config_path) if app_lists == "": return False config_str = nginx_str % (app_id, app_lists, app.app_host, app.app_port, app_id) fp = open(config_path, "w") fp.write(config_str) fp.close() subprocess.getstatusoutput("nginx -s reload")
def build_nginx_config(app_id): """ 生成应用nginx配置文件 :param app_id: :return: """ nginx_str = """ upstream site%d { %s } server{ listen %s:%d; index index.html index.htm; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://site%d; } } """ try: app = AppModel.select().where(AppModel.id == app_id).get() except: return False app_lists = "" containers = AppContainModel.select().where(AppContainModel.app_id == app_id) for obj in containers: app_lists = app_lists + ("server %s:%d;\n" % (obj.host, obj.port)) config_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) config_path = config_path + "/data/nginx_config/" + str(app_id) + ".conf" if os.path.exists(config_path): os.remove(config_path) if app_lists == "": return False config_str = nginx_str % (app_id, app_lists, app.app_host, app.app_port, app_id) fp = open(config_path, "w") fp.write(config_str) fp.close() subprocess.getstatusoutput("nginx -s reload")