mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-01-06 07:57:35 +00:00
Merge pull request #50578 from pwittrock/depsutils
Automatic merge from submit-queue (batch tested with PRs 51047, 48573, 50764, 51092, 50578) Library updates to better support removing kubectl deps on kubernetes/kubernetes **What this PR does / why we need it**: **Which issue this PR fixes**: kubernetes/kubectl#50 **Special notes for your reviewer**: **Release note**: ```release-note NONE ```
This commit is contained in:
@@ -67,6 +67,7 @@ go_library(
|
||||
"//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library",
|
||||
"//vendor/k8s.io/client-go/discovery:go_default_library",
|
||||
"//vendor/k8s.io/client-go/dynamic:go_default_library",
|
||||
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
|
||||
"//vendor/k8s.io/client-go/rest:go_default_library",
|
||||
"//vendor/k8s.io/client-go/tools/clientcmd:go_default_library",
|
||||
"//vendor/k8s.io/client-go/util/homedir:go_default_library",
|
||||
|
||||
@@ -21,6 +21,7 @@ import (
|
||||
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/client-go/discovery"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
restclient "k8s.io/client-go/rest"
|
||||
"k8s.io/client-go/tools/clientcmd"
|
||||
fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset"
|
||||
@@ -58,6 +59,35 @@ type ClientCache struct {
|
||||
// argument evaluation
|
||||
discoveryClientFactory DiscoveryClientFactory
|
||||
discoveryClient discovery.DiscoveryInterface
|
||||
|
||||
kubernetesClientCache kubernetesClientCache
|
||||
}
|
||||
|
||||
// kubernetesClientCache creates a new kubernetes.Clientset one time
|
||||
// and then returns the result for all future requests
|
||||
type kubernetesClientCache struct {
|
||||
// once makes sure the client is only initialized once
|
||||
once sync.Once
|
||||
// client is the cached client value
|
||||
client *kubernetes.Clientset
|
||||
// err is the cached error value
|
||||
err error
|
||||
}
|
||||
|
||||
// KubernetesClientSetForVersion returns a new kubernetes.Clientset. It will cache the value
|
||||
// the first time it is called and return the cached value on subsequent calls.
|
||||
// If an error is encountered the first time KubernetesClientSetForVersion is called,
|
||||
// the error will be cached.
|
||||
func (c *ClientCache) KubernetesClientSetForVersion(requiredVersion *schema.GroupVersion) (*kubernetes.Clientset, error) {
|
||||
c.kubernetesClientCache.once.Do(func() {
|
||||
config, err := c.ClientConfigForVersion(requiredVersion)
|
||||
if err != nil {
|
||||
c.kubernetesClientCache.err = err
|
||||
return
|
||||
}
|
||||
c.kubernetesClientCache.client, c.kubernetesClientCache.err = kubernetes.NewForConfig(config)
|
||||
})
|
||||
return c.kubernetesClientCache.client, c.kubernetesClientCache.err
|
||||
}
|
||||
|
||||
// also looks up the discovery client. We can't do this during init because the flags won't have been set
|
||||
|
||||
@@ -43,6 +43,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/runtime/serializer/json"
|
||||
"k8s.io/apimachinery/pkg/watch"
|
||||
"k8s.io/client-go/discovery"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
restclient "k8s.io/client-go/rest"
|
||||
"k8s.io/client-go/tools/clientcmd"
|
||||
fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset"
|
||||
@@ -91,6 +92,10 @@ type ClientAccessFactory interface {
|
||||
|
||||
// ClientSet gives you back an internal, generated clientset
|
||||
ClientSet() (internalclientset.Interface, error)
|
||||
|
||||
// KubernetesClientSet gives you back an external clientset
|
||||
KubernetesClientSet() (*kubernetes.Clientset, error)
|
||||
|
||||
// Returns a RESTClient for accessing Kubernetes resources or an error.
|
||||
RESTClient() (*restclient.RESTClient, error)
|
||||
// Returns a client.Config for accessing the Kubernetes server.
|
||||
|
||||
@@ -37,6 +37,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
utilflag "k8s.io/apiserver/pkg/util/flag"
|
||||
"k8s.io/client-go/discovery"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
restclient "k8s.io/client-go/rest"
|
||||
"k8s.io/client-go/tools/clientcmd"
|
||||
"k8s.io/client-go/util/homedir"
|
||||
@@ -167,6 +168,10 @@ func (f *ring0Factory) DiscoveryClient() (discovery.CachedDiscoveryInterface, er
|
||||
return f.discoveryFactory.DiscoveryClient()
|
||||
}
|
||||
|
||||
func (f *ring0Factory) KubernetesClientSet() (*kubernetes.Clientset, error) {
|
||||
return f.clientCache.KubernetesClientSetForVersion(nil)
|
||||
}
|
||||
|
||||
func (f *ring0Factory) ClientSet() (internalclientset.Interface, error) {
|
||||
return f.clientCache.ClientSetForVersion(nil)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user