@@ -18,18 +18,21 @@ package kcp
18
18
19
19
import (
20
20
"net/http"
21
+ "strings"
21
22
23
+ "k8s.io/apimachinery/pkg/api/meta"
22
24
"k8s.io/client-go/rest"
23
25
k8scache "k8s.io/client-go/tools/cache"
24
26
25
- kcpcache "github.com/kcp-dev/apimachinery/pkg/cache"
26
- kcpclient "github.com/kcp-dev/apimachinery/pkg/client"
27
-
28
27
ctrl "sigs.k8s.io/controller-runtime"
29
28
"sigs.k8s.io/controller-runtime/pkg/cache"
30
29
"sigs.k8s.io/controller-runtime/pkg/client"
30
+ "sigs.k8s.io/controller-runtime/pkg/client/apiutil"
31
31
"sigs.k8s.io/controller-runtime/pkg/cluster"
32
32
"sigs.k8s.io/controller-runtime/pkg/manager"
33
+
34
+ kcpcache "github.com/kcp-dev/apimachinery/pkg/cache"
35
+ kcpclient "github.com/kcp-dev/apimachinery/pkg/client"
33
36
)
34
37
35
38
// NewClusterAwareManager returns a kcp-aware manager with appropriate defaults for cache and
@@ -38,10 +41,15 @@ func NewClusterAwareManager(cfg *rest.Config, options ctrl.Options) (manager.Man
38
41
if options .NewCache == nil {
39
42
options .NewCache = NewClusterAwareCache
40
43
}
44
+
41
45
if options .NewClient == nil {
42
46
options .NewClient = NewClusterAwareClient
43
47
}
44
48
49
+ if options .MapperProvider == nil {
50
+ options .MapperProvider = NewClusterAwareMapperProvider
51
+ }
52
+
45
53
return ctrl .NewManager (cfg , options )
46
54
}
47
55
@@ -89,3 +97,13 @@ func ClusterAwareHTTPClient(config *rest.Config) (*http.Client, error) {
89
97
httpClient .Transport = kcpclient .NewClusterRoundTripper (httpClient .Transport )
90
98
return httpClient , nil
91
99
}
100
+
101
+ // NewClusterAwareMapperProvider is a MapperProvider that returns a logical cluster aware meta.RESTMapper.
102
+ func NewClusterAwareMapperProvider (c * rest.Config ) (meta.RESTMapper , error ) {
103
+ mapperCfg := rest .CopyConfig (c )
104
+ if ! strings .HasSuffix (mapperCfg .Host , "/clusters/*" ) {
105
+ mapperCfg .Host += "/clusters/*"
106
+ }
107
+
108
+ return apiutil .NewDynamicRESTMapper (mapperCfg )
109
+ }
0 commit comments