This is an automated email from the ASF dual-hosted git repository.
zhongxjian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-kubernetes.git
The following commit(s) were added to refs/heads/master by this push:
new c6beb4e8 [operator] Supplemental factory logic
c6beb4e8 is described below
commit c6beb4e8e11549c5a7d20fb84dd1b71c6b503524
Author: mfordjody <[email protected]>
AuthorDate: Mon Dec 9 10:41:27 2024 +0800
[operator] Supplemental factory logic
---
pkg/kube/client_factory.go | 57 +++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 54 insertions(+), 3 deletions(-)
diff --git a/pkg/kube/client_factory.go b/pkg/kube/client_factory.go
index c2d89ddb..5d9e544e 100644
--- a/pkg/kube/client_factory.go
+++ b/pkg/kube/client_factory.go
@@ -1,12 +1,63 @@
package kube
-import "k8s.io/client-go/tools/clientcmd"
+import (
+ "github.com/apache/dubbo-kubernetes/pkg/laziness"
+ "k8s.io/apimachinery/pkg/api/meta"
+ "k8s.io/client-go/discovery"
+ diskcached "k8s.io/client-go/discovery/cached/disk"
+ "k8s.io/client-go/discovery/cached/memory"
+ "k8s.io/client-go/rest"
+ "k8s.io/client-go/restmapper"
+ "k8s.io/client-go/tools/clientcmd"
+ "k8s.io/client-go/util/homedir"
+ "path/filepath"
+ "time"
+)
type clientFactory struct {
- clientConfig clientcmd.ClientConfig
+ clientConfig clientcmd.ClientConfig
+ mapper laziness.Laziness[meta.RESTMapper]
+ discoveryClient laziness.Laziness[discovery.CachedDiscoveryInterface]
}
func newClientFactory(clientConfig clientcmd.ClientConfig, diskCache bool)
*clientFactory {
- cf := &clientFactory{clientConfig: clientConfig}
+ cf := &clientFactory{
+ clientConfig: clientConfig,
+ }
+ cf.discoveryClient = laziness.NewWithRetry(func()
(discovery.CachedDiscoveryInterface, error) {
+ restConfig, err := cf.ToRestConfig()
+ if err != nil {
+ return nil, err
+ }
+ if diskCache {
+ cacheDir := filepath.Join(homedir.HomeDir(), ".kube",
"cache")
+ httpCacheDir := filepath.Join(cacheDir, "http")
+ return
diskcached.NewCachedDiscoveryClientForConfig(restConfig, nil, httpCacheDir,
6*time.Hour)
+ }
+ d, err := discovery.NewDiscoveryClientForConfig(restConfig)
+ if err != nil {
+ return nil, err
+ }
+ return memory.NewMemCacheClient(d), nil
+ })
+ cf.mapper = laziness.NewWithRetry(func() (meta.ResettableRESTMapper,
error) {
+ discoveryClient, err := cf.ToDiscoveryClient()
+ if err != nil {
+ return nil, err
+ }
+ return
restmapper.NewDeferredDiscoveryRESTMapper(discoveryClient), nil
+ })
return cf
}
+
+func (c *clientFactory) ToDiscoveryClient()
(discovery.CachedDiscoveryInterface, error) {
+ return c.discoveryClient.Get()
+}
+
+func (c *clientFactory) ToRestConfig() (*rest.Config, error) {
+ restConfig, err := c.clientConfig.ClientConfig()
+ if err != nil {
+ return nil, err
+ }
+ return SetRestDefaults(restConfig), nil
+}