@@ -17,6 +17,7 @@ limitations under the License.
1717package client
1818
1919import (
20+ "net/http"
2021 "time"
2122
2223 "k8s.io/apimachinery/pkg/runtime"
@@ -28,7 +29,7 @@ import (
2829 "sigs.k8s.io/controller-runtime/pkg/client"
2930
3031 clusterv1alpha2 "github.com/clusterpedia-io/api/cluster/v1alpha2"
31- "github.com/clusterpedia-io/client-go/constants "
32+ "github.com/clusterpedia-io/client-go/tools/transport "
3233)
3334
3435const (
@@ -37,46 +38,48 @@ const (
3738 DefaultTimeoutSeconds = 10
3839)
3940
41+ var Scheme = runtime .NewScheme ()
42+
43+ func init () {
44+ utilruntime .Must (clientgoscheme .AddToScheme (Scheme ))
45+ utilruntime .Must (clusterv1alpha2 .AddToScheme (Scheme ))
46+ }
47+
4048func Client () (client.Client , error ) {
41- restConfig , err := ctrl .GetConfig ()
49+ config , err := ctrl .GetConfig ()
4250 if err != nil {
4351 return nil , err
4452 }
4553
46- return newClient (restConfig )
54+ return newClient (config )
4755}
4856
4957func ClusterClient (cluster string ) (client.Client , error ) {
50- restConfig , err := ctrl .GetConfig ()
58+ config , err := ctrl .GetConfig ()
5159 if err != nil {
5260 return nil , err
5361 }
5462
55- return newClient (restConfig , cluster )
63+ return newClient (config , cluster )
5664}
5765
58- func GetClient (restConfig * rest.Config , cluster ... string ) (client.Client , error ) {
59- return newClient (restConfig , cluster ... )
66+ func GetClient (config * rest.Config , cluster ... string ) (client.Client , error ) {
67+ return newClient (config , cluster ... )
6068}
6169
62- func newClient (restConfig * rest.Config , cluster ... string ) (client.Client , error ) {
70+ func newClient (config * rest.Config , cluster ... string ) (client.Client , error ) {
6371 var err error
64-
6572 if len (cluster ) == 1 {
66- restConfig , err = ClusterConfigFor (restConfig , cluster [0 ])
73+ config , err = ClusterConfigFor (config , cluster [0 ])
6774 } else {
68- restConfig , err = ConfigFor (restConfig )
75+ config , err = ConfigFor (config )
6976 }
7077 if err != nil {
7178 return nil , err
7279 }
7380
74- scheme := runtime .NewScheme ()
75- utilruntime .Must (clientgoscheme .AddToScheme (scheme ))
76- utilruntime .Must (clusterv1alpha2 .AddToScheme (scheme ))
77-
78- c , err := client .New (restConfig , client.Options {
79- Scheme : scheme ,
81+ c , err := client .New (config , client.Options {
82+ Scheme : Scheme ,
8083 })
8184 if err != nil {
8285 return nil , err
@@ -85,56 +88,63 @@ func newClient(restConfig *rest.Config, cluster ...string) (client.Client, error
8588 return c , nil
8689}
8790
88- func ConfigFor (cfg * rest.Config ) (* rest.Config , error ) {
89- configShallowCopy := * cfg
90-
91- // reset clusterpedia api path
92- if err := SetConfigDefaults (& configShallowCopy ); err != nil {
91+ func NewForConfig (cfg * rest.Config ) (kubernetes.Interface , error ) {
92+ config , err := ConfigFor (cfg )
93+ if err != nil {
9394 return nil , err
9495 }
9596
96- return & configShallowCopy , nil
97- }
98-
99- func ClusterConfigFor (cfg * rest.Config , cluster string ) (* rest.Config , error ) {
100- configShallowCopy , err := ConfigFor (cfg )
97+ kubeClient , err := kubernetes .NewForConfig (config )
10198 if err != nil {
10299 return nil , err
103100 }
104- configShallowCopy . Host += constants . ClusterAPIPath + cluster
105- return configShallowCopy , nil
101+
102+ return kubeClient , nil
106103}
107104
108- func NewForConfig (cfg * rest.Config ) (kubernetes.Interface , error ) {
109- clientConfig , err := ConfigFor (cfg )
105+ func NewClusterForConfig (cfg * rest.Config , cluster string ) (kubernetes.Interface , error ) {
106+ config , err := ClusterConfigFor (cfg , cluster )
110107 if err != nil {
111108 return nil , err
112109 }
113110
114- kubeClient , err := kubernetes .NewForConfig (clientConfig )
111+ kubeClient , err := kubernetes .NewForConfig (config )
115112 if err != nil {
116113 return nil , err
117114 }
118115
119116 return kubeClient , nil
120117}
121118
122- func NewClusterForConfig (cfg * rest.Config , cluster string ) (kubernetes. Interface , error ) {
123- clientConfig , err := ClusterConfigFor ( cfg , cluster )
124- if err != nil {
119+ func ConfigFor (cfg * rest.Config ) (* rest. Config , error ) {
120+ configShallowCopy := * cfg
121+ if err := SetConfigDefaults ( & configShallowCopy ); err != nil {
125122 return nil , err
126123 }
127124
128- kubeClient , err := kubernetes .NewForConfig (clientConfig )
129- if err != nil {
125+ // wrap a transport to rest client config
126+ configShallowCopy .Wrap (func (rt http.RoundTripper ) http.RoundTripper {
127+ return transport .NewTransport (configShallowCopy .Host , rt )
128+ })
129+
130+ return & configShallowCopy , nil
131+ }
132+
133+ func ClusterConfigFor (cfg * rest.Config , cluster string ) (* rest.Config , error ) {
134+ configShallowCopy := * cfg
135+ if err := SetConfigDefaults (& configShallowCopy ); err != nil {
130136 return nil , err
131137 }
132138
133- return kubeClient , nil
139+ // wrap a cluster transport to rest client config
140+ configShallowCopy .Wrap (func (rt http.RoundTripper ) http.RoundTripper {
141+ return transport .NewTransportWithCluster (configShallowCopy .Host , cluster , rt )
142+ })
143+
144+ return & configShallowCopy , nil
134145}
135146
136147func SetConfigDefaults (config * rest.Config ) error {
137- config .Host += constants .ClusterPediaAPIPath
138148 if config .Timeout == 0 {
139149 config .Timeout = DefaultTimeoutSeconds * time .Second
140150 }
0 commit comments