@@ -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 ()
@@ -92,12 +99,16 @@ func (p *Provider) splitClusterName(clusterName string) (string, string) {
92
99
func (p * Provider ) AddProvider (ctx context.Context , prefix string , provider multicluster.Provider , startFunc func (context.Context , mctrl.Manager ) error ) error {
93
100
ctx , cancel := context .WithCancel (ctx )
94
101
95
- wrappedMgr := & wrappedManager {
96
- Manager : p .mgr ,
97
- prefix : prefix ,
98
- sep : p .opts .Separator ,
102
+ var wrappedMgr mctrl.Manager
103
+ if p .mgr == nil {
104
+ p .log .Info ("manager is nil, wrapped manager passed to start will be nil as well" , "prefix" , prefix )
105
+ } else {
106
+ wrappedMgr = & wrappedManager {
107
+ Manager : p .mgr ,
108
+ prefix : prefix ,
109
+ sep : p .opts .Separator ,
110
+ }
99
111
}
100
-
101
112
if err := startFunc (ctx , wrappedMgr ); err != nil {
102
113
cancel ()
103
114
return fmt .Errorf ("failed to start provider %q: %w" , prefix , err )
0 commit comments