config: Fix persist_config flag and function calls

The persist_config flag was setting the kwargs['config_persister'] to
the result of the function kcfg.save_changes and not the function
kcfg.save_changes itself.

Once this is fixed, the second problem was that the function was called
with an argument when it's defined without argument so an exception was
raised.
This commit is contained in:
Fabrice Rabaute 2019-10-04 16:52:20 -07:00
parent 7ea5cb4d76
commit 64662bb738
No known key found for this signature in database
GPG Key ID: 230B0BA8E423D606
2 changed files with 23 additions and 4 deletions

View File

@ -336,7 +336,7 @@ class KubeConfigLoader(object):
provider.value['access-token'] = token_response['accessToken']
provider.value['expires-on'] = token_response['expiresOn']
if self._config_persister:
self._config_persister(self._config.value)
self._config_persister()
def _load_gcp_token(self, provider):
if (('config' not in provider) or
@ -357,7 +357,7 @@ class KubeConfigLoader(object):
provider.value['access-token'] = credentials.token
provider.value['expiry'] = format_rfc3339(credentials.expiry)
if self._config_persister:
self._config_persister(self._config.value)
self._config_persister()
def _load_oid_token(self, provider):
if 'config' not in provider:
@ -398,7 +398,7 @@ class KubeConfigLoader(object):
self._refresh_oidc(provider)
if self._config_persister:
self._config_persister(self._config.value)
self._config_persister()
self.token = "Bearer %s" % provider['config']['id-token']
@ -691,7 +691,7 @@ def _get_kube_config_loader_for_yaml_file(
kcfg = KubeConfigMerger(filename)
if persist_config and 'config_persister' not in kwargs:
kwargs['config_persister'] = kcfg.save_changes()
kwargs['config_persister'] = kcfg.save_changes
if kcfg.config is None:
raise ConfigException(

View File

@ -33,6 +33,7 @@ from .kube_config import (ENV_KUBECONFIG_PATH_SEPARATOR, CommandTokenSource,
ConfigNode, FileOrData, KubeConfigLoader,
KubeConfigMerger, _cleanup_temp_files,
_create_temp_file_with_content,
_get_kube_config_loader_for_yaml_file,
list_kube_config_contexts, load_kube_config,
new_client_from_config)
@ -1388,6 +1389,24 @@ class TestKubeConfigLoader(BaseTestCase):
"scopes can only be used when kubectl is using "
"a gcp service account key")
def test__get_kube_config_loader_for_yaml_file_no_persist(self):
expected = FakeConfig(host=TEST_HOST,
token=BEARER_TOKEN_FORMAT % TEST_DATA_BASE64)
config_file = self._create_temp_file(
yaml.safe_dump(self.TEST_KUBE_CONFIG))
actual = _get_kube_config_loader_for_yaml_file(config_file)
self.assertIsNone(actual._config_persister)
def test__get_kube_config_loader_for_yaml_file_persist(self):
expected = FakeConfig(host=TEST_HOST,
token=BEARER_TOKEN_FORMAT % TEST_DATA_BASE64)
config_file = self._create_temp_file(
yaml.safe_dump(self.TEST_KUBE_CONFIG))
actual = _get_kube_config_loader_for_yaml_file(config_file,
persist_config=True)
self.assertTrue(callable(actual._config_persister))
self.assertEquals(actual._config_persister.__name__, "save_changes")
class TestKubernetesClientConfiguration(BaseTestCase):
# Verifies properties of kubernetes.client.Configuration.