From d0644c9a9ac71e1656f4289fc789035041abef4b Mon Sep 17 00:00:00 2001 From: Mael Regnery Date: Fri, 1 Jul 2022 18:18:50 +0200 Subject: [PATCH] fix: wrong fh flag breaking the write operation (#25) * fix: wrong fh flag * bump version --- cmd/helpers/kubeconfig.go | 2 +- cmd/use_context.go | 4 +-- cmd/version.go | 2 +- pkg/k8s/kubeconfig.go | 8 +---- pkg/k8s/kubeconfig_test.go | 65 +++++++++++++++++++++++++++++++++----- 5 files changed, 62 insertions(+), 19 deletions(-) diff --git a/cmd/helpers/kubeconfig.go b/cmd/helpers/kubeconfig.go index 0f52fb6..3f3f975 100644 --- a/cmd/helpers/kubeconfig.go +++ b/cmd/helpers/kubeconfig.go @@ -23,7 +23,7 @@ func NewKubeConfig() (*k8s.KubeConfig, error) { } func SaveKubeConfig(kubeconfig *k8s.KubeConfig) error { - fh, err := os.OpenFile(config.GetKubeConfig(), os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0600) + fh, err := os.OpenFile(config.GetKubeConfig(), os.O_RDWR, 0600) if err != nil { return fmt.Errorf("Cannot open the kubeconfig: %s", err) } diff --git a/cmd/use_context.go b/cmd/use_context.go index 7ecba11..1d6b0e9 100644 --- a/cmd/use_context.go +++ b/cmd/use_context.go @@ -37,6 +37,7 @@ func useContext(opts *useContextOptions) { contexts := kubeconfig.GetContextNames() var selectedContext string + var err error if opts.context != "" { if !kubeconfig.IsContextExist(opts.context) { @@ -47,14 +48,13 @@ func useContext(opts *useContextOptions) { sort.Strings(contexts) p := prompt.NewPrompt("Select the context", contexts) - var err error selectedContext, err = p.PromptSelect() if err != nil { klog.Fatalf("Cannot get the answer from the prompt: %s", err) } } - err := kubeconfig.SetCurrentContext(selectedContext) + err = kubeconfig.SetCurrentContext(selectedContext) if err != nil { klog.Fatalf("Cannot set the current context %s: %s", selectedContext, err) } diff --git a/cmd/version.go b/cmd/version.go index 9f79607..3bf6ad1 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -9,7 +9,7 @@ import ( ) const ( - version = "1.2.0" + version = "1.2.1" ) type versionOptions struct { diff --git a/pkg/k8s/kubeconfig.go b/pkg/k8s/kubeconfig.go index 9a4b299..70023a5 100644 --- a/pkg/k8s/kubeconfig.go +++ b/pkg/k8s/kubeconfig.go @@ -48,13 +48,7 @@ func NewKubeConfigFromReader(r io.Reader) (*KubeConfig, error) { // Save writes the kubeconfig in the given file func (kubeConfig *KubeConfig) Save(w io.Writer) error { - config, err := kubeConfig.marshal() - if err != nil { - return nil - } - - _, err = w.Write(config) - return err + return yaml.NewEncoder(w).Encode(kubeConfig) } // WriteTempFile writes the kubeconfig in a temporary file diff --git a/pkg/k8s/kubeconfig_test.go b/pkg/k8s/kubeconfig_test.go index 007666d..4d4187c 100644 --- a/pkg/k8s/kubeconfig_test.go +++ b/pkg/k8s/kubeconfig_test.go @@ -11,7 +11,7 @@ import ( ) var ( - testingConfig = ` + testingConfig1 = ` apiVersion: v1 clusters: - cluster: @@ -38,7 +38,34 @@ users: command: aws-iam-authenticator ` - testingBigConfig = ` + testingConfig2 = ` +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: FAKEVALUE2 + server: https://fakeurl2.com + name: fakecluster2 +contexts: +- context: + cluster: fakecluster2 + namespace: fakens2 + user: fakeuser2 + name: fakecontext2 +kind: Config +preferences: {} +users: +- name: fakeuser2 + user: + exec: + apiVersion: client.authentication.k8s.io/v1alpha1 + args: + - token + - -i + - fakecluster2 + command: aws-iam-authenticator +` + + testingMergedConfig = ` apiVersion: v1 clusters: - cluster: @@ -134,7 +161,7 @@ func TestNewKubeConfig(t *testing.T) { } func TestNewKubeConfigFromReader(t *testing.T) { - kubeconfig, err := loadKubeConfig(testingConfig) + kubeconfig, err := loadKubeConfig(testingConfig1) if err != nil { t.Errorf("Unexpeted err: %s", err) @@ -164,7 +191,7 @@ var ( ) func TestGetContextByContextName(t *testing.T) { - kubeconfig, err := loadKubeConfig(testingConfig) + kubeconfig, err := loadKubeConfig(testingConfig1) if err != nil { t.Error(err) } @@ -186,7 +213,7 @@ func TestGetContextByContextName(t *testing.T) { } func TestGetUserByContextName(t *testing.T) { - kubeconfig, err := loadKubeConfig(testingConfig) + kubeconfig, err := loadKubeConfig(testingConfig1) if err != nil { t.Error(err) } @@ -208,7 +235,7 @@ func TestGetUserByContextName(t *testing.T) { } func TestGetClusterByContextName(t *testing.T) { - kubeconfig, err := loadKubeConfig(testingConfig) + kubeconfig, err := loadKubeConfig(testingConfig1) if err != nil { t.Error(err) } @@ -230,7 +257,7 @@ func TestGetClusterByContextName(t *testing.T) { } func TestGetKubeConfigByContextName(t *testing.T) { - kubeconfig, err := loadKubeConfig(testingBigConfig) + kubeconfig, err := loadKubeConfig(testingMergedConfig) if err != nil { t.Error(err) } @@ -252,7 +279,7 @@ func TestGetKubeConfigByContextName(t *testing.T) { } func TestSaveFile(t *testing.T) { - kubeconfig, err := loadKubeConfig(testingConfig) + kubeconfig, err := loadKubeConfig(testingConfig1) if err != nil { t.Error(err) } @@ -265,6 +292,28 @@ func TestSaveFile(t *testing.T) { } } +func TestAppend(t *testing.T) { + kubeconfig1, err := loadKubeConfig(testingConfig1) + if err != nil { + t.Error(err) + } + + kubeconfig2, err := loadKubeConfig(testingConfig2) + if err != nil { + t.Error(err) + } + + kubeconfigMerged, err := loadKubeConfig(testingMergedConfig) + if err != nil { + t.Error(err) + } + + kubeconfig2.Append(kubeconfig1) + if !reflect.DeepEqual(kubeconfig2, kubeconfigMerged) { + t.Error("kubeconfig1 not equal the merged kubeconfig") + } +} + func loadKubeConfig(kubeConfig string) (*k8s.KubeConfig, error) { r := strings.NewReader(kubeConfig) kubeconfig, err := k8s.NewKubeConfigFromReader(r)