Move CachingRESTClientGetter into its own package

This commit is contained in:
Morten Torkildsen 2020-05-18 20:54:29 -07:00
parent eb10caede9
commit 7f4ec70de2
2 changed files with 46 additions and 36 deletions

View File

@ -7,14 +7,9 @@ import (
"flag"
"os"
"strings"
"sync"
"github.com/spf13/cobra"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/client-go/discovery"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/kubectl/pkg/cmd/util"
"k8s.io/kubectl/pkg/util/logs"
"sigs.k8s.io/cli-utils/cmd/apply"
@ -23,6 +18,7 @@ import (
"sigs.k8s.io/cli-utils/cmd/initcmd"
"sigs.k8s.io/cli-utils/cmd/preview"
"sigs.k8s.io/cli-utils/cmd/status"
"sigs.k8s.io/cli-utils/pkg/util/factory"
// This is here rather than in the libraries because of
// https://github.com/kubernetes-sigs/kustomize/issues/2060
@ -40,8 +36,8 @@ func main() {
flags := cmd.PersistentFlags()
kubeConfigFlags := genericclioptions.NewConfigFlags(true).WithDeprecatedPasswordFlag()
kubeConfigFlags.AddFlags(flags)
matchVersionKubeConfigFlags := util.NewMatchVersionFlags(&cachingRESTClientGetter{
delegate: kubeConfigFlags,
matchVersionKubeConfigFlags := util.NewMatchVersionFlags(&factory.CachingRESTClientGetter{
Delegate: kubeConfigFlags,
})
matchVersionKubeConfigFlags.AddFlags(cmd.PersistentFlags())
cmd.PersistentFlags().AddGoFlagSet(flag.CommandLine)
@ -86,32 +82,3 @@ func updateHelp(names []string, c *cobra.Command) {
c.Example = strings.ReplaceAll(c.Example, "kubectl "+name, "kapply "+name)
}
}
// cachingRESTClientGetter caches the RESTMapper so every call to
// ToRESTMapper will get a reference to the same mapper.
type cachingRESTClientGetter struct {
once sync.Once
delegate genericclioptions.RESTClientGetter
mapper meta.RESTMapper
}
func (c *cachingRESTClientGetter) ToRESTConfig() (*rest.Config, error) {
return c.delegate.ToRESTConfig()
}
func (c *cachingRESTClientGetter) ToDiscoveryClient() (discovery.CachedDiscoveryInterface, error) {
return c.delegate.ToDiscoveryClient()
}
func (c *cachingRESTClientGetter) ToRESTMapper() (meta.RESTMapper, error) {
var err error
c.once.Do(func() {
c.mapper, err = c.delegate.ToRESTMapper()
})
return c.mapper, err
}
func (c *cachingRESTClientGetter) ToRawKubeConfigLoader() clientcmd.ClientConfig {
return c.delegate.ToRawKubeConfigLoader()
}

View File

@ -0,0 +1,43 @@
// Copyright 2020 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0
package factory
import (
"sync"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/client-go/discovery"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
)
// CachingRESTClientGetter caches the RESTMapper so every call to
// ToRESTMapper will get a reference to the same mapper.
type CachingRESTClientGetter struct {
once sync.Once
Delegate genericclioptions.RESTClientGetter
mapper meta.RESTMapper
}
func (c *CachingRESTClientGetter) ToRESTConfig() (*rest.Config, error) {
return c.Delegate.ToRESTConfig()
}
func (c *CachingRESTClientGetter) ToDiscoveryClient() (discovery.CachedDiscoveryInterface, error) {
return c.Delegate.ToDiscoveryClient()
}
func (c *CachingRESTClientGetter) ToRESTMapper() (meta.RESTMapper, error) {
var err error
c.once.Do(func() {
c.mapper, err = c.Delegate.ToRESTMapper()
})
return c.mapper, err
}
func (c *CachingRESTClientGetter) ToRawKubeConfigLoader() clientcmd.ClientConfig {
return c.Delegate.ToRawKubeConfigLoader()
}