From 964d4889c4649407979a2bcf5638a26fbb3c91d4 Mon Sep 17 00:00:00 2001 From: Monis Khan Date: Fri, 19 Mar 2021 18:40:17 -0400 Subject: [PATCH] pinniped whoami: print correct cluster info when --kubeconfig-context is used Signed-off-by: Monis Khan --- cmd/pinniped/cmd/whoami.go | 17 +++++++---- cmd/pinniped/cmd/whoami_test.go | 54 +++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 6 deletions(-) diff --git a/cmd/pinniped/cmd/whoami.go b/cmd/pinniped/cmd/whoami.go index bf973981..e0e83c01 100644 --- a/cmd/pinniped/cmd/whoami.go +++ b/cmd/pinniped/cmd/whoami.go @@ -78,7 +78,7 @@ func runWhoami(output io.Writer, getClientset getConciergeClientsetFunc, flags * return fmt.Errorf("could not configure Kubernetes client: %w", err) } - clusterInfo, err := getCurrentCluster(clientConfig) + clusterInfo, err := getCurrentCluster(clientConfig, flags.kubeconfigContextOverride) if err != nil { return fmt.Errorf("could not get current cluster info: %w", err) } @@ -101,24 +101,29 @@ func runWhoami(output io.Writer, getClientset getConciergeClientsetFunc, flags * return nil } -func getCurrentCluster(clientConfig clientcmd.ClientConfig) (*clusterInfo, error) { - currentKubeconfig, err := clientConfig.RawConfig() +func getCurrentCluster(clientConfig clientcmd.ClientConfig, currentContextNameOverride string) (*clusterInfo, error) { + currentKubeConfig, err := clientConfig.RawConfig() if err != nil { return nil, err } + contextName := currentKubeConfig.CurrentContext + if len(currentContextNameOverride) > 0 { + contextName = currentContextNameOverride + } + unknownClusterInfo := &clusterInfo{name: "???", url: "???"} - context, ok := currentKubeconfig.Contexts[currentKubeconfig.CurrentContext] + ctx, ok := currentKubeConfig.Contexts[contextName] if !ok { return unknownClusterInfo, nil } - cluster, ok := currentKubeconfig.Clusters[context.Cluster] + cluster, ok := currentKubeConfig.Clusters[ctx.Cluster] if !ok { return unknownClusterInfo, nil } - return &clusterInfo{name: context.Cluster, url: cluster.Server}, nil + return &clusterInfo{name: ctx.Cluster, url: cluster.Server}, nil } func writeWhoamiOutput(output io.Writer, flags *whoamiFlags, cInfo *clusterInfo, whoAmI *identityv1alpha1.WhoAmIRequest) error { diff --git a/cmd/pinniped/cmd/whoami_test.go b/cmd/pinniped/cmd/whoami_test.go index 38c7f99c..c5480036 100644 --- a/cmd/pinniped/cmd/whoami_test.go +++ b/cmd/pinniped/cmd/whoami_test.go @@ -205,6 +205,60 @@ func TestWhoami(t *testing.T) { wantError: true, wantStderr: "Error: could not get current cluster info: stat this-file-does-not-exist: no such file or directory\n", }, + { + name: "different kubeconfig context, but same as current", + args: []string{ + "--kubeconfig", "./testdata/kubeconfig.yaml", + "--kubeconfig-context", "kind-kind", + }, + wantStdout: here.Doc(` + Current cluster info: + + Name: kind-kind + URL: https://fake-server-url-value + + Current user info: + + Username: some-username + Groups: some-group-0, some-group-1 + `), + }, + { + name: "different kubeconfig context, not current", + args: []string{ + "--kubeconfig", "./testdata/kubeconfig.yaml", + "--kubeconfig-context", "some-other-context", + }, + wantStdout: here.Doc(` + Current cluster info: + + Name: some-other-cluster + URL: https://some-other-fake-server-url-value + + Current user info: + + Username: some-username + Groups: some-group-0, some-group-1 + `), + }, + { + name: "invalid kubeconfig context prints ???", + args: []string{ + "--kubeconfig", "./testdata/kubeconfig.yaml", + "--kubeconfig-context", "invalid", + }, + wantStdout: here.Doc(` + Current cluster info: + + Name: ??? + URL: ??? + + Current user info: + + Username: some-username + Groups: some-group-0, some-group-1 + `), + }, { name: "getting clientset fails", gettingClientsetErr: constable.Error("some get clientset error"),