From f95e54131ee0e32d17034a58e28acf3fd1518adc Mon Sep 17 00:00:00 2001 From: Sulabh Chaturvedi Date: Tue, 18 Aug 2020 18:23:46 +0100 Subject: [PATCH 1/7] Add a message for empty contexts --- cmd/kubectx/fzf.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cmd/kubectx/fzf.go b/cmd/kubectx/fzf.go index 38fb5b0d..364cd66f 100644 --- a/cmd/kubectx/fzf.go +++ b/cmd/kubectx/fzf.go @@ -23,6 +23,7 @@ type InteractiveSwitchOp struct { func (op InteractiveSwitchOp) Run(_, stderr io.Writer) error { // parse kubeconfig just to see if it can be loaded kc := new(kubeconfig.Kubeconfig).WithLoader(kubeconfig.DefaultLoader) + defer kc.Close() if err := kc.Parse(); err != nil { if cmdutil.IsNotFoundErr(err) { printer.Warning(stderr, "kubeconfig file not found") @@ -30,7 +31,12 @@ func (op InteractiveSwitchOp) Run(_, stderr io.Writer) error { } return errors.Wrap(err, "kubeconfig error") } - kc.Close() + + ctxs := kc.ContextNames() + if ctxs == nil { + err := printer.Warning(stderr, "No kubectl context found") + return errors.Wrap(err, "kubeconfig error") + } cmd := exec.Command("fzf", "--ansi", "--no-preview") var out bytes.Buffer From 03be09457376a18fca807bb111a1bfe51e974544 Mon Sep 17 00:00:00 2001 From: Sulabh Chaturvedi Date: Tue, 18 Aug 2020 18:24:37 +0100 Subject: [PATCH 2/7] Duplicated --- cmd/kubectx/list.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/cmd/kubectx/list.go b/cmd/kubectx/list.go index 783fd736..b6cac6ff 100644 --- a/cmd/kubectx/list.go +++ b/cmd/kubectx/list.go @@ -7,7 +7,6 @@ import ( "facette.io/natsort" "github.com/pkg/errors" - "github.com/ahmetb/kubectx/internal/cmdutil" "github.com/ahmetb/kubectx/internal/kubeconfig" "github.com/ahmetb/kubectx/internal/printer" ) @@ -19,10 +18,6 @@ func (_ ListOp) Run(stdout, stderr io.Writer) error { kc := new(kubeconfig.Kubeconfig).WithLoader(kubeconfig.DefaultLoader) defer kc.Close() if err := kc.Parse(); err != nil { - if cmdutil.IsNotFoundErr(err) { - printer.Warning(stderr, "kubeconfig file not found") - return nil - } return errors.Wrap(err, "kubeconfig error") } From 0e2ea151b630be1c36848a13941db3d5c68fc7ea Mon Sep 17 00:00:00 2001 From: Sulabh Chaturvedi Date: Tue, 18 Aug 2020 19:48:02 +0100 Subject: [PATCH 3/7] undo lists.go kubeconfig not found and also, add contect msg to lists.go --- cmd/kubectx/list.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cmd/kubectx/list.go b/cmd/kubectx/list.go index b6cac6ff..e097e49a 100644 --- a/cmd/kubectx/list.go +++ b/cmd/kubectx/list.go @@ -7,6 +7,7 @@ import ( "facette.io/natsort" "github.com/pkg/errors" + "github.com/ahmetb/kubectx/internal/cmdutil" "github.com/ahmetb/kubectx/internal/kubeconfig" "github.com/ahmetb/kubectx/internal/printer" ) @@ -18,10 +19,18 @@ func (_ ListOp) Run(stdout, stderr io.Writer) error { kc := new(kubeconfig.Kubeconfig).WithLoader(kubeconfig.DefaultLoader) defer kc.Close() if err := kc.Parse(); err != nil { + if cmdutil.IsNotFoundErr(err) { + printer.Warning(stderr, "kubeconfig file not found") + return nil + } return errors.Wrap(err, "kubeconfig error") } ctxs := kc.ContextNames() + if ctxs == nil { + err := printer.Warning(stderr, "No kubectl context found") + return errors.Wrap(err, "kubeconfig error") + } natsort.Sort(ctxs) cur := kc.GetCurrentContext() From 2056c06bb0f9003f8051b1e928e09daed89f8ecd Mon Sep 17 00:00:00 2001 From: Sulabh Chaturvedi Date: Tue, 18 Aug 2020 20:04:33 +0100 Subject: [PATCH 4/7] Update test to print message for empty contexts --- test/kubectx.bats | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/kubectx.bats b/test/kubectx.bats index bacb82a6..c0a28378 100644 --- a/test/kubectx.bats +++ b/test/kubectx.bats @@ -227,7 +227,7 @@ load common run ${COMMAND} echo "$output" [ "$status" -eq 0 ] - [[ "$output" = "user2@cluster1" ]] + [[ "$output" = "warning: No kubectl context found" ]] } @test "unset selected context" { From 32b3bb47a25461221fa2a560655275b5eb2e205d Mon Sep 17 00:00:00 2001 From: Sulabh Chaturvedi Date: Tue, 18 Aug 2020 20:13:33 +0100 Subject: [PATCH 5/7] wrong test case updated --- test/kubectx.bats | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/kubectx.bats b/test/kubectx.bats index c0a28378..ce5c2034 100644 --- a/test/kubectx.bats +++ b/test/kubectx.bats @@ -214,7 +214,7 @@ load common run ${COMMAND} echo "$output" [ "$status" -eq 0 ] - [[ "$output" = "" ]] + [[ "$output" = "warning: No kubectl context found" ]] } @test "delete several contexts including a non existent one" { @@ -227,7 +227,7 @@ load common run ${COMMAND} echo "$output" [ "$status" -eq 0 ] - [[ "$output" = "warning: No kubectl context found" ]] + [[ "$output" = "user2@cluster1" ]] } @test "unset selected context" { From 0154216c334747223440b2261f052c7d140f785e Mon Sep 17 00:00:00 2001 From: Sulabh Chaturvedi Date: Wed, 19 Aug 2020 14:17:05 +0100 Subject: [PATCH 6/7] close after operations --- cmd/kubectx/fzf.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmd/kubectx/fzf.go b/cmd/kubectx/fzf.go index 364cd66f..986608f5 100644 --- a/cmd/kubectx/fzf.go +++ b/cmd/kubectx/fzf.go @@ -23,7 +23,7 @@ type InteractiveSwitchOp struct { func (op InteractiveSwitchOp) Run(_, stderr io.Writer) error { // parse kubeconfig just to see if it can be loaded kc := new(kubeconfig.Kubeconfig).WithLoader(kubeconfig.DefaultLoader) - defer kc.Close() + if err := kc.Parse(); err != nil { if cmdutil.IsNotFoundErr(err) { printer.Warning(stderr, "kubeconfig file not found") @@ -37,6 +37,7 @@ func (op InteractiveSwitchOp) Run(_, stderr io.Writer) error { err := printer.Warning(stderr, "No kubectl context found") return errors.Wrap(err, "kubeconfig error") } + kc.Close() cmd := exec.Command("fzf", "--ansi", "--no-preview") var out bytes.Buffer From 39f8e1ab7c62ab7ac11479a0000e03e6dc4e9bd1 Mon Sep 17 00:00:00 2001 From: Sulabh Chaturvedi Date: Wed, 19 Aug 2020 14:27:37 +0100 Subject: [PATCH 7/7] add test for empty contexts --- test/kubectx.bats | 8 ++++++++ test/testdata/config3 | 15 +++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 test/testdata/config3 diff --git a/test/kubectx.bats b/test/kubectx.bats index ce5c2034..c0a8308b 100644 --- a/test/kubectx.bats +++ b/test/kubectx.bats @@ -242,3 +242,11 @@ load common run ${COMMAND} -c [ "$status" -ne 0 ] } + +@test "display msg on empty context" { + use_config config3 + run ${COMMAND} + echo "$output" + [ "$status" -eq 0 ] + [[ "$output" = "warning: No kubectl context found" ]] +} diff --git a/test/testdata/config3 b/test/testdata/config3 new file mode 100644 index 00000000..232acc31 --- /dev/null +++ b/test/testdata/config3 @@ -0,0 +1,15 @@ +# config with no context + +apiVersion: v1 +clusters: +- cluster: + server: "" + name: cluster1 +contexts: +- context: +current-context: "" +kind: Config +preferences: {} +users: +- name: user1 + user: {}