diff --git a/pkg/karmadactl/join.go b/pkg/karmadactl/join.go index 117fba804..793aa76b2 100644 --- a/pkg/karmadactl/join.go +++ b/pkg/karmadactl/join.go @@ -3,7 +3,9 @@ package karmadactl import ( "context" "errors" + "fmt" "io" + "strings" "time" "github.com/spf13/cobra" @@ -13,6 +15,7 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/wait" kubeclient "k8s.io/client-go/kubernetes" "k8s.io/klog/v2" @@ -23,6 +26,7 @@ import ( "github.com/karmada-io/karmada/pkg/karmadactl/options" "github.com/karmada-io/karmada/pkg/util" "github.com/karmada-io/karmada/pkg/util/names" + "github.com/karmada-io/karmada/pkg/util/validation" ) var ( @@ -70,12 +74,18 @@ func NewCmdJoin(cmdOut io.Writer, karmadaConfig KarmadaConfig) *cobra.Command { Long: joinLong, Example: joinExample, Run: func(cmd *cobra.Command, args []string) { + // Set default values err := opts.Complete(args) if err != nil { klog.Errorf("Error: %v", err) return } + if errs := opts.Validate(); len(errs) != 0 { + klog.Error(utilerrors.NewAggregate(errs).Error()) + return + } + err = RunJoin(cmdOut, karmadaConfig, opts) if err != nil { klog.Errorf("Error: %v", err) @@ -120,6 +130,16 @@ func (j *CommandJoinOption) Complete(args []string) error { return nil } +// Validate checks option and return a slice of found errs. +func (j *CommandJoinOption) Validate() []error { + var errs []error + if errMsgs := validation.ValidateClusterName(j.ClusterName); len(errMsgs) != 0 { + errs = append(errs, fmt.Errorf("invalid cluster name(%s): %s", j.ClusterName, strings.Join(errMsgs, ";"))) + } + + return errs +} + // AddFlags adds flags to the specified FlagSet. func (j *CommandJoinOption) AddFlags(flags *pflag.FlagSet) { j.GlobalCommandOptions.AddFlags(flags)