From 22db3d9d5dfc2d2493936a6b93198257d8111f25 Mon Sep 17 00:00:00 2001 From: Sergei Uversky Date: Mon, 21 Sep 2020 16:04:05 -0600 Subject: [PATCH 1/3] view: Add --raw flag for kubectl >= 1.19 Starting with kubectl 1.19, `kubectl view` returns REDACTED certificate data, and you need to pass the `--raw` flag for identical output to previous versions. --- kubeconfig/kubeconfig.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/kubeconfig/kubeconfig.py b/kubeconfig/kubeconfig.py index ec5eb43..a807a12 100644 --- a/kubeconfig/kubeconfig.py +++ b/kubeconfig/kubeconfig.py @@ -15,6 +15,7 @@ # Check to see our changes. print(conf.view()) """ +import json import yaml @@ -85,7 +86,7 @@ def delete_context(self, name): Deletes a context entry from your config. :param str name: The name of the context to delete from your config. - :raise: :py:exc:`KubectlCommandError ` + :raise: :py:exc:`KubectlCommandError ` when an invalid context name is specified. """ self._run_kubectl_config('delete-context', name) @@ -229,11 +230,24 @@ def use_context(self, name): """ self._run_kubectl_config('use-context', name) - def view(self): + def view(self, raw=False): """ + :param bool raw: Set to true to return raw certificate data. Defaults + to false, where sensitive tokens are returned as REDACTED. Valid + only for kubectl versions >= 1.19, where the --raw flag was + introduced; output for previous kubectl versions is already raw. :rtype: dict :return: A dict representing your full kubeconfig file, after all merging has been done. """ - conf_doc_str = self._run_kubectl_config('view') + + args = ['view'] + version = json.loads( + self._run(subcmd_args="version -o json --client".split()) + ) + should_be_raw = raw and version["major"] >= 1 and version["minor"] >= 19 + + if should_be_raw: + args.append("--raw") + conf_doc_str = self._run_kubectl_config(*args) return yaml.safe_load(conf_doc_str) From 9288276c21782964dc1f6cb620b0ead1855db241 Mon Sep 17 00:00:00 2001 From: Sergei Uversky Date: Mon, 21 Sep 2020 16:06:16 -0600 Subject: [PATCH 2/3] Bump version --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a2e1fa9..dddcbda 100644 --- a/setup.py +++ b/setup.py @@ -9,7 +9,7 @@ author_email='greg@gctaylor.com', license='BSD', url='http://kubeconfig-python.readthedocs.io', - version='1.1.1', + version='1.2.0', packages=find_packages(), install_requires=[ 'PyYAML>=5.2', From f2e5f94db73415c7cfce22c7dae92a406ccf259c Mon Sep 17 00:00:00 2001 From: Sergei Uversky Date: Mon, 21 Sep 2020 16:11:16 -0600 Subject: [PATCH 3/3] Add missing clientVersion subkey --- kubeconfig/kubeconfig.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kubeconfig/kubeconfig.py b/kubeconfig/kubeconfig.py index a807a12..0d44ea1 100644 --- a/kubeconfig/kubeconfig.py +++ b/kubeconfig/kubeconfig.py @@ -244,7 +244,7 @@ def view(self, raw=False): args = ['view'] version = json.loads( self._run(subcmd_args="version -o json --client".split()) - ) + )["clientVersion"] should_be_raw = raw and version["major"] >= 1 and version["minor"] >= 19 if should_be_raw: