mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-16 23:29:21 +00:00
Support for using a client-go client from kubectl
This commit is contained in:
parent
107ead78ce
commit
e97a18b435
@ -35,6 +35,7 @@ go_library(
|
|||||||
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/discovery:go_default_library",
|
"//vendor/k8s.io/client-go/discovery: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/rest:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/rest/fake:go_default_library",
|
"//vendor/k8s.io/client-go/rest/fake:go_default_library",
|
||||||
],
|
],
|
||||||
|
@ -34,6 +34,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/runtime/serializer"
|
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||||
"k8s.io/client-go/discovery"
|
"k8s.io/client-go/discovery"
|
||||||
|
"k8s.io/client-go/kubernetes"
|
||||||
restclient "k8s.io/client-go/rest"
|
restclient "k8s.io/client-go/rest"
|
||||||
"k8s.io/client-go/rest/fake"
|
"k8s.io/client-go/rest/fake"
|
||||||
fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset"
|
fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset"
|
||||||
@ -307,6 +308,10 @@ func (f *FakeFactory) RESTClient() (*restclient.RESTClient, error) {
|
|||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *FakeFactory) KubernetesClientSet() (*kubernetes.Clientset, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (f *FakeFactory) ClientSet() (internalclientset.Interface, error) {
|
func (f *FakeFactory) ClientSet() (internalclientset.Interface, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
@ -582,6 +587,33 @@ func (f *fakeAPIFactory) JSONEncoder() runtime.Encoder {
|
|||||||
return testapi.Default.Codec()
|
return testapi.Default.Codec()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *fakeAPIFactory) KubernetesClientSet() (*kubernetes.Clientset, error) {
|
||||||
|
fakeClient := f.tf.Client.(*fake.RESTClient)
|
||||||
|
clientset := kubernetes.NewForConfigOrDie(f.tf.ClientConfig)
|
||||||
|
|
||||||
|
clientset.CoreV1().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
||||||
|
clientset.AuthorizationV1().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
||||||
|
clientset.AuthorizationV1beta1().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
||||||
|
clientset.AuthorizationV1().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
||||||
|
clientset.AuthorizationV1beta1().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
||||||
|
clientset.AutoscalingV1().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
||||||
|
clientset.AutoscalingV2alpha1().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
||||||
|
clientset.BatchV1().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
||||||
|
clientset.BatchV2alpha1().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
||||||
|
clientset.CertificatesV1beta1().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
||||||
|
clientset.ExtensionsV1beta1().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
||||||
|
clientset.RbacV1alpha1().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
||||||
|
clientset.RbacV1beta1().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
||||||
|
clientset.StorageV1().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
||||||
|
clientset.StorageV1beta1().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
||||||
|
clientset.AppsV1beta1().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
||||||
|
clientset.AppsV1beta2().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
||||||
|
clientset.PolicyV1beta1().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
||||||
|
clientset.DiscoveryClient.RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
||||||
|
|
||||||
|
return clientset, f.tf.Err
|
||||||
|
}
|
||||||
|
|
||||||
func (f *fakeAPIFactory) ClientSet() (internalclientset.Interface, error) {
|
func (f *fakeAPIFactory) ClientSet() (internalclientset.Interface, error) {
|
||||||
// Swap the HTTP client out of the REST client with the fake
|
// Swap the HTTP client out of the REST client with the fake
|
||||||
// version.
|
// version.
|
||||||
|
@ -66,6 +66,7 @@ go_library(
|
|||||||
"//vendor/k8s.io/apiserver/pkg/util/flag:go_default_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/discovery:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/dynamic: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/rest:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/tools/clientcmd:go_default_library",
|
"//vendor/k8s.io/client-go/tools/clientcmd:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/util/homedir: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/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/client-go/discovery"
|
"k8s.io/client-go/discovery"
|
||||||
|
"k8s.io/client-go/kubernetes"
|
||||||
restclient "k8s.io/client-go/rest"
|
restclient "k8s.io/client-go/rest"
|
||||||
"k8s.io/client-go/tools/clientcmd"
|
"k8s.io/client-go/tools/clientcmd"
|
||||||
fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset"
|
fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset"
|
||||||
@ -58,6 +59,34 @@ type ClientCache struct {
|
|||||||
// argument evaluation
|
// argument evaluation
|
||||||
discoveryClientFactory DiscoveryClientFactory
|
discoveryClientFactory DiscoveryClientFactory
|
||||||
discoveryClient discovery.DiscoveryInterface
|
discoveryClient discovery.DiscoveryInterface
|
||||||
|
|
||||||
|
kubernetesClientLoader KubernetesClientCache
|
||||||
|
}
|
||||||
|
|
||||||
|
// kubernetesClientLoader provides a new kubernetes.Clientset
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
// KubernetesClientSet 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 KubernetesClientSet is called,
|
||||||
|
// the error will be cached.
|
||||||
|
func (c *ClientCache) KubernetesClientSet(requiredVersion *schema.GroupVersion) (*kubernetes.Clientset, error) {
|
||||||
|
c.kubernetesClientLoader.once.Do(func() {
|
||||||
|
config, err := c.ClientConfigForVersion(requiredVersion)
|
||||||
|
if err != nil {
|
||||||
|
c.kubernetesClientLoader.err = err
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.kubernetesClientLoader.client, c.kubernetesClientLoader.err = kubernetes.NewForConfig(config)
|
||||||
|
})
|
||||||
|
return c.kubernetesClientLoader.client, c.kubernetesClientLoader.err
|
||||||
}
|
}
|
||||||
|
|
||||||
// also looks up the discovery client. We can't do this during init because the flags won't have been set
|
// 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/runtime/serializer/json"
|
||||||
"k8s.io/apimachinery/pkg/watch"
|
"k8s.io/apimachinery/pkg/watch"
|
||||||
"k8s.io/client-go/discovery"
|
"k8s.io/client-go/discovery"
|
||||||
|
"k8s.io/client-go/kubernetes"
|
||||||
restclient "k8s.io/client-go/rest"
|
restclient "k8s.io/client-go/rest"
|
||||||
"k8s.io/client-go/tools/clientcmd"
|
"k8s.io/client-go/tools/clientcmd"
|
||||||
fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset"
|
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 gives you back an internal, generated clientset
|
||||||
ClientSet() (internalclientset.Interface, error)
|
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.
|
// Returns a RESTClient for accessing Kubernetes resources or an error.
|
||||||
RESTClient() (*restclient.RESTClient, error)
|
RESTClient() (*restclient.RESTClient, error)
|
||||||
// Returns a client.Config for accessing the Kubernetes server.
|
// Returns a client.Config for accessing the Kubernetes server.
|
||||||
|
@ -37,6 +37,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
utilflag "k8s.io/apiserver/pkg/util/flag"
|
utilflag "k8s.io/apiserver/pkg/util/flag"
|
||||||
"k8s.io/client-go/discovery"
|
"k8s.io/client-go/discovery"
|
||||||
|
"k8s.io/client-go/kubernetes"
|
||||||
restclient "k8s.io/client-go/rest"
|
restclient "k8s.io/client-go/rest"
|
||||||
"k8s.io/client-go/tools/clientcmd"
|
"k8s.io/client-go/tools/clientcmd"
|
||||||
"k8s.io/client-go/util/homedir"
|
"k8s.io/client-go/util/homedir"
|
||||||
@ -167,6 +168,10 @@ func (f *ring0Factory) DiscoveryClient() (discovery.CachedDiscoveryInterface, er
|
|||||||
return f.discoveryFactory.DiscoveryClient()
|
return f.discoveryFactory.DiscoveryClient()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *ring0Factory) KubernetesClientSet() (*kubernetes.Clientset, error) {
|
||||||
|
return f.clientCache.KubernetesClientSet(nil)
|
||||||
|
}
|
||||||
|
|
||||||
func (f *ring0Factory) ClientSet() (internalclientset.Interface, error) {
|
func (f *ring0Factory) ClientSet() (internalclientset.Interface, error) {
|
||||||
return f.clientCache.ClientSetForVersion(nil)
|
return f.clientCache.ClientSetForVersion(nil)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user