From d7b0d913c6bc65f5585dd202672d623de69755ae Mon Sep 17 00:00:00 2001 From: Jonathan Innis Date: Tue, 28 Nov 2023 14:55:09 -0800 Subject: [PATCH] Rename controllers constructors to NewController --- pkg/controllers/controllers.go | 12 +++--- .../leasegarbagecollection/controller.go | 2 + .../nodeclaim/consistency/controller.go | 28 ++++---------- .../nodeclaim/consistency/suite_test.go | 2 +- .../nodeclaim/disruption/controller.go | 28 ++++---------- .../nodeclaim/disruption/drift_test.go | 2 +- .../nodeclaim/disruption/suite_test.go | 2 +- .../nodeclaim/garbagecollection/suite_test.go | 2 +- .../nodeclaim/lifecycle/controller.go | 30 ++++----------- .../nodeclaim/lifecycle/suite_test.go | 2 +- .../nodeclaim/termination/controller.go | 37 ++++--------------- .../nodeclaim/termination/suite_test.go | 15 ++++---- .../nodepool/counter/controller.go | 22 ++++------- .../nodepool/counter/suite_test.go | 2 +- pkg/controllers/nodepool/hash/controller.go | 22 ++++------- pkg/controllers/nodepool/hash/suite_test.go | 2 +- 16 files changed, 65 insertions(+), 145 deletions(-) diff --git a/pkg/controllers/controllers.go b/pkg/controllers/controllers.go index f1f775997..3e46dfdf9 100644 --- a/pkg/controllers/controllers.go +++ b/pkg/controllers/controllers.go @@ -59,7 +59,7 @@ func NewControllers( p, evictionQueue, disruptionQueue, disruption.NewController(clock, kubeClient, p, cloudProvider, recorder, cluster, disruptionQueue), provisioning.NewController(kubeClient, p, recorder), - nodepoolhash.NewNodePoolController(kubeClient), + nodepoolhash.NewController(kubeClient), informer.NewDaemonSetController(kubeClient, cluster), informer.NewNodeController(kubeClient, cluster), informer.NewPodController(kubeClient, cluster), @@ -69,12 +69,12 @@ func NewControllers( metricspod.NewController(kubeClient), metricsnodepool.NewController(kubeClient), metricsnode.NewController(cluster), - nodepoolcounter.NewNodePoolController(kubeClient, cluster), - nodeclaimconsistency.NewNodeClaimController(clock, kubeClient, recorder, cloudProvider), - nodeclaimlifecycle.NewNodeClaimController(clock, kubeClient, cloudProvider, recorder), + nodepoolcounter.NewController(kubeClient, cluster), + nodeclaimconsistency.NewController(clock, kubeClient, recorder, cloudProvider), + nodeclaimlifecycle.NewController(clock, kubeClient, cloudProvider, recorder), nodeclaimgarbagecollection.NewController(clock, kubeClient, cloudProvider), - nodeclaimtermination.NewNodeClaimController(kubeClient, cloudProvider), - nodeclaimdisruption.NewNodeClaimController(clock, kubeClient, cluster, cloudProvider), + nodeclaimtermination.NewController(kubeClient, cloudProvider), + nodeclaimdisruption.NewController(clock, kubeClient, cluster, cloudProvider), leasegarbagecollection.NewController(kubeClient), } } diff --git a/pkg/controllers/leasegarbagecollection/controller.go b/pkg/controllers/leasegarbagecollection/controller.go index d4faea6f3..a1aabf1bc 100644 --- a/pkg/controllers/leasegarbagecollection/controller.go +++ b/pkg/controllers/leasegarbagecollection/controller.go @@ -29,6 +29,8 @@ import ( operatorcontroller "sigs.k8s.io/karpenter/pkg/operator/controller" ) +var _ operatorcontroller.TypedController[*v1.Lease] = (*Controller)(nil) + // Controller for the resource type Controller struct { kubeClient client.Client diff --git a/pkg/controllers/nodeclaim/consistency/controller.go b/pkg/controllers/nodeclaim/consistency/controller.go index 5f268a0b4..b6d60ada9 100644 --- a/pkg/controllers/nodeclaim/consistency/controller.go +++ b/pkg/controllers/nodeclaim/consistency/controller.go @@ -38,6 +38,8 @@ import ( nodeclaimutil "sigs.k8s.io/karpenter/pkg/utils/nodeclaim" ) +var _ operatorcontroller.TypedController[*v1beta1.NodeClaim] = (*Controller)(nil) + type Controller struct { clock clock.Clock kubeClient client.Client @@ -58,9 +60,9 @@ type Check interface { const scanPeriod = 10 * time.Minute func NewController(clk clock.Clock, kubeClient client.Client, recorder events.Recorder, - provider cloudprovider.CloudProvider) *Controller { + provider cloudprovider.CloudProvider) operatorcontroller.Controller { - return &Controller{ + return operatorcontroller.Typed[*v1beta1.NodeClaim](kubeClient, &Controller{ clock: clk, kubeClient: kubeClient, recorder: recorder, @@ -69,7 +71,7 @@ func NewController(clk clock.Clock, kubeClient client.Client, recorder events.Re NewTermination(kubeClient), NewNodeShape(provider), }, - } + }) } func (c *Controller) Reconcile(ctx context.Context, nodeClaim *v1beta1.NodeClaim) (reconcile.Result, error) { @@ -107,27 +109,11 @@ func (c *Controller) Reconcile(ctx context.Context, nodeClaim *v1beta1.NodeClaim return reconcile.Result{RequeueAfter: scanPeriod}, nil } -type NodeClaimController struct { - *Controller -} - -func NewNodeClaimController(clk clock.Clock, kubeClient client.Client, recorder events.Recorder, - provider cloudprovider.CloudProvider) operatorcontroller.Controller { - - return operatorcontroller.Typed[*v1beta1.NodeClaim](kubeClient, &NodeClaimController{ - Controller: NewController(clk, kubeClient, recorder, provider), - }) -} - -func (c *NodeClaimController) Name() string { +func (c *Controller) Name() string { return "nodeclaim.consistency" } -func (c *NodeClaimController) Reconcile(ctx context.Context, nodeClaim *v1beta1.NodeClaim) (reconcile.Result, error) { - return c.Controller.Reconcile(ctx, nodeClaim) -} - -func (c *NodeClaimController) Builder(_ context.Context, m manager.Manager) operatorcontroller.Builder { +func (c *Controller) Builder(_ context.Context, m manager.Manager) operatorcontroller.Builder { return operatorcontroller.Adapt(controllerruntime. NewControllerManagedBy(m). For(&v1beta1.NodeClaim{}). diff --git a/pkg/controllers/nodeclaim/consistency/suite_test.go b/pkg/controllers/nodeclaim/consistency/suite_test.go index 439ad85f9..40cc469ac 100644 --- a/pkg/controllers/nodeclaim/consistency/suite_test.go +++ b/pkg/controllers/nodeclaim/consistency/suite_test.go @@ -66,7 +66,7 @@ var _ = BeforeSuite(func() { ctx = options.ToContext(ctx, test.Options()) cp = &fake.CloudProvider{} recorder = test.NewEventRecorder() - nodeClaimConsistencyController = consistency.NewNodeClaimController(fakeClock, env.Client, recorder, cp) + nodeClaimConsistencyController = consistency.NewController(fakeClock, env.Client, recorder, cp) }) var _ = AfterSuite(func() { diff --git a/pkg/controllers/nodeclaim/disruption/controller.go b/pkg/controllers/nodeclaim/disruption/controller.go index 505c79b11..88cf88166 100644 --- a/pkg/controllers/nodeclaim/disruption/controller.go +++ b/pkg/controllers/nodeclaim/disruption/controller.go @@ -40,6 +40,8 @@ import ( "sigs.k8s.io/karpenter/pkg/utils/result" ) +var _ operatorcontroller.TypedController[*v1beta1.NodeClaim] = (*Controller)(nil) + type nodeClaimReconciler interface { Reconcile(context.Context, *v1beta1.NodePool, *v1beta1.NodeClaim) (reconcile.Result, error) } @@ -55,13 +57,13 @@ type Controller struct { } // NewController constructs a machine disruption controller -func NewController(clk clock.Clock, kubeClient client.Client, cluster *state.Cluster, cloudProvider cloudprovider.CloudProvider) *Controller { - return &Controller{ +func NewController(clk clock.Clock, kubeClient client.Client, cluster *state.Cluster, cloudProvider cloudprovider.CloudProvider) operatorcontroller.Controller { + return operatorcontroller.Typed[*v1beta1.NodeClaim](kubeClient, &Controller{ kubeClient: kubeClient, drift: &Drift{cloudProvider: cloudProvider}, expiration: &Expiration{kubeClient: kubeClient, clock: clk}, emptiness: &Emptiness{kubeClient: kubeClient, cluster: cluster, clock: clk}, - } + }) } // Reconcile executes a control loop for the resource @@ -105,27 +107,11 @@ func (c *Controller) Reconcile(ctx context.Context, nodeClaim *v1beta1.NodeClaim return result.Min(results...), nil } -var _ operatorcontroller.TypedController[*v1beta1.NodeClaim] = (*NodeClaimController)(nil) - -type NodeClaimController struct { - *Controller -} - -func NewNodeClaimController(clk clock.Clock, kubeClient client.Client, cluster *state.Cluster, cloudProvider cloudprovider.CloudProvider) operatorcontroller.Controller { - return operatorcontroller.Typed[*v1beta1.NodeClaim](kubeClient, &NodeClaimController{ - Controller: NewController(clk, kubeClient, cluster, cloudProvider), - }) -} - -func (c *NodeClaimController) Name() string { +func (c *Controller) Name() string { return "nodeclaim.disruption" } -func (c *NodeClaimController) Reconcile(ctx context.Context, nodeClaim *v1beta1.NodeClaim) (reconcile.Result, error) { - return c.Controller.Reconcile(ctx, nodeClaim) -} - -func (c *NodeClaimController) Builder(_ context.Context, m manager.Manager) operatorcontroller.Builder { +func (c *Controller) Builder(_ context.Context, m manager.Manager) operatorcontroller.Builder { return operatorcontroller.Adapt(controllerruntime. NewControllerManagedBy(m). For(&v1beta1.NodeClaim{}, builder.WithPredicates( diff --git a/pkg/controllers/nodeclaim/disruption/drift_test.go b/pkg/controllers/nodeclaim/disruption/drift_test.go index e39d46776..c9416b590 100644 --- a/pkg/controllers/nodeclaim/disruption/drift_test.go +++ b/pkg/controllers/nodeclaim/disruption/drift_test.go @@ -365,7 +365,7 @@ var _ = Describe("Drift", func() { var nodePoolController controller.Controller BeforeEach(func() { cp.Drifted = "" - nodePoolController = hash.NewNodePoolController(env.Client) + nodePoolController = hash.NewController(env.Client) nodePoolOptions = v1beta1.NodePool{ ObjectMeta: nodePool.ObjectMeta, Spec: v1beta1.NodePoolSpec{ diff --git a/pkg/controllers/nodeclaim/disruption/suite_test.go b/pkg/controllers/nodeclaim/disruption/suite_test.go index 88e7a16c5..5f0de0646 100644 --- a/pkg/controllers/nodeclaim/disruption/suite_test.go +++ b/pkg/controllers/nodeclaim/disruption/suite_test.go @@ -65,7 +65,7 @@ var _ = BeforeSuite(func() { ctx = options.ToContext(ctx, test.Options()) cp = fake.NewCloudProvider() cluster = state.NewCluster(fakeClock, env.Client, cp) - nodeClaimDisruptionController = nodeclaimdisruption.NewNodeClaimController(fakeClock, env.Client, cluster, cp) + nodeClaimDisruptionController = nodeclaimdisruption.NewController(fakeClock, env.Client, cluster, cp) }) var _ = AfterSuite(func() { diff --git a/pkg/controllers/nodeclaim/garbagecollection/suite_test.go b/pkg/controllers/nodeclaim/garbagecollection/suite_test.go index 23eaeafb5..27a708cab 100644 --- a/pkg/controllers/nodeclaim/garbagecollection/suite_test.go +++ b/pkg/controllers/nodeclaim/garbagecollection/suite_test.go @@ -69,7 +69,7 @@ var _ = BeforeSuite(func() { ctx = options.ToContext(ctx, test.Options()) cloudProvider = fake.NewCloudProvider() garbageCollectionController = nodeclaimgarbagecollection.NewController(fakeClock, env.Client, cloudProvider) - nodeClaimController = nodeclaimlifcycle.NewNodeClaimController(fakeClock, env.Client, cloudProvider, events.NewRecorder(&record.FakeRecorder{})) + nodeClaimController = nodeclaimlifcycle.NewController(fakeClock, env.Client, cloudProvider, events.NewRecorder(&record.FakeRecorder{})) }) var _ = AfterSuite(func() { diff --git a/pkg/controllers/nodeclaim/lifecycle/controller.go b/pkg/controllers/nodeclaim/lifecycle/controller.go index 498259c28..3f17f58f7 100644 --- a/pkg/controllers/nodeclaim/lifecycle/controller.go +++ b/pkg/controllers/nodeclaim/lifecycle/controller.go @@ -25,7 +25,6 @@ import ( "k8s.io/apimachinery/pkg/api/equality" "k8s.io/client-go/util/workqueue" "k8s.io/utils/clock" - "knative.dev/pkg/logging" "sigs.k8s.io/controller-runtime/pkg/builder" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "sigs.k8s.io/controller-runtime/pkg/event" @@ -45,6 +44,8 @@ import ( "sigs.k8s.io/karpenter/pkg/utils/result" ) +var _ operatorcontroller.TypedController[*v1beta1.NodeClaim] = (*Controller)(nil) + type nodeClaimReconciler interface { Reconcile(context.Context, *v1beta1.NodeClaim) (reconcile.Result, error) } @@ -62,15 +63,15 @@ type Controller struct { liveness *Liveness } -func NewController(clk clock.Clock, kubeClient client.Client, cloudProvider cloudprovider.CloudProvider, recorder events.Recorder) *Controller { - return &Controller{ +func NewController(clk clock.Clock, kubeClient client.Client, cloudProvider cloudprovider.CloudProvider, recorder events.Recorder) operatorcontroller.Controller { + return operatorcontroller.Typed[*v1beta1.NodeClaim](kubeClient, &Controller{ kubeClient: kubeClient, launch: &Launch{kubeClient: kubeClient, cloudProvider: cloudProvider, cache: cache.New(time.Minute, time.Second*10), recorder: recorder}, registration: &Registration{kubeClient: kubeClient}, initialization: &Initialization{kubeClient: kubeClient}, liveness: &Liveness{clock: clk, kubeClient: kubeClient}, - } + }) } func (c *Controller) Reconcile(ctx context.Context, nodeClaim *v1beta1.NodeClaim) (reconcile.Result, error) { @@ -120,28 +121,11 @@ func (c *Controller) Reconcile(ctx context.Context, nodeClaim *v1beta1.NodeClaim return result.Min(results...), nil } -var _ operatorcontroller.TypedController[*v1beta1.NodeClaim] = (*NodeClaimController)(nil) - -type NodeClaimController struct { - *Controller -} - -func NewNodeClaimController(clk clock.Clock, kubeClient client.Client, cloudProvider cloudprovider.CloudProvider, recorder events.Recorder) operatorcontroller.Controller { - return operatorcontroller.Typed[*v1beta1.NodeClaim](kubeClient, &NodeClaimController{ - Controller: NewController(clk, kubeClient, cloudProvider, recorder), - }) -} - -func (*NodeClaimController) Name() string { +func (*Controller) Name() string { return "nodeclaim.lifecycle" } -func (c *NodeClaimController) Reconcile(ctx context.Context, nodeClaim *v1beta1.NodeClaim) (reconcile.Result, error) { - ctx = logging.WithLogger(ctx, logging.FromContext(ctx).With("nodepool", nodeClaim.Labels[v1beta1.NodePoolLabelKey])) - return c.Controller.Reconcile(ctx, nodeClaim) -} - -func (c *NodeClaimController) Builder(_ context.Context, m manager.Manager) operatorcontroller.Builder { +func (c *Controller) Builder(_ context.Context, m manager.Manager) operatorcontroller.Builder { return operatorcontroller.Adapt(controllerruntime. NewControllerManagedBy(m). For(&v1beta1.NodeClaim{}, builder.WithPredicates( diff --git a/pkg/controllers/nodeclaim/lifecycle/suite_test.go b/pkg/controllers/nodeclaim/lifecycle/suite_test.go index afe2e6169..e0fe2cf13 100644 --- a/pkg/controllers/nodeclaim/lifecycle/suite_test.go +++ b/pkg/controllers/nodeclaim/lifecycle/suite_test.go @@ -65,7 +65,7 @@ var _ = BeforeSuite(func() { ctx = options.ToContext(ctx, test.Options()) cloudProvider = fake.NewCloudProvider() - nodeClaimController = nodeclaimlifecycle.NewNodeClaimController(fakeClock, env.Client, cloudProvider, events.NewRecorder(&record.FakeRecorder{})) + nodeClaimController = nodeclaimlifecycle.NewController(fakeClock, env.Client, cloudProvider, events.NewRecorder(&record.FakeRecorder{})) }) var _ = AfterSuite(func() { diff --git a/pkg/controllers/nodeclaim/termination/controller.go b/pkg/controllers/nodeclaim/termination/controller.go index 8eca51b07..467b79ef8 100644 --- a/pkg/controllers/nodeclaim/termination/controller.go +++ b/pkg/controllers/nodeclaim/termination/controller.go @@ -41,6 +41,8 @@ import ( nodeclaimutil "sigs.k8s.io/karpenter/pkg/utils/nodeclaim" ) +var _ operatorcontroller.FinalizingTypedController[*v1beta1.NodeClaim] = (*Controller)(nil) + // Controller is a NodeClaim Termination controller that triggers deletion of the Node and the // CloudProvider NodeClaim through its graceful termination mechanism type Controller struct { @@ -49,15 +51,11 @@ type Controller struct { } // NewController is a constructor for the NodeClaim Controller -func NewController(kubeClient client.Client, cloudProvider cloudprovider.CloudProvider) *Controller { - return &Controller{ +func NewController(kubeClient client.Client, cloudProvider cloudprovider.CloudProvider) operatorcontroller.Controller { + return operatorcontroller.Typed[*v1beta1.NodeClaim](kubeClient, &Controller{ kubeClient: kubeClient, cloudProvider: cloudProvider, - } -} - -func (*Controller) Name() string { - return "machine.termination" + }) } func (c *Controller) Reconcile(_ context.Context, _ *v1beta1.NodeClaim) (reconcile.Result, error) { @@ -99,32 +97,11 @@ func (c *Controller) Finalize(ctx context.Context, nodeClaim *v1beta1.NodeClaim) return reconcile.Result{}, nil } -var _ operatorcontroller.FinalizingTypedController[*v1beta1.NodeClaim] = (*NodeClaimController)(nil) - -type NodeClaimController struct { - *Controller -} - -func NewNodeClaimController(kubeClient client.Client, cloudProvider cloudprovider.CloudProvider) operatorcontroller.Controller { - return operatorcontroller.Typed[*v1beta1.NodeClaim](kubeClient, &NodeClaimController{ - Controller: NewController(kubeClient, cloudProvider), - }) -} - -func (*NodeClaimController) Name() string { +func (*Controller) Name() string { return "nodeclaim.termination" } -func (c *NodeClaimController) Reconcile(_ context.Context, _ *v1beta1.NodeClaim) (reconcile.Result, error) { - return reconcile.Result{}, nil -} - -func (c *NodeClaimController) Finalize(ctx context.Context, nodeClaim *v1beta1.NodeClaim) (reconcile.Result, error) { - ctx = logging.WithLogger(ctx, logging.FromContext(ctx).With("nodepool", nodeClaim.Labels[v1beta1.NodePoolLabelKey])) - return c.Controller.Finalize(ctx, nodeClaim) -} - -func (c *NodeClaimController) Builder(_ context.Context, m manager.Manager) operatorcontroller.Builder { +func (c *Controller) Builder(_ context.Context, m manager.Manager) operatorcontroller.Builder { return operatorcontroller.Adapt(controllerruntime. NewControllerManagedBy(m). For(&v1beta1.NodeClaim{}). diff --git a/pkg/controllers/nodeclaim/termination/suite_test.go b/pkg/controllers/nodeclaim/termination/suite_test.go index 563ff8969..5f4977299 100644 --- a/pkg/controllers/nodeclaim/termination/suite_test.go +++ b/pkg/controllers/nodeclaim/termination/suite_test.go @@ -31,12 +31,13 @@ import ( "sigs.k8s.io/controller-runtime/pkg/cache" "sigs.k8s.io/controller-runtime/pkg/client" + nodeclaimtermination "sigs.k8s.io/karpenter/pkg/controllers/nodeclaim/termination" + "sigs.k8s.io/karpenter/pkg/apis" "sigs.k8s.io/karpenter/pkg/apis/v1beta1" "sigs.k8s.io/karpenter/pkg/cloudprovider" "sigs.k8s.io/karpenter/pkg/cloudprovider/fake" nodeclaimlifecycle "sigs.k8s.io/karpenter/pkg/controllers/nodeclaim/lifecycle" - nodeclaimtermination "sigs.k8s.io/karpenter/pkg/controllers/nodeclaim/termination" "sigs.k8s.io/karpenter/pkg/events" "sigs.k8s.io/karpenter/pkg/operator/controller" "sigs.k8s.io/karpenter/pkg/operator/options" @@ -50,7 +51,7 @@ var ctx context.Context var env *test.Environment var fakeClock *clock.FakeClock var cloudProvider *fake.CloudProvider -var nodeClaimController controller.Controller +var nodeClaimLifecycleController controller.Controller var nodeClaimTerminationController controller.Controller func TestAPIs(t *testing.T) { @@ -68,8 +69,8 @@ var _ = BeforeSuite(func() { })) ctx = options.ToContext(ctx, test.Options()) cloudProvider = fake.NewCloudProvider() - nodeClaimController = nodeclaimlifecycle.NewNodeClaimController(fakeClock, env.Client, cloudProvider, events.NewRecorder(&record.FakeRecorder{})) - nodeClaimTerminationController = nodeclaimtermination.NewNodeClaimController(env.Client, cloudProvider) + nodeClaimLifecycleController = nodeclaimlifecycle.NewController(fakeClock, env.Client, cloudProvider, events.NewRecorder(&record.FakeRecorder{})) + nodeClaimTerminationController = nodeclaimtermination.NewController(env.Client, cloudProvider) }) var _ = AfterSuite(func() { @@ -111,7 +112,7 @@ var _ = Describe("Termination", func() { }) It("should delete the node and the CloudProvider NodeClaim when NodeClaim deletion is triggered", func() { ExpectApplied(ctx, env.Client, nodePool, nodeClaim) - ExpectReconcileSucceeded(ctx, nodeClaimController, client.ObjectKeyFromObject(nodeClaim)) + ExpectReconcileSucceeded(ctx, nodeClaimLifecycleController, client.ObjectKeyFromObject(nodeClaim)) nodeClaim = ExpectExists(ctx, env.Client, nodeClaim) _, err := cloudProvider.Get(ctx, nodeClaim.Status.ProviderID) @@ -135,7 +136,7 @@ var _ = Describe("Termination", func() { }) It("should delete multiple Nodes if multiple Nodes map to the NodeClaim", func() { ExpectApplied(ctx, env.Client, nodePool, nodeClaim) - ExpectReconcileSucceeded(ctx, nodeClaimController, client.ObjectKeyFromObject(nodeClaim)) + ExpectReconcileSucceeded(ctx, nodeClaimLifecycleController, client.ObjectKeyFromObject(nodeClaim)) nodeClaim = ExpectExists(ctx, env.Client, nodeClaim) _, err := cloudProvider.Get(ctx, nodeClaim.Status.ProviderID) @@ -161,7 +162,7 @@ var _ = Describe("Termination", func() { }) It("should not delete the NodeClaim until all the Nodes are removed", func() { ExpectApplied(ctx, env.Client, nodePool, nodeClaim) - ExpectReconcileSucceeded(ctx, nodeClaimController, client.ObjectKeyFromObject(nodeClaim)) + ExpectReconcileSucceeded(ctx, nodeClaimLifecycleController, client.ObjectKeyFromObject(nodeClaim)) nodeClaim = ExpectExists(ctx, env.Client, nodeClaim) _, err := cloudProvider.Get(ctx, nodeClaim.Status.ProviderID) diff --git a/pkg/controllers/nodepool/counter/controller.go b/pkg/controllers/nodepool/counter/controller.go index 935601c8c..c81b0707b 100644 --- a/pkg/controllers/nodepool/counter/controller.go +++ b/pkg/controllers/nodepool/counter/controller.go @@ -39,6 +39,8 @@ import ( "sigs.k8s.io/karpenter/pkg/utils/resources" ) +var _ operatorcontroller.TypedController[*v1beta1.NodePool] = (*Controller)(nil) + // Controller for the resource type Controller struct { kubeClient client.Client @@ -46,11 +48,11 @@ type Controller struct { } // NewController is a constructor -func NewController(kubeClient client.Client, cluster *state.Cluster) *Controller { - return &Controller{ +func NewController(kubeClient client.Client, cluster *state.Cluster) operatorcontroller.Controller { + return operatorcontroller.Typed[*v1beta1.NodePool](kubeClient, &Controller{ kubeClient: kubeClient, cluster: cluster, - } + }) } // Reconcile a control loop for the resource @@ -91,21 +93,11 @@ func (c *Controller) resourceCountsFor(ownerLabel string, ownerName string) v1.R return functional.FilterMap(res, func(_ v1.ResourceName, v resource.Quantity) bool { return !v.IsZero() }) } -type NodePoolController struct { - *Controller -} - -func NewNodePoolController(kubeClient client.Client, cluster *state.Cluster) operatorcontroller.Controller { - return operatorcontroller.Typed[*v1beta1.NodePool](kubeClient, &NodePoolController{ - Controller: NewController(kubeClient, cluster), - }) -} - -func (c *NodePoolController) Name() string { +func (c *Controller) Name() string { return "nodepool.counter" } -func (c *NodePoolController) Builder(_ context.Context, m manager.Manager) operatorcontroller.Builder { +func (c *Controller) Builder(_ context.Context, m manager.Manager) operatorcontroller.Builder { return operatorcontroller.Adapt(controllerruntime. NewControllerManagedBy(m). For(&v1beta1.NodePool{}). diff --git a/pkg/controllers/nodepool/counter/suite_test.go b/pkg/controllers/nodepool/counter/suite_test.go index b4c529f10..d4df2a560 100644 --- a/pkg/controllers/nodepool/counter/suite_test.go +++ b/pkg/controllers/nodepool/counter/suite_test.go @@ -66,7 +66,7 @@ var _ = BeforeSuite(func() { nodeClaimController = informer.NewNodeClaimController(env.Client, cluster) nodeController = informer.NewNodeController(env.Client, cluster) nodePoolInformerController = informer.NewNodePoolController(env.Client, cluster) - nodePoolController = counter.NewNodePoolController(env.Client, cluster) + nodePoolController = counter.NewController(env.Client, cluster) }) var _ = AfterSuite(func() { diff --git a/pkg/controllers/nodepool/hash/controller.go b/pkg/controllers/nodepool/hash/controller.go index ae32d9025..18dd06577 100644 --- a/pkg/controllers/nodepool/hash/controller.go +++ b/pkg/controllers/nodepool/hash/controller.go @@ -31,16 +31,18 @@ import ( nodepoolutil "sigs.k8s.io/karpenter/pkg/utils/nodepool" ) +var _ operatorcontroller.TypedController[*v1beta1.NodePool] = (*Controller)(nil) + // Controller is hash controller that constructs a hash based on the fields that are considered for static drift. // The hash is placed in the metadata for increased observability and should be found on each object. type Controller struct { kubeClient client.Client } -func NewController(kubeClient client.Client) *Controller { - return &Controller{ +func NewController(kubeClient client.Client) operatorcontroller.Controller { + return operatorcontroller.Typed[*v1beta1.NodePool](kubeClient, &Controller{ kubeClient: kubeClient, - } + }) } // Reconcile the resource @@ -56,21 +58,11 @@ func (c *Controller) Reconcile(ctx context.Context, np *v1beta1.NodePool) (recon return reconcile.Result{}, nil } -type NodePoolController struct { - *Controller -} - -func NewNodePoolController(kubeClient client.Client) operatorcontroller.Controller { - return operatorcontroller.Typed[*v1beta1.NodePool](kubeClient, &NodePoolController{ - Controller: NewController(kubeClient), - }) -} - -func (c *NodePoolController) Name() string { +func (c *Controller) Name() string { return "nodepool.hash" } -func (c *NodePoolController) Builder(_ context.Context, m manager.Manager) operatorcontroller.Builder { +func (c *Controller) Builder(_ context.Context, m manager.Manager) operatorcontroller.Builder { return operatorcontroller.Adapt(controllerruntime. NewControllerManagedBy(m). WithEventFilter(predicate.GenerationChangedPredicate{}). diff --git a/pkg/controllers/nodepool/hash/suite_test.go b/pkg/controllers/nodepool/hash/suite_test.go index 4625b4f34..c7f173088 100644 --- a/pkg/controllers/nodepool/hash/suite_test.go +++ b/pkg/controllers/nodepool/hash/suite_test.go @@ -50,7 +50,7 @@ func TestAPIs(t *testing.T) { var _ = BeforeSuite(func() { env = test.NewEnvironment(scheme.Scheme, test.WithCRDs(apis.CRDs...)) - nodePoolController = hash.NewNodePoolController(env.Client) + nodePoolController = hash.NewController(env.Client) }) var _ = AfterSuite(func() {