From b19ad9e7a78fea0ecdffe7aa53bbe309d9d346ee Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 12 Apr 2018 09:42:25 -0400 Subject: [PATCH 1/2] stop defaulting kubeconfig to http://localhost:8080 --- .../k8s.io/client-go/tools/clientcmd/client_config.go | 11 +---------- test/cmd/legacy-script.sh | 1 + 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/staging/src/k8s.io/client-go/tools/clientcmd/client_config.go b/staging/src/k8s.io/client-go/tools/clientcmd/client_config.go index 44115130d99..788e7ea7aa5 100644 --- a/staging/src/k8s.io/client-go/tools/clientcmd/client_config.go +++ b/staging/src/k8s.io/client-go/tools/clientcmd/client_config.go @@ -35,7 +35,7 @@ import ( var ( // ClusterDefaults has the same behavior as the old EnvVar and DefaultCluster fields // DEPRECATED will be replaced - ClusterDefaults = clientcmdapi.Cluster{Server: getDefaultServer()} + ClusterDefaults = clientcmdapi.Cluster{Server: os.Getenv("KUBERNETES_MASTER")} // DefaultClientConfig represents the legacy behavior of this package for defaulting // DEPRECATED will be replace DefaultClientConfig = DirectClientConfig{*clientcmdapi.NewConfig(), "", &ConfigOverrides{ @@ -43,15 +43,6 @@ var ( }, nil, NewDefaultClientConfigLoadingRules(), promptedCredentials{}} ) -// getDefaultServer returns a default setting for DefaultClientConfig -// DEPRECATED -func getDefaultServer() string { - if server := os.Getenv("KUBERNETES_MASTER"); len(server) > 0 { - return server - } - return "http://localhost:8080" -} - // ClientConfig is used to make it easy to get an api server client type ClientConfig interface { // RawConfig returns the merged result of all overrides diff --git a/test/cmd/legacy-script.sh b/test/cmd/legacy-script.sh index d81755e3ba6..9d0473e14af 100755 --- a/test/cmd/legacy-script.sh +++ b/test/cmd/legacy-script.sh @@ -325,6 +325,7 @@ runTests() { exit 1 fi kube::log::status "Checking kubectl version" + export KUBERNETES_MASTER=http://127.0.0.1:${API_PORT} kubectl version # Generate a random namespace name, based on the current time (to make From 07dc17ffd9aadd9918511334e13b02dc817828a5 Mon Sep 17 00:00:00 2001 From: Maciej Szulik Date: Tue, 3 Mar 2020 18:42:19 +0100 Subject: [PATCH 2/2] Provide more verbose empty config error based on the context --- .../pkg/genericclioptions/config_flags.go | 20 +++++++++++++++++-- .../client-go/tools/clientcmd/validation.go | 2 +- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go b/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go index 34b1f8e3a0f..69a70c3b41e 100644 --- a/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go +++ b/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go @@ -17,6 +17,7 @@ limitations under the License. package genericclioptions import ( + "errors" "os" "path/filepath" "regexp" @@ -54,7 +55,17 @@ const ( flagHTTPCacheDir = "cache-dir" ) -var defaultCacheDir = filepath.Join(homedir.HomeDir(), ".kube", "http-cache") +var ( + defaultCacheDir = filepath.Join(homedir.HomeDir(), ".kube", "http-cache") + + ErrEmptyConfig = errors.New(`Missing or incomplete configuration info. Please point to an existing, complete config file: + + 1. Via the command-line flag --kubeconfig + 2. Via the KUBECONFIG environment variable + 3. In your home directory as ~/.kube/config + +To view or setup config directly use the 'config' command.`) +) // RESTClientGetter is an interface that the ConfigFlags describe to provide an easier way to mock for commands // and eliminate the direct coupling to a struct type. Users may wish to duplicate this type in their own packages @@ -108,7 +119,12 @@ type ConfigFlags struct { // to a .kubeconfig file, loading rules, and config flag overrides. // Expects the AddFlags method to have been called. func (f *ConfigFlags) ToRESTConfig() (*rest.Config, error) { - return f.ToRawKubeConfigLoader().ClientConfig() + config, err := f.ToRawKubeConfigLoader().ClientConfig() + // replace client-go's ErrEmptyConfig error with our custom, more verbose version + if clientcmd.IsEmptyConfig(err) { + return nil, ErrEmptyConfig + } + return config, err } // ToRawKubeConfigLoader binds config flag values to config overrides diff --git a/staging/src/k8s.io/client-go/tools/clientcmd/validation.go b/staging/src/k8s.io/client-go/tools/clientcmd/validation.go index 2f927072bde..02dd1130f91 100644 --- a/staging/src/k8s.io/client-go/tools/clientcmd/validation.go +++ b/staging/src/k8s.io/client-go/tools/clientcmd/validation.go @@ -30,7 +30,7 @@ import ( var ( ErrNoContext = errors.New("no context chosen") - ErrEmptyConfig = errors.New("no configuration has been provided") + ErrEmptyConfig = errors.New("no configuration has been provided, try setting KUBERNETES_MASTER environment variable") // message is for consistency with old behavior ErrEmptyCluster = errors.New("cluster has no server defined") )