def get_add_services(self, enterprise_id, services, group_key, version, market_name=None): """获取新增组件""" app_template = None if services: service_keys = services.values_list('service_key', flat=True) service_keys = set(service_keys) if service_keys else set() if not market_name: app = rainbond_app_repo.get_rainbond_app_by_key_version( group_key=group_key, version=version) if app: app_template = app.app_template else: market = app_market_service.get_app_market_by_name( enterprise_id, market_name, raise_exception=True) app = app_market_service.get_market_app_model_version( market, group_key, version, get_template=True) if app: app_template = app.template if app_template: return list( self.get_new_services( self.parse_app_template(app_template), service_keys).values()) else: return []
def get(self, request, enterprise_id, market_name, app_id, version, *args, **kwargs): _, market_model = app_market_service.get_app_market( enterprise_id, market_name, raise_exception=True) data = app_market_service.get_market_app_model_version(market_model, app_id, version, extend=True) result = general_message(200, "success", None, bean=data) return Response(result, status=200)
def get_upgrade_app_version_template_app(tenant, version, pc): if pc.install_from_cloud: data = app_market_service.get_market_app_model_version(pc.market, pc.current_app.app_id, version, get_template=True) template = json.loads(data.template) apps = template.get("apps") def func(x): result = x.get("service_share_uuid", None) == pc.service_source.service_share_uuid \ or x.get("service_key", None) == pc.service_source.service_share_uuid return result app = next(iter(filter(lambda x: func(x), apps)), None) else: app = rbd_center_app_service.get_version_app(tenant.enterprise_id, version, pc.service_source) return app
def get_upgrade_app_template(tenant, version, pc): template = None if pc.install_from_cloud: data = app_market_service.get_market_app_model_version( pc.market, pc.service_source.group_key, version, get_template=True) template = json.loads(data.template) pc.template_updatetime = data.update_time else: data = rainbond_app_repo.get_enterpirse_app_by_key_and_version(tenant.enterprise_id, pc.service_source.group_key, version) if not data: raise ServiceHandleException(msg="app version {} can not exist".format(version), msg_show="应用模版版本不存在") template = json.loads(data.app_template) pc.template_updatetime = data.update_time if template: return template raise ServiceHandleException(msg="app version {} can not exist".format(version), msg_show="应用模版版本不存在")
def openapi_upgrade_app_models(self, user, team, region_name, oauth_instance, app_id, data): from console.services.market_app_service import market_app_service update_versions = data["update_versions"] for update_version in update_versions: app_model_id = update_version["app_model_id"] app_model_version = update_version["app_model_version"] market_name = update_version["market_name"] # TODO: get upgrade component will set upgrade_group_id. # Otherwise, there is a problem with multiple installs and upgrades of an application. services = group_service.get_rainbond_services( int(app_id), app_model_id) if not services: continue exist_component = services.first() pc = PropertiesChanges(exist_component, team, all_component_one_model=services) recode_kwargs = { "tenant_id": team.tenant_id, "group_id": int(app_id), "group_key": app_model_id, "is_from_cloud": bool(market_name), "market_name": market_name, } # 获取升级信息 upgrade_info, add_info = self.get_upgrade_info( team, services, app_model_id, app_model_version, market_name) # 生成升级记录 app_record = self.get_or_create_upgrade_record(**recode_kwargs) self.synchronous_upgrade_status(team, region_name, app_record) app_record = AppUpgradeRecord.objects.get(ID=app_record.ID) # 处理新增的组件 install_info = {} if add_info: old_app = app_market_service.get_market_app_model_version( pc.market, app_model_id, app_model_version, get_template=True) new_app = deepcopy(old_app) # mock app信息 template = json.loads(new_app.template) template['apps'] = list(add_info.values()) new_app.template = json.dumps(template) # 查询某一个云市应用下的所有组件 try: install_info = market_app_service.install_service_when_upgrade_app( team, region_name, user, app_id, new_app, old_app, services, True, exist_component.tenant_service_group_id, pc.install_from_cloud, pc.market_name) except ResourceNotEnoughException as re: raise re except AccountOverdueException as re: logger.exception(re) raise ServiceHandleException(msg="resource is not enough", msg_show=re.message, status_code=412, error_code=10406) upgrade_service.create_add_service_record( app_record, install_info['events'], add_info) app_record.version = app_model_version app_record.old_version = pc.current_version app_record.save() # 处理升级组件 upgrade_services = service_repo.get_services_by_service_ids_and_group_key( app_model_id, list(upgrade_info.keys())) market_services = [ self.market_service_and_create_backup(team, service, app_record.version, upgrade_services) for service in upgrade_services ] # 处理依赖关系 if add_info: market_app_service.save_service_deps_when_upgrade_app( team, install_info['service_key_dep_key_map'], install_info['key_service_map'], install_info['apps'], install_info['app_map'], ) upgrade_service.upgrade_database(market_services) upgrade_service.send_upgrade_request(market_services, team, user, app_record, upgrade_info, oauth_instance) upgrade_repo.change_app_record_status( app_record, UpgradeStatus.UPGRADING.value)