diff --git a/kubernetes/base/config/kube_config.py b/kubernetes/base/config/kube_config.py index 7077955ca6..5ccea7e2d9 100644 --- a/kubernetes/base/config/kube_config.py +++ b/kubernetes/base/config/kube_config.py @@ -728,7 +728,7 @@ def load_config(self, path): for item in ('clusters', 'contexts', 'users'): self._merge(item, config.get(item, []) or [], path) - if 'current-context' in config: + if 'current-context' in config and ('current-context' not in self.config_merged or self.config_merged.value['current-context'] == ""): self.config_merged.value['current-context'] = config['current-context'] self.config_files[path] = config diff --git a/kubernetes/base/config/kube_config_test.py b/kubernetes/base/config/kube_config_test.py index ca512ad6cd..752bc23eaa 100644 --- a/kubernetes/base/config/kube_config_test.py +++ b/kubernetes/base/config/kube_config_test.py @@ -1842,6 +1842,38 @@ class TestKubeConfigMerger(BaseTestCase): }, ] }] + TEST_KUBE_CONFIG_SET3 = [{ + "current-context": "", + "contexts": [ + { + "name": "context1", + "context": { + "cluster": "cluster1" + } + }, + { + "name": "context2", + "context": { + "cluster": "cluster2" + } + }, + ], + "clusters": [ + { + "name": "cluster1", + "cluster": { + "server": TEST_HOST + } + }, + { + "name": "cluster2", + "cluster": { + "server": TEST_HOST + } + }, + ], + "users": [] + }] def _create_multi_config(self, parts): files = [] @@ -1892,6 +1924,19 @@ def test_merge_with_context_in_different_file(self): self.assertEqual(BEARER_TOKEN_FORMAT % TEST_DATA_BASE64, client.configuration.api_key['authorization']) + def test_current_context_in_different_file(self): + cases = [ + ([{"current-context": "context1"}] + self.TEST_KUBE_CONFIG_SET3, 'context1'), + (self.TEST_KUBE_CONFIG_SET3 + [{"current-context": "context2"}], 'context2'), + ([{}, {"current-context": "context2"}] + self.TEST_KUBE_CONFIG_SET3, 'context2'), + ([{"current-context": "context1"}, {"current-context": "context2"}] + self.TEST_KUBE_CONFIG_SET3, 'context1'), + ] + + for kube_config_set, expected_current_context_name in cases: + kubeconfigs = self._create_multi_config(kube_config_set) + _, current_context = list_kube_config_contexts(config_file=kubeconfigs) + self.assertEqual(current_context["name"], expected_current_context_name) + def test_save_changes(self): kubeconfigs = self._create_multi_config(self.TEST_KUBE_CONFIG_SET1)