Skip to content

Commit 25507e8

Browse files
committed
Provide more verbose empty config error for all config load actions
1 parent 9f76518 commit 25507e8

File tree

3 files changed

+76
-23
lines changed

3 files changed

+76
-23
lines changed

staging/src/k8s.io/cli-runtime/pkg/genericclioptions/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ go_library(
55
srcs = [
66
"builder_flags.go",
77
"builder_flags_fake.go",
8+
"client_config.go",
89
"config_flags.go",
910
"config_flags_fake.go",
1011
"doc.go",
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
Copyright 2020 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package genericclioptions
18+
19+
import (
20+
restclient "k8s.io/client-go/rest"
21+
"k8s.io/client-go/tools/clientcmd"
22+
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
23+
)
24+
25+
var (
26+
ErrEmptyConfig = clientcmd.NewEmptyConfigError(`Missing or incomplete configuration info. Please point to an existing, complete config file:
27+
28+
29+
1. Via the command-line flag --kubeconfig
30+
2. Via the KUBECONFIG environment variable
31+
3. In your home directory as ~/.kube/config
32+
33+
To view or setup config directly use the 'config' command.`)
34+
)
35+
36+
var _ = clientcmd.ClientConfig(&clientConfig{})
37+
38+
type clientConfig struct {
39+
defaultClientConfig clientcmd.ClientConfig
40+
}
41+
42+
func (c *clientConfig) RawConfig() (clientcmdapi.Config, error) {
43+
config, err := c.defaultClientConfig.RawConfig()
44+
// replace client-go's ErrEmptyConfig error with our custom, more verbose version
45+
if clientcmd.IsEmptyConfig(err) {
46+
return config, ErrEmptyConfig
47+
}
48+
return config, err
49+
}
50+
51+
func (c *clientConfig) ClientConfig() (*restclient.Config, error) {
52+
config, err := c.defaultClientConfig.ClientConfig()
53+
// replace client-go's ErrEmptyConfig error with our custom, more verbose version
54+
if clientcmd.IsEmptyConfig(err) {
55+
return config, ErrEmptyConfig
56+
}
57+
return config, err
58+
}
59+
60+
func (c *clientConfig) Namespace() (string, bool, error) {
61+
namespace, ok, err := c.defaultClientConfig.Namespace()
62+
// replace client-go's ErrEmptyConfig error with our custom, more verbose version
63+
if clientcmd.IsEmptyConfig(err) {
64+
return namespace, ok, ErrEmptyConfig
65+
}
66+
return namespace, ok, err
67+
}
68+
69+
func (c *clientConfig) ConfigAccess() clientcmd.ConfigAccess {
70+
return c.defaultClientConfig.ConfigAccess()
71+
}

staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,7 @@ const (
5555
flagHTTPCacheDir = "cache-dir"
5656
)
5757

58-
var (
59-
defaultCacheDir = filepath.Join(homedir.HomeDir(), ".kube", "http-cache")
60-
ErrEmptyConfig = clientcmd.NewEmptyConfigError(`Missing or incomplete configuration info. Please point to an existing, complete config file:
61-
62-
1. Via the command-line flag --kubeconfig
63-
2. Via the KUBECONFIG environment variable
64-
3. In your home directory as ~/.kube/config
65-
66-
To view or setup config directly use the 'config' command.`)
67-
)
58+
var defaultCacheDir = filepath.Join(homedir.HomeDir(), ".kube", "http-cache")
6859

6960
// RESTClientGetter is an interface that the ConfigFlags describe to provide an easier way to mock for commands
7061
// and eliminate the direct coupling to a struct type. Users may wish to duplicate this type in their own packages
@@ -119,12 +110,7 @@ type ConfigFlags struct {
119110
// to a .kubeconfig file, loading rules, and config flag overrides.
120111
// Expects the AddFlags method to have been called.
121112
func (f *ConfigFlags) ToRESTConfig() (*rest.Config, error) {
122-
config, err := f.ToRawKubeConfigLoader().ClientConfig()
123-
// replace client-go's ErrEmptyConfig error with our custom, more verbose version
124-
if clientcmd.IsEmptyConfig(err) {
125-
return nil, ErrEmptyConfig
126-
}
127-
return config, err
113+
return f.ToRawKubeConfigLoader().ClientConfig()
128114
}
129115

130116
// ToRawKubeConfigLoader binds config flag values to config overrides
@@ -204,16 +190,11 @@ func (f *ConfigFlags) toRawKubeConfigLoader() clientcmd.ClientConfig {
204190
overrides.Timeout = *f.Timeout
205191
}
206192

207-
var clientConfig clientcmd.ClientConfig
208-
209193
// we only have an interactive prompt when a password is allowed
210194
if f.Password == nil {
211-
clientConfig = clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, overrides)
212-
} else {
213-
clientConfig = clientcmd.NewInteractiveDeferredLoadingClientConfig(loadingRules, overrides, os.Stdin)
195+
return &clientConfig{clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, overrides)}
214196
}
215-
216-
return clientConfig
197+
return &clientConfig{clientcmd.NewInteractiveDeferredLoadingClientConfig(loadingRules, overrides, os.Stdin)}
217198
}
218199

219200
// toRawKubePersistentConfigLoader binds config flag values to config overrides

0 commit comments

Comments
 (0)