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()
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_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)
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)