From 3d8cfaacbe187e492cfa489034891ac7f7beb48c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arda=20G=C3=BC=C3=A7l=C3=BC?= Date: Thu, 14 Apr 2022 10:52:31 +0300 Subject: [PATCH 1/3] Introduce KUBECACHEDIR environment variable to override default discovery cache dir This PR introduces new environment variable, namely `KUBECACHEDIR`. `KUBECACHEDIR` is used to override default discovery cache directory for all commands(whose default value is $HOME/.kube/cache). `--cache-dir` flag per command has higher precedence than `KUBECACHEDIR` and default directory path. --- .../cli-runtime/pkg/genericclioptions/config_flags.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go b/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go index 0d604b9c2fb..63af224d098 100644 --- a/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go +++ b/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go @@ -276,12 +276,18 @@ func (f *ConfigFlags) toDiscoveryClient() (discovery.CachedDiscoveryInterface, e config.QPS = f.discoveryQPS cacheDir := defaultCacheDir + if kcd := os.Getenv("KUBECACHEDIR"); kcd != "" { + cacheDir = kcd + } // retrieve a user-provided value for the "cache-dir" // override httpCacheDir and discoveryCacheDir if user-value is given. - if f.CacheDir != nil { + // user-provided value has higher precedence than default + // and KUBECACHEDIR environment variable. + if f.CacheDir != nil && *f.CacheDir != "" { cacheDir = *f.CacheDir } + httpCacheDir := filepath.Join(cacheDir, "http") discoveryCacheDir := computeDiscoverCacheDir(filepath.Join(cacheDir, "discovery"), config.Host) @@ -420,7 +426,7 @@ func NewConfigFlags(usePersistentConfig bool) *ConfigFlags { Timeout: utilpointer.String("0"), KubeConfig: utilpointer.String(""), - CacheDir: utilpointer.String(defaultCacheDir), + CacheDir: utilpointer.String(""), ClusterName: utilpointer.String(""), AuthInfoName: utilpointer.String(""), Context: utilpointer.String(""), From 937c7677a27450cc29c9076fe7dad5a67f86a211 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arda=20G=C3=BC=C3=A7l=C3=BC?= Date: Fri, 29 Apr 2022 13:43:42 +0300 Subject: [PATCH 2/3] Only handle if defaultCacheDir is changed --- .../k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go b/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go index 63af224d098..fe63cbb9a9d 100644 --- a/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go +++ b/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go @@ -284,7 +284,7 @@ func (f *ConfigFlags) toDiscoveryClient() (discovery.CachedDiscoveryInterface, e // override httpCacheDir and discoveryCacheDir if user-value is given. // user-provided value has higher precedence than default // and KUBECACHEDIR environment variable. - if f.CacheDir != nil && *f.CacheDir != "" { + if f.CacheDir != nil && *f.CacheDir != "" && *f.CacheDir != defaultCacheDir { cacheDir = *f.CacheDir } @@ -426,7 +426,7 @@ func NewConfigFlags(usePersistentConfig bool) *ConfigFlags { Timeout: utilpointer.String("0"), KubeConfig: utilpointer.String(""), - CacheDir: utilpointer.String(""), + CacheDir: utilpointer.String(defaultCacheDir), ClusterName: utilpointer.String(""), AuthInfoName: utilpointer.String(""), Context: utilpointer.String(""), From 37c6a220dcb0af41184a4581b86f80082d5ed805 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arda=20G=C3=BC=C3=A7l=C3=BC?= Date: Mon, 30 May 2022 09:31:35 +0300 Subject: [PATCH 3/3] Remove defaultCacheDir and use func instead --- .../pkg/genericclioptions/config_flags.go | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go b/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go index fe63cbb9a9d..402caa86bf0 100644 --- a/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go +++ b/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go @@ -57,10 +57,6 @@ const ( flagCacheDir = "cache-dir" ) -var ( - defaultCacheDir = filepath.Join(homedir.HomeDir(), ".kube", "cache") -) - // RESTClientGetter is an interface that the ConfigFlags describe to provide an easier way to mock for commands // and eliminate the direct coupling to a struct type. Users may wish to duplicate this type in their own packages // as per the golang type overlapping. @@ -275,16 +271,13 @@ func (f *ConfigFlags) toDiscoveryClient() (discovery.CachedDiscoveryInterface, e config.Burst = f.discoveryBurst config.QPS = f.discoveryQPS - cacheDir := defaultCacheDir - if kcd := os.Getenv("KUBECACHEDIR"); kcd != "" { - cacheDir = kcd - } + cacheDir := getDefaultCacheDir() // retrieve a user-provided value for the "cache-dir" // override httpCacheDir and discoveryCacheDir if user-value is given. // user-provided value has higher precedence than default // and KUBECACHEDIR environment variable. - if f.CacheDir != nil && *f.CacheDir != "" && *f.CacheDir != defaultCacheDir { + if f.CacheDir != nil && *f.CacheDir != "" && *f.CacheDir != getDefaultCacheDir() { cacheDir = *f.CacheDir } @@ -294,6 +287,17 @@ func (f *ConfigFlags) toDiscoveryClient() (discovery.CachedDiscoveryInterface, e return diskcached.NewCachedDiscoveryClientForConfig(config, discoveryCacheDir, httpCacheDir, time.Duration(6*time.Hour)) } +// getDefaultCacheDir returns default caching directory path. +// it first looks at KUBECACHEDIR env var if it is set, otherwise +// it returns standard kube cache dir. +func getDefaultCacheDir() string { + if kcd := os.Getenv("KUBECACHEDIR"); kcd != "" { + return kcd + } + + return filepath.Join(homedir.HomeDir(), ".kube", "cache") +} + // ToRESTMapper returns a mapper. func (f *ConfigFlags) ToRESTMapper() (meta.RESTMapper, error) { if f.usePersistentConfig { @@ -426,7 +430,7 @@ func NewConfigFlags(usePersistentConfig bool) *ConfigFlags { Timeout: utilpointer.String("0"), KubeConfig: utilpointer.String(""), - CacheDir: utilpointer.String(defaultCacheDir), + CacheDir: utilpointer.String(getDefaultCacheDir()), ClusterName: utilpointer.String(""), AuthInfoName: utilpointer.String(""), Context: utilpointer.String(""),