Esempio n. 1
0
 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)
Esempio n. 2
0
    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)
Esempio n. 3
0
 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
Esempio n. 4
0
 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
Esempio n. 5
0
    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
Esempio n. 6
0
 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
Esempio n. 7
0
    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
Esempio n. 8
0
 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
Esempio n. 9
0
 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})
Esempio n. 10
0
    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
Esempio n. 11
0
    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