Skip to content

Commit

Permalink
Rename controllers constructors to NewController
Browse files Browse the repository at this point in the history
  • Loading branch information
jonathan-innis committed Nov 28, 2023
1 parent 6aabe5c commit d7b0d91
Show file tree
Hide file tree
Showing 16 changed files with 65 additions and 145 deletions.
12 changes: 6 additions & 6 deletions pkg/controllers/controllers.go
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand All @@ -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),
}
}
2 changes: 2 additions & 0 deletions pkg/controllers/leasegarbagecollection/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
28 changes: 7 additions & 21 deletions pkg/controllers/nodeclaim/consistency/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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,
Expand All @@ -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) {
Expand Down Expand Up @@ -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{}).
Expand Down
2 changes: 1 addition & 1 deletion pkg/controllers/nodeclaim/consistency/suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
28 changes: 7 additions & 21 deletions pkg/controllers/nodeclaim/disruption/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand All @@ -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
Expand Down Expand Up @@ -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(
Expand Down
2 changes: 1 addition & 1 deletion pkg/controllers/nodeclaim/disruption/drift_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{
Expand Down
2 changes: 1 addition & 1 deletion pkg/controllers/nodeclaim/disruption/suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
2 changes: 1 addition & 1 deletion pkg/controllers/nodeclaim/garbagecollection/suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
30 changes: 7 additions & 23 deletions pkg/controllers/nodeclaim/lifecycle/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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)
}
Expand All @@ -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) {
Expand Down Expand Up @@ -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(
Expand Down
2 changes: 1 addition & 1 deletion pkg/controllers/nodeclaim/lifecycle/suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
37 changes: 7 additions & 30 deletions pkg/controllers/nodeclaim/termination/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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) {
Expand Down Expand Up @@ -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{}).
Expand Down
15 changes: 8 additions & 7 deletions pkg/controllers/nodeclaim/termination/suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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) {
Expand All @@ -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() {
Expand Down Expand Up @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand Down

0 comments on commit d7b0d91

Please sign in to comment.