Skip to content

Commit 192f4b9

Browse files
committed
WIP: reuse RESTMapper
1 parent d9e9be9 commit 192f4b9

File tree

2 files changed

+35
-12
lines changed

2 files changed

+35
-12
lines changed

pkg/patterns/declarative/pkg/watch/dynamic.go

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727
"k8s.io/apimachinery/pkg/runtime/schema"
2828
"k8s.io/apimachinery/pkg/watch"
2929
"k8s.io/client-go/dynamic"
30-
ctrl "sigs.k8s.io/controller-runtime"
3130
"sigs.k8s.io/controller-runtime/pkg/client"
3231
"sigs.k8s.io/controller-runtime/pkg/event"
3332
"sigs.k8s.io/controller-runtime/pkg/log"
@@ -36,18 +35,15 @@ import (
3635
// WatchDelay is the time between a Watch being dropped and attempting to resume it
3736
const WatchDelay = 30 * time.Second
3837

39-
func NewDynamicWatch(mgr ctrl.Manager) (*dynamicWatch, chan event.GenericEvent, error) {
40-
dw := &dynamicWatch{events: make(chan event.GenericEvent)}
41-
42-
restMapper := mgr.GetRESTMapper()
43-
44-
client, err := dynamic.NewForConfig(mgr.GetConfig())
45-
if err != nil {
46-
return nil, nil, err
38+
// NewDynamicWatch constructs a watcher for unstructured objects.
39+
// Deprecated: avoid using directly; will move to internal in future.
40+
func NewDynamicWatch(restMapper meta.RESTMapper, client dynamic.Interface) (*dynamicWatch, chan event.GenericEvent, error) {
41+
dw := &dynamicWatch{
42+
events: make(chan event.GenericEvent),
43+
restMapper: restMapper,
44+
client: client,
4745
}
4846

49-
dw.restMapper = restMapper
50-
dw.client = client
5147
return dw, dw.events, nil
5248
}
5349

pkg/patterns/declarative/watch.go

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,14 @@ import (
2121
"fmt"
2222
"sync"
2323

24+
"k8s.io/apimachinery/pkg/api/meta"
2425
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2526
"k8s.io/apimachinery/pkg/labels"
2627
"k8s.io/apimachinery/pkg/runtime/schema"
28+
"k8s.io/client-go/dynamic"
2729
"k8s.io/client-go/rest"
2830
ctrl "sigs.k8s.io/controller-runtime"
31+
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
2932
"sigs.k8s.io/controller-runtime/pkg/controller"
3033
"sigs.k8s.io/controller-runtime/pkg/handler"
3134
"sigs.k8s.io/controller-runtime/pkg/log"
@@ -85,7 +88,31 @@ func WatchChildren(options WatchChildrenOptions) (chan struct{}, error) {
8588
return nil, fmt.Errorf("labelMaker is required to scope watches")
8689
}
8790

88-
dw, events, err := watch.NewDynamicWatch(*options.RESTConfig)
91+
if options.RESTConfig == nil {
92+
if options.Manager != nil {
93+
options.RESTConfig = options.Manager.GetConfig()
94+
} else {
95+
return nil, fmt.Errorf("RESTConfig or Manager should be set")
96+
}
97+
}
98+
99+
var restMapper meta.RESTMapper
100+
if options.Manager != nil {
101+
restMapper = options.Manager.GetRESTMapper()
102+
} else {
103+
rm, err := apiutil.NewDiscoveryRESTMapper(options.RESTConfig)
104+
if err != nil {
105+
return nil, err
106+
}
107+
restMapper = rm
108+
}
109+
110+
client, err := dynamic.NewForConfig(options.RESTConfig)
111+
if err != nil {
112+
return nil, err
113+
}
114+
115+
dw, events, err := watch.NewDynamicWatch(restMapper, client)
89116
if err != nil {
90117
return nil, fmt.Errorf("creating dynamic watch: %v", err)
91118
}

0 commit comments

Comments
 (0)