Skip to content

Commit 3ff3014

Browse files
committed
Use GetLocalManager() in multi-cluster manager instead of creating a new local manager
Signed-off-by: Shingo Omura <[email protected]>
1 parent b23922a commit 3ff3014

File tree

3 files changed

+35
-48
lines changed

3 files changed

+35
-48
lines changed

examples/cluster-inventory-api/main.go

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,9 @@ func main() {
5858
entryLog.Error(err, "unable to get kubeconfig")
5959
os.Exit(1)
6060
}
61-
localMgr, err := manager.New(cfg, manager.Options{})
62-
if err != nil {
63-
entryLog.Error(err, "unable to set up overall controller manager")
64-
os.Exit(1)
65-
}
6661

6762
// Create the provider against the local manager.
68-
provider, err := clusterinventoryapi.New(localMgr, clusterinventoryapi.Options{
63+
provider := clusterinventoryapi.New(clusterinventoryapi.Options{
6964
ConsumerName: "cluster-inventory-api-consumer",
7065
})
7166
if err != nil {
@@ -86,6 +81,12 @@ func main() {
8681
os.Exit(1)
8782
}
8883

84+
// Setting up the provider with multi-cluster manager.
85+
if err := provider.SetupWithManager(mcMgr); err != nil {
86+
entryLog.Error(err, "unable to set up provider with manager")
87+
os.Exit(1)
88+
}
89+
8990
// Create a configmap controller in the multi-cluster manager.
9091
if err := mcbuilder.ControllerManagedBy(mcMgr).
9192
Named("multicluster-configmaps").
@@ -119,12 +120,6 @@ func main() {
119120

120121
// Starting everything.
121122
g, ctx := errgroup.WithContext(ctx)
122-
g.Go(func() error {
123-
return ignoreCanceled(localMgr.Start(ctx))
124-
})
125-
g.Go(func() error {
126-
return ignoreCanceled(provider.Run(ctx, mcMgr))
127-
})
128123
g.Go(func() error {
129124
return ignoreCanceled(mcMgr.Start(ctx))
130125
})

providers/cluster-inventory-api/provider.go

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ import (
4141
"sigs.k8s.io/controller-runtime/pkg/controller"
4242
"sigs.k8s.io/controller-runtime/pkg/handler"
4343
"sigs.k8s.io/controller-runtime/pkg/log"
44-
"sigs.k8s.io/controller-runtime/pkg/manager"
4544
"sigs.k8s.io/controller-runtime/pkg/predicate"
4645
"sigs.k8s.io/controller-runtime/pkg/reconcile"
4746

@@ -193,17 +192,32 @@ func setDefaults(opts *Options, cli client.Client) {
193192
}
194193

195194
// New creates a new Cluster Inventory API cluster Provider.
196-
func New(localMgr manager.Manager, opts Options) (*Provider, error) {
195+
// You must call SetupWithManager to set up the provider with the manager.
196+
func New(opts Options) *Provider {
197197
p := &Provider{
198198
opts: opts,
199199
log: log.Log.WithName("cluster-inventory-api-cluster-provider"),
200-
client: localMgr.GetClient(),
201200
clusters: map[string]cluster.Cluster{},
202201
cancelFns: map[string]context.CancelFunc{},
203202
kubeconfig: map[string]*rest.Config{},
204203
}
205-
206204
setDefaults(&p.opts, p.client)
205+
return p
206+
}
207+
208+
// SetupWithManager sets up the provider with the manager.
209+
func (p *Provider) SetupWithManager(mgr mcmanager.Manager) error {
210+
if mgr == nil {
211+
return fmt.Errorf("manager is nil")
212+
}
213+
p.mcMgr = mgr
214+
215+
// Get the local manager from the multi-cluster manager.
216+
localMgr := mgr.GetLocalManager()
217+
if localMgr == nil {
218+
return fmt.Errorf("local manager is nil")
219+
}
220+
p.client = localMgr.GetClient()
207221

208222
// Create a controller builder
209223
controllerBuilder := builder.ControllerManagedBy(localMgr).
@@ -221,10 +235,10 @@ func New(localMgr manager.Manager, opts Options) (*Provider, error) {
221235

222236
// Complete the controller setup
223237
if err := controllerBuilder.Complete(p); err != nil {
224-
return nil, fmt.Errorf("failed to create controller: %w", err)
238+
return fmt.Errorf("failed to create controller: %w", err)
225239
}
226240

227-
return p, nil
241+
return nil
228242
}
229243

230244
// Get returns the cluster with the given name, if it is known.
@@ -238,19 +252,7 @@ func (p *Provider) Get(_ context.Context, clusterName string) (cluster.Cluster,
238252
return nil, multicluster.ErrClusterNotFound
239253
}
240254

241-
// Run starts the provider and blocks.
242-
func (p *Provider) Run(ctx context.Context, mgr mcmanager.Manager) error {
243-
p.log.Info("Starting Cluster Inventory API cluster provider")
244-
245-
p.lock.Lock()
246-
p.mcMgr = mgr
247-
p.lock.Unlock()
248-
249-
<-ctx.Done()
250-
251-
return ctx.Err()
252-
}
253-
255+
// Reconcile is the reconcile loop for the Cluster Inventory API cluster Provider.
254256
func (p *Provider) Reconcile(ctx context.Context, req reconcile.Request) (reconcile.Result, error) {
255257
key := req.NamespacedName.String()
256258

providers/cluster-inventory-api/provider_test.go

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ var _ = Describe("Provider Cluster Inventory API", Ordered, func() {
5858
g, ctx := errgroup.WithContext(ctx)
5959

6060
const consumerName = "hub"
61-
var localMgr manager.Manager
6261
var provider *Provider
6362
var mgr mcmanager.Manager
6463

@@ -77,17 +76,10 @@ var _ = Describe("Provider Cluster Inventory API", Ordered, func() {
7776
cliMember, err = client.New(cfgMember, client.Options{})
7877
Expect(err).NotTo(HaveOccurred())
7978

80-
By("Setting up the Local manager", func() {
81-
localMgr, err = manager.New(cfgHub, manager.Options{})
82-
Expect(err).NotTo(HaveOccurred())
83-
})
84-
8579
By("Setting up the Provider", func() {
86-
var err error
87-
provider, err = New(localMgr, Options{
80+
provider = New(Options{
8881
ConsumerName: consumerName,
8982
})
90-
Expect(err).NotTo(HaveOccurred())
9183
Expect(provider).NotTo(BeNil())
9284
})
9385

@@ -97,6 +89,11 @@ var _ = Describe("Provider Cluster Inventory API", Ordered, func() {
9789
Expect(err).NotTo(HaveOccurred())
9890
})
9991

92+
By("Setting up the provider controller", func() {
93+
err := provider.SetupWithManager(mgr)
94+
Expect(err).NotTo(HaveOccurred())
95+
})
96+
10097
By("Setting up the controller feeding the animals", func() {
10198
err := mcbuilder.ControllerManagedBy(mgr).
10299
Named("fleet-configmap-controller").
@@ -142,14 +139,7 @@ var _ = Describe("Provider Cluster Inventory API", Ordered, func() {
142139
})
143140

144141
By("Starting the provider, cluster, manager, and controller", func() {
145-
g.Go(func() error {
146-
err := localMgr.Start(ctx)
147-
return ignoreCanceled(err)
148-
})
149-
g.Go(func() error {
150-
err := provider.Run(ctx, mgr)
151-
return ignoreCanceled(err)
152-
})
142+
153143
g.Go(func() error {
154144
err := mgr.Start(ctx)
155145
return ignoreCanceled(err)

0 commit comments

Comments
 (0)