def delete(self, request, *args, **kwargs): """ 应用数据删除 --- parameters: - name: tenantName description: 团队名称 required: true type: string paramType: path - name: group_id description: 组ID required: true type: string paramType: path - name: new_group_id description: 组ID required: true type: string paramType: query """ try: group_id = int(kwargs.get("group_id", None)) if not group_id: return Response(general_message(400, "group id is null", "请确认需要删除的组"), status=400) new_group_id = request.data.get("new_group_id", None) if not new_group_id: return Response(general_message(400, "new group id is null", "请确认新恢复的组"), status=400) if group_id == new_group_id: return Response(general_message(200, "success", "恢复到当前组无需删除"), status=200) group = group_repo.get_group_by_id(group_id) if not group: return Response(general_message(400, "group is delete", "该备份组已删除"), status=400) if group.is_default: return Response(general_message(400, "default app", "默认应用不允许删除"), status=400) new_group = group_repo.get_group_by_id(new_group_id) if not new_group: return Response( general_message(400, "new group not exist", "组ID {0} 不存在".format(new_group_id)), status=400) services = group_service.get_group_services(group_id) for service in services: try: app_manage_service.truncate_service(self.tenant, service) except Exception as le: logger.exception(le) group.delete() result = general_message(200, "success", "操作成功") except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=result["code"])
def __delete_created_compose_info(self, tenant, compose_id): services = self.get_compose_services(compose_id) for s in services: # 彻底删除组件 code, msg = app_manage_service.truncate_service(tenant, s) if code != 200: logger.error("delete compose services error {0}".format(msg)) compose_relation_repo.delete_compose_service_relation_by_compose_id(compose_id)
def install_market_apps_directly(self, user, tenant, region_name, app_service_json_str, service_origin): app_templates = json.loads(app_service_json_str) apps = app_templates["apps"] service_list = [] service_key_dep_key_map = {} key_service_map = {} tenant_service_group = None new_group = None try: # 生成分类 group_name = self.__generator_group_name( app_templates["group_name"]) new_group = group_repo.add_group(tenant.tenant_id, region_name, group_name) group_id = new_group.ID tenant_service_group = self.__generate_tenant_service_group( region_name, tenant.tenant_id, new_group.ID, app_templates["group_key"], app_templates["group_version"], app_templates["group_name"]) for app in apps: ts = self.__init_market_app(tenant, region_name, user, app, tenant_service_group.ID, service_origin) group_service.add_service_to_group(tenant, region_name, group_id, ts.service_id) # 先保存env,再保存端口,因为端口需要处理env code, msg = self.__save_env( tenant, ts, app["service_env_map_list"], app["service_connect_info_map_list"]) if code != 200: raise Exception(msg) code, msg = self.__save_port(tenant, ts, app["port_map_list"]) if code != 200: raise Exception(msg) code, msg = self.__save_volume(tenant, ts, app["service_volume_map_list"]) if code != 200: raise Exception(msg) # 保存应用探针信息 probe_infos = app.get("probes", None) if probe_infos: for prob_data in probe_infos: code, msg, probe = probe_service.add_service_probe( tenant, ts, prob_data) if code != 200: logger.exception(msg) self.__save_extend_info(ts, app["extend_method_map"]) dep_apps_key = app.get("dep_service_map_list", None) if dep_apps_key: service_key_dep_key_map[ts.service_key] = dep_apps_key key_service_map[ts.service_key] = ts service_list.append(ts) # 保存依赖关系,需要等应用都创建完成才能使用 self.__save_service_deps(tenant, service_key_dep_key_map, key_service_map) # 数据中心创建应用 for service in service_list: new_service = app_service.create_region_service( tenant, service, user.nick_name) logger.debug("build service ===> {0} success".format( service.service_cname)) # 为服务添加探针 self.__create_service_probe(tenant, new_service) # 添加服务有无状态标签 label_service.update_service_state_label(tenant, new_service) return True, "success", tenant_service_group, service_list except Exception as e: logger.exception(e) # 回滚数据 if tenant_service_group: tenant_service_group_repo.delete_tenant_service_group_by_pk( tenant_service_group.ID) if new_group: group_repo.delete_group_by_pk(new_group.ID) for service in service_list: try: app_manage_service.truncate_service(tenant, service) except Exception as delete_error: logger.exception(delete_error) return False, "create tenant_services from market directly failed !", None, service_list
def install_service(self, tenant, region, user, group_id, market_app): service_list = [] service_key_dep_key_map = {} key_service_map = {} tenant_service_group = None service_probe_map = {} try: app_templates = json.loads(market_app.app_template) apps = app_templates["apps"] tenant_service_group = self.__create_tenant_service_group( region, tenant.tenant_id, group_id, market_app.group_key, market_app.version, market_app.group_name) for app in apps: ts = self.__init_market_app(tenant.tenant_id, region, user, app, tenant_service_group.ID) group_service.add_service_to_group(tenant, region, group_id, ts.service_id) service_list.append(ts) # 先保存env,再保存端口,因为端口需要处理env code, msg = self.__save_env( tenant, ts, app["service_env_map_list"], app["service_connect_info_map_list"]) if code != 200: raise Exception(msg) code, msg = self.__save_port(tenant, ts, app["port_map_list"]) if code != 200: raise Exception(msg) code, msg = self.__save_volume(tenant, ts, app["service_volume_map_list"]) if code != 200: raise Exception(msg) # 保存应用探针信息 probe_infos = app.get("probes", None) if probe_infos: service_probe_map[ts.service_id] = probe_infos self.__save_extend_info(ts, app["extend_method_map"]) dep_apps_key = app.get("dep_service_map_list", None) if dep_apps_key: service_key_dep_key_map[ts.service_key] = dep_apps_key key_service_map[ts.service_key] = ts # 保存依赖关系 self.__save_service_deps(tenant, service_key_dep_key_map, key_service_map) # 构建应用 self.__build_services(tenant, user, service_list, service_probe_map) except Exception as e: logger.exception(e) if tenant_service_group: tenant_service_group_repo.delete_tenant_service_group_by_pk( tenant_service_group.ID) for service in service_list: try: app_manage_service.truncate_service(tenant, service) except Exception as le: logger.exception(le) raise e
def install_service(self, tenant, region, user, group_id, market_app, is_deploy): service_list = [] service_key_dep_key_map = {} key_service_map = {} tenant_service_group = None service_probe_map = {} app_plugin_map = {} # 新装服务对应的安装的插件映射 old_new_id_map = {} # 新旧服务映射关系 try: app_templates = json.loads(market_app.app_template) apps = app_templates["apps"] tenant_service_group = self.__create_tenant_service_group( region, tenant.tenant_id, group_id, market_app.group_key, market_app.version, market_app.group_name) status, msg = self.__create_plugin_for_tenant( region, user, tenant, app_templates.get("plugins", [])) if status != 200: raise Exception(msg) for app in apps: ts = self.__init_market_app(tenant, region, user, app, tenant_service_group.ID) group_service.add_service_to_group(tenant, region, group_id, ts.service_id) service_list.append(ts) old_new_id_map[app["service_id"]] = ts # 先保存env,再保存端口,因为端口需要处理env code, msg = self.__save_env( tenant, ts, app["service_env_map_list"], app["service_connect_info_map_list"]) if code != 200: raise Exception(msg) code, msg = self.__save_port(tenant, ts, app["port_map_list"]) if code != 200: raise Exception(msg) code, msg = self.__save_volume(tenant, ts, app["service_volume_map_list"]) if code != 200: raise Exception(msg) # 保存应用探针信息 probe_infos = app.get("probes", None) if probe_infos: service_probe_map[ts.service_id] = probe_infos self.__save_extend_info(ts, app["extend_method_map"]) if app.get("service_share_uuid", None): dep_apps_key = app.get("dep_service_map_list", None) if dep_apps_key: service_key_dep_key_map[app.get( "service_share_uuid")] = dep_apps_key key_service_map[app.get("service_share_uuid")] = ts else: dep_apps_key = app.get("dep_service_map_list", None) if dep_apps_key: service_key_dep_key_map[ts.service_key] = dep_apps_key key_service_map[ts.service_key] = ts app_plugin_map[ts.service_id] = app.get( "service_related_plugin_config") # 保存依赖关系 self.__save_service_deps(tenant, service_key_dep_key_map, key_service_map) # 数据中心创建应用 new_service_list = self.__create_region_services( tenant, user, service_list, service_probe_map) # 创建应用插件 self.__create_service_plugins(region, tenant, service_list, app_plugin_map, old_new_id_map) if is_deploy: # 部署所有应用 self.__deploy_services(tenant, user, new_service_list) except Exception as e: logger.exception(e) if tenant_service_group: tenant_service_group_repo.delete_tenant_service_group_by_pk( tenant_service_group.ID) for service in service_list: try: app_manage_service.truncate_service(tenant, service) except Exception as le: logger.exception(le) raise e