@@ -428,11 +428,16 @@ func (c *ClusterProvider) UpdateClusterRelease(
428428 return dbserrors .NewK8sDbsError (dbserrors .CreateK8sClientError , err )
429429 }
430430
431- err = c .fillClusterMetaInfo (k8sClusterConfig .ID , request )
431+ clusterEntity , err : = c .fillClusterMetaInfo (k8sClusterConfig .ID , request )
432432 if err != nil {
433433 return err
434434 }
435435
436+ // 检查 addonClusterVersion 是否在支持的版本列表中
437+ if err := c .validateAddonClusterVersion (request , clusterEntity ); err != nil {
438+ return err
439+ }
440+
436441 // 更新 cluster release
437442 values , err := c .updateClusterRelease (ctx , request , k8sClient , isPartial )
438443 if err != nil {
@@ -452,25 +457,28 @@ func (c *ClusterProvider) UpdateClusterRelease(
452457}
453458
454459// fillClusterMetaInfo 补全 cluster 元信息
455- func (c * ClusterProvider ) fillClusterMetaInfo (k8sClusterConfigID uint64 , request * coreentity.Request ) error {
460+ func (c * ClusterProvider ) fillClusterMetaInfo (
461+ k8sClusterConfigID uint64 ,
462+ request * coreentity.Request ,
463+ ) (* metaentity.K8sCrdClusterEntity , error ) {
456464 // check cluster
457465 clusterEntity , err := c .clusterMetaProvider .FindByParams (& metaentity.ClusterQueryParams {
458466 K8sClusterConfigID : k8sClusterConfigID ,
459467 ClusterName : request .ClusterName ,
460468 Namespace : request .Namespace ,
461469 })
462470 if err != nil {
463- return dbserrors .NewK8sDbsError (dbserrors .GetMetaDataError , err )
471+ return nil , dbserrors .NewK8sDbsError (dbserrors .GetMetaDataError , err )
464472 }
465473 if clusterEntity == nil {
466- return dbserrors .NewK8sDbsError (dbserrors .GetMetaDataError ,
474+ return nil , dbserrors .NewK8sDbsError (dbserrors .GetMetaDataError ,
467475 fmt .Errorf ("集群 %s 元数据不存在,操作失败" , request .ClusterName ))
468476 }
469477 if request .AddonClusterVersion == "" {
470478 request .AddonClusterVersion = clusterEntity .AddonClusterVersion
471479 }
472480 request .StorageAddonType = clusterEntity .AddonInfo .AddonType
473- return nil
481+ return clusterEntity , nil
474482}
475483
476484// updateReleaseMeta 更新 release meta 元数据
@@ -1042,3 +1050,51 @@ func mergeAndSortEvents(eventLists ...*corev1.EventList) *corev1.EventList {
10421050
10431051 return & corev1.EventList {Items : allEvents }
10441052}
1053+
1054+ // validateAddonClusterVersion 检查 addonClusterVersion 是否在支持的版本列表中
1055+ func (c * ClusterProvider ) validateAddonClusterVersion (
1056+ request * coreentity.Request ,
1057+ clusterEntity * metaentity.K8sCrdClusterEntity ,
1058+ ) error {
1059+ // 检查支持的版本列表是否为空
1060+ if clusterEntity .AddonInfo .SupportedAcVersions == "" {
1061+ slog .Error ("supported ac versions is empty" ,
1062+ "cluster_name" , request .ClusterName ,
1063+ "addon_type" , clusterEntity .AddonInfo .AddonType )
1064+ return dbserrors .NewK8sDbsError (dbserrors .GetMetaDataError ,
1065+ fmt .Errorf ("插件类型 %s 的 supported ac versions 配置为空" , clusterEntity .AddonInfo .AddonType ))
1066+ }
1067+
1068+ // 反序列化支持的版本列表
1069+ var supportedAcVersions []string
1070+ if err := json .Unmarshal ([]byte (clusterEntity .AddonInfo .SupportedAcVersions ), & supportedAcVersions ); err != nil {
1071+ slog .Error ("failed to unmarshal supported ac versions" ,
1072+ "cluster_name" , request .ClusterName ,
1073+ "supported_versions" , clusterEntity .AddonInfo .SupportedAcVersions ,
1074+ "error" , err )
1075+ return dbserrors .NewK8sDbsError (dbserrors .GetMetaDataError ,
1076+ fmt .Errorf ("supported ac versions 反序列化失败: %w" , err ))
1077+ }
1078+
1079+ // 检查版本列表是否为空
1080+ if len (supportedAcVersions ) == 0 {
1081+ slog .Error ("supported ac versions list is empty" ,
1082+ "cluster_name" , request .ClusterName ,
1083+ "addon_type" , clusterEntity .AddonInfo .AddonType )
1084+ return dbserrors .NewK8sDbsError (dbserrors .UpdateClusterError ,
1085+ fmt .Errorf ("插件类型 %s 的 supported ac versions 列表为空" , clusterEntity .AddonInfo .AddonType ))
1086+ }
1087+
1088+ // 检查请求的版本是否在支持的版本列表中
1089+ requestedVersion := request .AddonClusterVersion
1090+ if ! lo .Contains (supportedAcVersions , requestedVersion ) {
1091+ slog .Error ("addon cluster version not supported" ,
1092+ "cluster_name" , request .ClusterName ,
1093+ "requested_version" , requestedVersion ,
1094+ "supported_versions" , supportedAcVersions )
1095+ return dbserrors .NewK8sDbsError (dbserrors .UpdateClusterError ,
1096+ fmt .Errorf ("addonClusterVersion 版本 %s 不在支持的版本列表中,支持的版本: %v" ,
1097+ requestedVersion , supportedAcVersions ))
1098+ }
1099+ return nil
1100+ }
0 commit comments