@@ -53,7 +53,7 @@ type Provider struct {
53
53
}
54
54
55
55
// New returns a new instance of the provider with the given options.
56
- func New (mgr mctrl. Manager , opts Options ) * Provider {
56
+ func New (opts Options ) * Provider {
57
57
p := new (Provider )
58
58
59
59
p .opts = opts
@@ -62,14 +62,21 @@ func New(mgr mctrl.Manager, opts Options) *Provider {
62
62
}
63
63
64
64
p .log = log .Log .WithName ("namespaced-cluster-provider" )
65
- p .mgr = mgr
66
65
67
66
p .providers = make (map [string ]multicluster.Provider )
68
67
p .providerCancel = make (map [string ]context.CancelFunc )
69
68
70
69
return p
71
70
}
72
71
72
+ // SetManager sets the manager for the provider.
73
+ func (p * Provider ) SetManager (mgr mctrl.Manager ) {
74
+ if p .mgr != nil {
75
+ p .log .Error (nil , "manager already set, overwriting" )
76
+ }
77
+ p .mgr = mgr
78
+ }
79
+
73
80
// Run starts the provider and blocks until the context is done. This is a noop.
74
81
func (p * Provider ) Run (ctx context.Context , mgr mctrl.Manager ) error {
75
82
<- ctx .Done ()
@@ -95,12 +102,16 @@ func (p *Provider) splitClusterName(clusterName string) (string, string) {
95
102
func (p * Provider ) AddProvider (ctx context.Context , prefix string , provider multicluster.Provider , startFunc func (context.Context , mctrl.Manager ) error ) error {
96
103
ctx , cancel := context .WithCancel (ctx )
97
104
98
- wrappedMgr := & wrappedManager {
99
- Manager : p .mgr ,
100
- prefix : prefix ,
101
- sep : p .opts .Separator ,
105
+ var wrappedMgr mctrl.Manager
106
+ if p .mgr == nil {
107
+ p .log .Info ("manager is nil, wrapped manager passed to start will be nil as well" , "prefix" , prefix )
108
+ } else {
109
+ wrappedMgr = & wrappedManager {
110
+ Manager : p .mgr ,
111
+ prefix : prefix ,
112
+ sep : p .opts .Separator ,
113
+ }
102
114
}
103
-
104
115
if err := startFunc (ctx , wrappedMgr ); err != nil {
105
116
cancel ()
106
117
return fmt .Errorf ("failed to start provider %q: %w" , prefix , err )
0 commit comments