def get_or_create_upgrade_record(self, tenant_id, group_id, group_key, upgrade_group_id, is_from_cloud, market_name):
     """获取或创建升级记录"""
     recode_kwargs = {
         "tenant_id": tenant_id,
         "group_id": group_id,
         "group_key": group_key,
         "create_time": datetime.now(),
         "is_from_cloud": is_from_cloud,
         "market_name": market_name,
         "upgrade_group_id": upgrade_group_id,
     }
     try:
         return upgrade_repo.get_app_not_upgrade_record(status__lt=UpgradeStatus.UPGRADED.value, **recode_kwargs)
     except AppUpgradeRecord.DoesNotExist:
         from console.services.group_service import group_service
         tenant = Tenants.objects.get(tenant_id=tenant_id)
         service_group_keys = group_service.get_group_service_sources(group_id).values_list('group_key', flat=True)
         if group_key in set(service_group_keys or []):
             if not is_from_cloud:
                 app = rainbond_app_repo.get_rainbond_app_qs_by_key(tenant.enterprise_id, group_key)
                 if not app:
                     raise ServiceHandleException(
                         msg="the rainbond app is not in the group", msg_show="该应用中没有这个云市组件", status_code=404)
                 app_name = app.app_name
             else:
                 market = app_market_service.get_app_market_by_name(tenant.enterprise_id, market_name, raise_exception=True)
                 app = app_market_service.get_market_app_model(market, group_key)
                 app_name = app.app_name
             app_record = upgrade_repo.create_app_upgrade_record(group_name=app_name, **recode_kwargs)
             return app_record
         else:
             raise AbortRequest(msg="the app model is not in the group", msg_show="该应用中没有这个应用模型", status_code=404)
 def get_or_create_upgrade_record(self, tenant_id, group_id, group_key):
     """获取或创建升级记录"""
     recode_kwargs = {
         "tenant_id": tenant_id,
         "group_id": group_id,
         "group_key": group_key,
         "create_time": datetime.now(),
     }
     try:
         app_record = upgrade_repo.get_app_not_upgrade_record(
             status__lt=UpgradeStatus.UPGRADED.value, **recode_kwargs)
     except AppUpgradeRecord.DoesNotExist:
         from console.services.group_service import group_service
         service_group_keys = group_service.get_group_service_sources(
             group_id).values_list('group_key', flat=True)
         if group_key not in set(service_group_keys or []):
             raise AbortRequest(msg="the rainbond app is not in the group",
                                msg_show="该组中没有这个云市组件",
                                status_code=404)
         tenant = Tenants.objects.get(tenant_id=tenant_id)
         app = rainbond_app_repo.get_rainbond_app_qs_by_key(
             tenant.enterprise_id, group_key).first()
         if not app:
             raise AbortRequest(msg="No rainbond app found",
                                msg_show="没有找到此云市组件",
                                status_code=404)
         app_record = upgrade_repo.create_app_upgrade_record(
             group_name=app.group_name, **recode_kwargs)
     return app_record
    def get_app_upgrade_versions(self, tenant, group_id, group_key):
        """获取云市组件可升级版本列表"""
        from console.services.group_service import group_service
        from console.services.market_app_service import market_app_service

        # 查询某一个云市组件下的所有组件
        services = group_service.get_rainbond_services(group_id, group_key)
        versions = set()

        # 查询可升级的组件
        for service in services:
            service_version = market_app_service.list_upgradeable_versions(
                tenant, service)
            versions |= set(service_version or [])

        # 查询新增组件的版本
        service_keys = services.values_list('service_key', flat=True)
        service_keys = set(service_keys) if service_keys else set()
        app_qs = rainbond_app_repo.get_rainbond_app_qs_by_key(
            tenant.enterprise_id, group_key=group_key)
        add_versions = self.query_the_version_of_the_add_service(
            app_qs, service_keys)

        versions |= add_versions

        return versions
Esempio n. 4
0
 def get_or_create_upgrade_record(self, tenant_id, group_id, group_key):
     """获取或创建升级记录"""
     recode_kwargs = {
         "tenant_id": tenant_id,
         "group_id": group_id,
         "group_key": group_key,
         "create_time": datetime.now(),
     }
     try:
         app_record = upgrade_repo.get_app_not_upgrade_record(status__lt=UpgradeStatus.UPGRADED.value, **recode_kwargs)
     except AppUpgradeRecord.DoesNotExist:
         from console.services.group_service import group_service
         tenant = Tenants.objects.get(tenant_id=tenant_id)
         service_group_keys = group_service.get_group_service_sources(group_id).values_list('group_key', flat=True)
         if group_key in set(service_group_keys or []):
             app_name = None
             app = rainbond_app_repo.get_rainbond_app_qs_by_key(tenant.enterprise_id, group_key).first()
             if app:
                 app_name = app.app_name
             else:
                 is_cloud_app = False
                 markets = self.get_cloud_markets(enterprise_id=tenant.enterprise_id)
                 if markets:
                     for market in markets:
                         cloud_app = self.get_cloud_app(tenant.enterprise_id, market.market_id, group_key)
                         if cloud_app:
                             app_name = cloud_app.name
                             is_cloud_app = True
                 if not is_cloud_app:
                     raise AbortRequest(msg="the rainbond app is not in the group", msg_show="该应用中没有这个云市组件", status_code=404)
             app_record = upgrade_repo.create_app_upgrade_record(group_name=app_name, **recode_kwargs)
             return app_record
         else:
             raise AbortRequest(msg="the rainbond app is not in the group", msg_show="该应用中没有这个云市组件", status_code=404)
Esempio n. 5
0
 def yield_app_info():
     for group_key in set(service_group_keys):
         app_qs = rainbond_app_repo.get_rainbond_app_qs_by_key(
             group_key=group_key)
         app = app_qs.first()
         if not app:
             continue
         upgrade_versions = upgrade_service.get_app_upgrade_versions(
             self.tenant, group_id, group_key)
         not_upgrade_record = upgrade_service.get_app_not_upgrade_record(
             self.tenant.tenant_id, group_id, group_key)
         services = group_service.get_rainbond_services(
             int(group_id), group_key)
         yield {
             'current_version':
             upgrade_service.get_old_version(
                 group_key, services.values_list('service_id',
                                                 flat=True)),
             'can_upgrade':
             bool(upgrade_versions),
             'upgrade_versions':
             list(upgrade_versions),
             'not_upgrade_record_id':
             not_upgrade_record.ID,
             'not_upgrade_record_status':
             not_upgrade_record.status,
             'group_key':
             app.group_key,
             'group_name':
             app.group_name,
             'share_user':
             app.share_user,
             'share_team':
             app.share_team,
             'tenant_service_group_id':
             app.tenant_service_group_id,
             'pic':
             app.pic,
             'source':
             app.source,
             'describe':
             app.describe,
             'enterprise_id':
             app.enterprise_id,
             'is_official':
             app.is_official,
             'details':
             app.details,
             'min_memory':
             group_service.get_service_group_memory(app.app_template),
         }