mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
Merge pull request #72529 from liggitt/use-overridden-context-namespace
Use overridden context when determining if default namespace came from config
This commit is contained in:
commit
10bb353a95
@ -150,7 +150,12 @@ func (config *DeferredLoadingClientConfig) Namespace() (string, bool, error) {
|
|||||||
|
|
||||||
// if we got a default namespace, determine whether it was explicit or implicit
|
// if we got a default namespace, determine whether it was explicit or implicit
|
||||||
if raw, err := mergedKubeConfig.RawConfig(); err == nil {
|
if raw, err := mergedKubeConfig.RawConfig(); err == nil {
|
||||||
if context := raw.Contexts[raw.CurrentContext]; context != nil && len(context.Namespace) > 0 {
|
// determine the current context
|
||||||
|
currentContext := raw.CurrentContext
|
||||||
|
if config.overrides != nil && len(config.overrides.CurrentContext) > 0 {
|
||||||
|
currentContext = config.overrides.CurrentContext
|
||||||
|
}
|
||||||
|
if context := raw.Contexts[currentContext]; context != nil && len(context.Namespace) > 0 {
|
||||||
return ns, false, nil
|
return ns, false, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,7 @@ func (l *testLoader) Load() (*clientcmdapi.Config, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type testClientConfig struct {
|
type testClientConfig struct {
|
||||||
|
rawconfig *clientcmdapi.Config
|
||||||
config *restclient.Config
|
config *restclient.Config
|
||||||
namespace string
|
namespace string
|
||||||
namespaceSpecified bool
|
namespaceSpecified bool
|
||||||
@ -45,7 +46,10 @@ type testClientConfig struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *testClientConfig) RawConfig() (clientcmdapi.Config, error) {
|
func (c *testClientConfig) RawConfig() (clientcmdapi.Config, error) {
|
||||||
return clientcmdapi.Config{}, fmt.Errorf("unexpected call")
|
if c.rawconfig == nil {
|
||||||
|
return clientcmdapi.Config{}, fmt.Errorf("unexpected call")
|
||||||
|
}
|
||||||
|
return *c.rawconfig, nil
|
||||||
}
|
}
|
||||||
func (c *testClientConfig) ClientConfig() (*restclient.Config, error) {
|
func (c *testClientConfig) ClientConfig() (*restclient.Config, error) {
|
||||||
return c.config, c.err
|
return c.config, c.err
|
||||||
@ -224,10 +228,11 @@ func TestInClusterConfigNamespace(t *testing.T) {
|
|||||||
testCases := map[string]struct {
|
testCases := map[string]struct {
|
||||||
clientConfig *testClientConfig
|
clientConfig *testClientConfig
|
||||||
icc *testICC
|
icc *testICC
|
||||||
|
overrides *ConfigOverrides
|
||||||
|
|
||||||
checkedICC bool
|
checkedICC bool
|
||||||
result string
|
result string
|
||||||
ok bool
|
overridden bool
|
||||||
err error
|
err error
|
||||||
}{
|
}{
|
||||||
"in-cluster checked on empty error": {
|
"in-cluster checked on empty error": {
|
||||||
@ -256,8 +261,8 @@ func TestInClusterConfigNamespace(t *testing.T) {
|
|||||||
clientConfig: &testClientConfig{namespace: "test", namespaceSpecified: true},
|
clientConfig: &testClientConfig{namespace: "test", namespaceSpecified: true},
|
||||||
icc: &testICC{},
|
icc: &testICC{},
|
||||||
|
|
||||||
result: "test",
|
result: "test",
|
||||||
ok: true,
|
overridden: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
"in-cluster checked when namespace is not specified, but is defaulted": {
|
"in-cluster checked when namespace is not specified, but is defaulted": {
|
||||||
@ -266,7 +271,7 @@ func TestInClusterConfigNamespace(t *testing.T) {
|
|||||||
|
|
||||||
checkedICC: true,
|
checkedICC: true,
|
||||||
result: "test",
|
result: "test",
|
||||||
ok: false,
|
overridden: false,
|
||||||
},
|
},
|
||||||
|
|
||||||
"in-cluster error returned when config is empty": {
|
"in-cluster error returned when config is empty": {
|
||||||
@ -294,7 +299,7 @@ func TestInClusterConfigNamespace(t *testing.T) {
|
|||||||
|
|
||||||
checkedICC: true,
|
checkedICC: true,
|
||||||
result: "test",
|
result: "test",
|
||||||
ok: true,
|
overridden: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
"in-cluster config returned when config is empty and namespace is defaulted but not explicitly set": {
|
"in-cluster config returned when config is empty and namespace is defaulted but not explicitly set": {
|
||||||
@ -309,20 +314,41 @@ func TestInClusterConfigNamespace(t *testing.T) {
|
|||||||
|
|
||||||
checkedICC: true,
|
checkedICC: true,
|
||||||
result: "test",
|
result: "test",
|
||||||
ok: false,
|
overridden: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
"overridden context used to verify explicit namespace in config": {
|
||||||
|
clientConfig: &testClientConfig{
|
||||||
|
namespace: "default",
|
||||||
|
namespaceSpecified: false, // a namespace that comes from a context is not considered overridden
|
||||||
|
rawconfig: &clientcmdapi.Config{Contexts: map[string]*clientcmdapi.Context{"overridden-context": {Namespace: "default"}}},
|
||||||
|
},
|
||||||
|
overrides: &ConfigOverrides{CurrentContext: "overridden-context"},
|
||||||
|
icc: &testICC{
|
||||||
|
possible: true,
|
||||||
|
testClientConfig: testClientConfig{
|
||||||
|
namespace: "icc",
|
||||||
|
namespaceSpecified: false, // a namespace that comes from icc is not considered overridden
|
||||||
|
},
|
||||||
|
},
|
||||||
|
checkedICC: true,
|
||||||
|
result: "default",
|
||||||
|
overridden: false, // a namespace that comes from a context is not considered overridden
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for name, test := range testCases {
|
for name, test := range testCases {
|
||||||
c := &DeferredLoadingClientConfig{icc: test.icc}
|
t.Run(name, func(t *testing.T) {
|
||||||
c.clientConfig = test.clientConfig
|
c := &DeferredLoadingClientConfig{icc: test.icc, overrides: test.overrides}
|
||||||
|
c.clientConfig = test.clientConfig
|
||||||
|
|
||||||
ns, ok, err := c.Namespace()
|
ns, overridden, err := c.Namespace()
|
||||||
if test.icc.called != test.checkedICC {
|
if test.icc.called != test.checkedICC {
|
||||||
t.Errorf("%s: unexpected in-cluster-config call %t", name, test.icc.called)
|
t.Errorf("%s: unexpected in-cluster-config call %t", name, test.icc.called)
|
||||||
}
|
}
|
||||||
if err != test.err || ns != test.result || ok != test.ok {
|
if err != test.err || ns != test.result || overridden != test.overridden {
|
||||||
t.Errorf("%s: unexpected result: %v %s %t", name, err, ns, ok)
|
t.Errorf("%s: unexpected result: %v %s %t", name, err, ns, overridden)
|
||||||
}
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user