From fcb3b06a6f9affd827bc9a02c739b89401057550 Mon Sep 17 00:00:00 2001 From: Rick <1450685+LinuxSuRen@users.noreply.github.com> Date: Thu, 15 Feb 2024 19:53:29 +0800 Subject: [PATCH] feat: support writing kubeconfig to a stream (#1381) --- pkg/client/kubeconfig.go | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/pkg/client/kubeconfig.go b/pkg/client/kubeconfig.go index bad49e3bc..31ea94bf7 100644 --- a/pkg/client/kubeconfig.go +++ b/pkg/client/kubeconfig.go @@ -207,18 +207,28 @@ func KubeconfigWriteToPath(ctx context.Context, kubeconfig *clientcmdapi.Config, defer output.Close() } + err = KubeconfigWriteToStream(ctx, kubeconfig, output) + if err != nil { + return fmt.Errorf("failed to write file '%s': %w", output.Name(), err) + } + + l.Log().Debugf("Wrote kubeconfig to '%s'", output.Name()) + + return nil +} + +// KubeconfigWriteToStream takes a kubeconfig and writes it to stream +func KubeconfigWriteToStream(ctx context.Context, kubeconfig *clientcmdapi.Config, writer io.Writer) error { kubeconfigBytes, err := clientcmd.Write(*kubeconfig) if err != nil { return fmt.Errorf("failed to write kubeconfig: %w", err) } - _, err = output.Write(kubeconfigBytes) + _, err = writer.Write(kubeconfigBytes) if err != nil { - return fmt.Errorf("failed to write file '%s': %w", output.Name(), err) + return fmt.Errorf("failed to write stream '%s'", err) } - l.Log().Debugf("Wrote kubeconfig to '%s'", output.Name()) - return nil } @@ -230,7 +240,7 @@ func KubeconfigMerge(ctx context.Context, newKubeConfig *clientcmdapi.Config, ex for k, v := range newKubeConfig.Clusters { if _, ok := existingKubeConfig.Clusters[k]; ok { if !overwriteConflicting { - return fmt.Errorf("Cluster '%s' already exists in target KubeConfig", k) + return fmt.Errorf("cluster '%s' already exists in target KubeConfig", k) } } existingKubeConfig.Clusters[k] = v @@ -247,7 +257,7 @@ func KubeconfigMerge(ctx context.Context, newKubeConfig *clientcmdapi.Config, ex for k, v := range newKubeConfig.Contexts { if _, ok := existingKubeConfig.Contexts[k]; ok && !overwriteConflicting { - return fmt.Errorf("Context '%s' already exists in target KubeConfig", k) + return fmt.Errorf("context '%s' already exists in target KubeConfig", k) } existingKubeConfig.Contexts[k] = v }