Skip to content

Commit fcb7e50

Browse files
committed
refactor(k8s-dbs): 优化集群配置变更,增加版本信息校验 #14613
1 parent 6c7807f commit fcb7e50

File tree

1 file changed

+61
-5
lines changed

1 file changed

+61
-5
lines changed

dbm-services/k8s-dbs/core/provider/cluster_provider.go

Lines changed: 61 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)