From f2eff173cf3ff9d3133c2b546adfd5201fe9aee6 Mon Sep 17 00:00:00 2001 From: wangfei Date: Thu, 9 Mar 2023 16:22:45 +0800 Subject: [PATCH] [bugfix]: add pre-check that If the cluster already exists --- cmd/sealer/cmd/cluster/run.go | 5 +++++ cmd/sealer/cmd/utils/cluster.go | 15 +++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/cmd/sealer/cmd/cluster/run.go b/cmd/sealer/cmd/cluster/run.go index ac8536bde5f..6df2edf5a20 100644 --- a/cmd/sealer/cmd/cluster/run.go +++ b/cmd/sealer/cmd/cluster/run.go @@ -236,6 +236,11 @@ func runWithClusterfile(clusterFile string, runFlags *types.RunFlags) error { func runClusterImage(imageEngine imageengine.Interface, cf clusterfile.Interface, imageSpec *imagev1.ImageSpec, mode string) error { cluster := cf.GetCluster() + //check cluster + checkClusterFile, err := utils.CheckClusterIsExists(cluster) + if checkClusterFile != "" { + return err + } infraDriver, err := infradriver.NewInfraDriver(&cluster) if err != nil { return err diff --git a/cmd/sealer/cmd/utils/cluster.go b/cmd/sealer/cmd/utils/cluster.go index 5927b264ef2..4b75e10be0f 100644 --- a/cmd/sealer/cmd/utils/cluster.go +++ b/cmd/sealer/cmd/utils/cluster.go @@ -26,6 +26,7 @@ import ( "github.com/sealerio/sealer/cmd/sealer/cmd/types" "github.com/sealerio/sealer/common" "github.com/sealerio/sealer/pkg/client/k8s" + "github.com/sealerio/sealer/pkg/clusterfile" "github.com/sealerio/sealer/types/api/constants" v1 "github.com/sealerio/sealer/types/api/v1" v2 "github.com/sealerio/sealer/types/api/v2" @@ -33,6 +34,8 @@ import ( strUtils "github.com/sealerio/sealer/utils/strings" ) +const clusterExists = "exist" + func MergeClusterWithFlags(cluster v2.Cluster, mergeFlags *types.MergeFlags) (*v2.Cluster, error) { if len(mergeFlags.CustomEnv) > 0 { cluster.Spec.Env = append(cluster.Spec.Env, mergeFlags.CustomEnv...) @@ -256,3 +259,15 @@ func GetClusterClient() *k8s.Client { } return nil } + +func CheckClusterIsExists(cluster v2.Cluster) (string, error) { + clusterFile, _, err := clusterfile.GetActualClusterFile() + if err == nil { + newClusterfile := clusterFile.GetCluster() + if cluster.Spec.Image != newClusterfile.Spec.Image { + return clusterExists, fmt.Errorf("the cluster image already exists, please uninstall the current cluster and install another version of the cluster image") + } + return clusterExists, fmt.Errorf("this cluster image has already been installed, please do not repeat the operation") + } + return "", nil +}