From 0e463970863413650eed7e165798180331e0246e Mon Sep 17 00:00:00 2001 From: huangyanfeng Date: Wed, 17 Jan 2024 13:56:11 +0800 Subject: [PATCH] pull mode register add check cluster exists Signed-off-by: huangyanfeng --- pkg/karmadactl/register/register.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/pkg/karmadactl/register/register.go b/pkg/karmadactl/register/register.go index 8eb166727..303c0076c 100644 --- a/pkg/karmadactl/register/register.go +++ b/pkg/karmadactl/register/register.go @@ -50,6 +50,7 @@ import ( "k8s.io/kubectl/pkg/util/templates" "github.com/karmada-io/karmada/pkg/apis/cluster/validation" + karmadaclientset "github.com/karmada-io/karmada/pkg/generated/clientset/versioned" "github.com/karmada-io/karmada/pkg/karmadactl/options" cmdutil "github.com/karmada-io/karmada/pkg/karmadactl/util" "github.com/karmada-io/karmada/pkg/karmadactl/util/apiclient" @@ -364,6 +365,18 @@ func (o *CommandRegisterOption) Run(parentCommand string) error { return err } + fmt.Println("[karmada-agent-start] Waiting to check cluster exists") + karmadaClient, err := ToKarmadaClient(karmadaAgentCfg) + if err != nil { + return err + } + _, exist, err := karmadautil.GetClusterWithKarmadaClient(karmadaClient, o.ClusterName) + if err != nil { + return err + } else if exist { + return fmt.Errorf("failed to register as cluster with name %s already exists", o.ClusterName) + } + // It's necessary to set the label of namespace to make sure that the namespace is created by Karmada. labels := map[string]string{ util.ManagedByKarmadaLabel: util.ManagedByKarmadaLabelValue, @@ -1021,3 +1034,19 @@ func ToClientSet(config *clientcmdapi.Config) (*kubeclient.Clientset, error) { } return client, nil } + +// ToKarmadaClient converts a KubeConfig object to a client +func ToKarmadaClient(config *clientcmdapi.Config) (*karmadaclientset.Clientset, error) { + overrides := clientcmd.ConfigOverrides{Timeout: "10s"} + clientConfig, err := clientcmd.NewDefaultClientConfig(*config, &overrides).ClientConfig() + if err != nil { + return nil, fmt.Errorf("failed to create API client configuration from kubeconfig: %w", err) + } + + karmadaClient, err := karmadaclientset.NewForConfig(clientConfig) + if err != nil { + return nil, err + } + + return karmadaClient, nil +}