Skip to content

Commit

Permalink
Support clusters without metrics api
Browse files Browse the repository at this point in the history
  • Loading branch information
howardjohn committed Apr 28, 2020
1 parent 13da226 commit 3e76075
Showing 1 changed file with 23 additions and 5 deletions.
28 changes: 23 additions & 5 deletions cmd/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"fmt"
"os"

isatty "github.com/mattn/go-isatty"
"github.com/mattn/go-isatty"
"github.com/spf13/pflag"
"k8s.io/cli-runtime/pkg/genericclioptions"

Expand Down Expand Up @@ -83,10 +83,15 @@ var rootCmd = &cobra.Command{
case model.Node, model.Namespace:
kubeResouceBuilderFlags = kubeResouceBuilderFlags.WithAllNamespaces(true)
}

resourceFinder := kubeResouceBuilderFlags.WithAll(true).ToBuilder(kubeConfigFlags, []string{
"pods.metrics.k8s.io,pods",
})
resources := "pods"
supports, err := supportsMetrics(kubeConfigFlags)
if err != nil {
return err
}
if supports {
resources += ",pods.metrics.k8s.io"
}
resourceFinder := kubeResouceBuilderFlags.WithAll(true).ToBuilder(kubeConfigFlags, []string{resources})
args := &model.Args{
ResourceFinder: resourceFinder,
AllNamespaces: allNamespaces,
Expand All @@ -100,6 +105,19 @@ var rootCmd = &cobra.Command{
},
}

func supportsMetrics(flags *genericclioptions.ConfigFlags) (bool, error) {
d, err := flags.ToDiscoveryClient()
if err != nil {
return false, fmt.Errorf("failed to create discovery client: %v", err)
}
l, err := d.ServerResourcesForGroupVersion("metrics.k8s.io/v1beta1")
// This may fail if any api service is down. If we run into issues, just assume its not supported
if err != nil {
return false, nil
}
return l != nil, nil
}

func Execute() {
flags := pflag.NewFlagSet("kubectl-resources", pflag.ExitOnError)
pflag.CommandLine = flags
Expand Down

0 comments on commit 3e76075

Please sign in to comment.