def _delete_app(tenant_name, region_name, app_id): group_repo.delete_group_by_pk(app_id) upgrade_repo.delete_app_record_by_group_id(app_id) try: region_app_id = region_app_repo.get_region_app_id(region_name, app_id) except RegionApp.DoesNotExist: return region_api.delete_app(region_name, tenant_name, region_app_id)
def give_up_compose_create(self, tenant, group_id, compose_id): self.__delete_created_compose_info(tenant, compose_id) compose_repo.delete_group_compose_by_compose_id(compose_id) group_repo.delete_group_by_pk(group_id) # 删除组件与组的关系 group_service_relation_repo.delete_relation_by_group_id(group_id) compose_repo.delete_group_compose_by_group_id(group_id)
def delete_group(self, group_id): if not group_id or group_id < 0: return 400, u"需要删除的组不合法", None # 删除组 group_repo.delete_group_by_pk(group_id) # 删除应用与组的关系 group_service_relation_repo.delete_relation_by_group_id(group_id) return 200, u"删除成功", group_id
def delete_group_no_service(self, group_id): if not group_id or group_id < 0: return 400, u"需要删除的组不合法", None backups = backup_record_repo.get_record_by_group_id(group_id) if backups: return 409, u"当前组有备份记录,暂无法删除", None # 删除组 group_repo.delete_group_by_pk(group_id) return 200, u"删除成功", group_id
def delete_group_no_service(self, group_id): if not group_id or (type(group_id) == str and not str.isdigit(group_id)) or int(group_id) < 0: return 400, "需要删除的应用ID不合法", None # 删除应用 group_repo.delete_group_by_pk(group_id) # 删除升级记录 upgrade_repo.delete_app_record_by_group_id(group_id) return 200, "删除成功", group_id
def delete_group(self, group_id, default_group_id): if not group_id or group_id < 0: return 400, u"需要删除的应用不合法", None backups = backup_record_repo.get_record_by_group_id(group_id) if backups: return 409, u"当前应用有备份记录,暂无法删除", None # 删除应用 group_repo.delete_group_by_pk(group_id) # 删除应用与应用的关系 group_service_relation_repo.update_service_relation(group_id, default_group_id) return 200, u"删除成功", group_id
def delete_group_no_service(self, group_id): if not group_id or group_id < 0: return 400, u"需要删除的应用不合法", None # backups = backup_record_repo.get_record_by_group_id(group_id) # if backups: # return 409, u"当前应用有备份记录,暂无法删除", None # 删除应用 group_repo.delete_group_by_pk(group_id) # 删除升级记录 upgrade_repo.delete_app_record_by_group_id(group_id) return 200, u"删除成功", group_id
def delete_group(self, group_id): if not group_id or group_id < 0: return 400, u"需要删除的组不合法", None backups = backup_record_repo.get_record_by_group_id(group_id) if backups: return 409, u"当前组有备份记录,暂无法删除", None # 删除组 group_repo.delete_group_by_pk(group_id) # 删除应用与组的关系 group_service_relation_repo.delete_relation_by_group_id(group_id) compose_repo.delete_group_compose_by_group_id(group_id) return 200, u"删除成功", group_id
def _delete_app(tenant_name, region_name, app_id): group_repo.delete_group_by_pk(app_id) upgrade_repo.delete_app_record_by_group_id(app_id) try: region_app_id = region_app_repo.get_region_app_id(region_name, app_id) except RegionApp.DoesNotExist: return keys = [] migrate_record = migrate_repo.get_by_original_group_id(app_id) if migrate_record: for record in migrate_record: keys.append(record.restore_id) region_api.delete_app(region_name, tenant_name, region_app_id, {"etcd_keys": keys})
def install_service_group(self, user, tenant_name, group_key, group_version, region_name, template_version): tenant_service_group = None new_group = None try: logger.debug('prepared install [{}-{}] to [{}] on [{}]'.format( group_key, group_version, tenant_name, region_name)) if tenant_name: tenant = self.get_tenant_by_name(tenant_name) else: tenant = self.get_default_tenant_by_user(user.user_id) if not tenant: logger.error('tenant does not existed!') return False, '租户不存在', None logger.debug('login_user_id: {}'.format(user.user_id)) logger.debug('login_user: {}'.format(user.nick_name)) logger.debug('tenant_name: {}'.format(tenant.tenant_name)) # 查看安装的目标数据中心是否已初始化, 如果未初始化则先初始化 if not tenant_svc.init_region_tenant(tenant, region_name): return False, '初始化数据中心失败: {}'.format(region_name), None app = market_sycn_service.download_app_service_group_from_market( user, tenant, group_key, group_version) new_group = self.__create_group(tenant.tenant_id, region_name, app.group_name) tenant_service_group, _ = market_app_service.install_service( tenant, region_name, user, new_group.ID, app, True) if tenant_service_group: tenant_service_group = self.get_group_services_by_pk( tenant_service_group.pk) return True, "success", tenant_service_group 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) return False, str(e.message), None
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