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
+}

Reply via email to