Exemplo n.º 1
0
    def create_upgrade_record(self, enterprise_id, tenant: Tenants,
                              app: ServiceGroup, upgrade_group_id):
        component_group = tenant_service_group_repo.get_component_group(
            upgrade_group_id)

        # If there are unfinished record, it is not allowed to create new record
        last_record = upgrade_repo.get_last_upgrade_record(
            tenant.tenant_id, app.ID, upgrade_group_id)
        if last_record and not last_record.is_finished():
            raise ErrLastRecordUnfinished

        component_group = ComponentGroup(enterprise_id, component_group)
        app_template_source = component_group.app_template_source()

        # create new record
        record = {
            "tenant_id": tenant.tenant_id,
            "group_id": app.app_id,
            "group_key": component_group.app_model_key,
            "group_name": app.app_name,
            "create_time": datetime.now(),
            "is_from_cloud": component_group.is_install_from_cloud(),
            "market_name": app_template_source.get_market_name(),
            "upgrade_group_id": upgrade_group_id,
            "old_version": component_group.version,
            "record_type": AppUpgradeRecordType.UPGRADE.value,
        }
        record = upgrade_repo.create_app_upgrade_record(**record)
        return record.to_dict()
Exemplo n.º 2
0
 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)
Exemplo n.º 3
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
         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
Exemplo 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)
Exemplo n.º 5
0
 def create_rollback_record(self):
     rollback_record = self.upgrade_record.to_dict()
     rollback_record.pop("ID")
     rollback_record.pop("can_rollback")
     rollback_record.pop("is_finished")
     rollback_record["status"] = UpgradeStatus.ROLLING.value
     rollback_record["record_type"] = AppUpgradeRecordType.ROLLBACK.value
     rollback_record["parent_id"] = self.upgrade_record.ID
     rollback_record["version"] = self.upgrade_record.old_version
     rollback_record["old_version"] = self.upgrade_record.version
     self.rollback_record = upgrade_repo.create_app_upgrade_record(**rollback_record)