Skip to content

Commit

Permalink
update to controller-runtime 0.18
Browse files Browse the repository at this point in the history
  • Loading branch information
xrstf committed May 22, 2024
1 parent f718485 commit 298f82f
Show file tree
Hide file tree
Showing 7 changed files with 90 additions and 138 deletions.
4 changes: 1 addition & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,7 @@ require (
k8s.io/utils v0.0.0-20240310230437-4693a0247e57
kubevirt.io/api v1.2.0
kubevirt.io/containerized-data-importer-api v1.58.1
// Pinned due to a breaking change in k8s.io/client-go/tools/leaderelection in v0.30.0
// TODO: Update to the latest semver version when https://github.com/kubernetes-sigs/controller-runtime/pull/2693 is released
sigs.k8s.io/controller-runtime v0.17.1-0.20240418082203-04706074d2f1
sigs.k8s.io/controller-runtime v0.18.0
sigs.k8s.io/yaml v1.4.0
)

Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1362,8 +1362,8 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
sigs.k8s.io/controller-runtime v0.17.1-0.20240418082203-04706074d2f1 h1:W15Y5zHVUsH1YJvstRqy6lG0KquU7kS2ooGC5poLnrU=
sigs.k8s.io/controller-runtime v0.17.1-0.20240418082203-04706074d2f1/go.mod h1:umEFUKWCSYpq2U4tNN7riBXU6iiulk7bdF0XZq9LzvU=
sigs.k8s.io/controller-runtime v0.18.0 h1:Z7jKuX784TQSUL1TIyeuF7j8KXZ4RtSX0YgtjKcSTME=
sigs.k8s.io/controller-runtime v0.18.0/go.mod h1:tuAt1+wbVsXIT8lPtk5RURxqAnq7xkpv2Mhttslg7Hw=
sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs=
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
Expand Down
1 change: 1 addition & 0 deletions pkg/cloudprovider/provider/edge/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package edge

import (
"context"

"go.uber.org/zap"

clusterv1alpha1 "github.com/kubermatic/machine-controller/pkg/apis/cluster/v1alpha1"
Expand Down
71 changes: 33 additions & 38 deletions pkg/controller/machine/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,14 +64,14 @@ import (
"k8s.io/client-go/tools/reference"
"k8s.io/client-go/util/retry"
ccmapi "k8s.io/cloud-provider/api"
"sigs.k8s.io/controller-runtime/pkg/builder"
ctrlruntimeclient "sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller"
"sigs.k8s.io/controller-runtime/pkg/event"
"sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/predicate"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
"sigs.k8s.io/controller-runtime/pkg/source"
)

const (
Expand Down Expand Up @@ -209,50 +209,45 @@ func Add(
reconciler.metrics.Errors.Add(1)
})

c, err := controller.New(ControllerName, mgr, controller.Options{
Reconciler: reconciler,
MaxConcurrentReconciles: numWorkers,
LogConstructor: func(*reconcile.Request) logr.Logger {
// we log ourselves
return zapr.NewLogger(zap.NewNop())
},
})
if err != nil {
return err
}
if err := c.Watch(source.Kind(mgr.GetCache(), &clusterv1alpha1.Machine{}),
&handler.EnqueueRequestForObject{}); err != nil {
return err
}

metrics.Workers.Set(float64(numWorkers))

return c.Watch(
source.Kind(mgr.GetCache(), &corev1.Node{}),
enqueueRequestsForNodes(ctx, log, mgr),
predicate.Funcs{UpdateFunc: func(e event.UpdateEvent) bool {
oldNode := e.ObjectOld.(*corev1.Node)
newNode := e.ObjectNew.(*corev1.Node)
if newNode.ResourceVersion == oldNode.ResourceVersion {
return false
nodePredicate := predicate.Funcs{UpdateFunc: func(e event.UpdateEvent) bool {
oldNode := e.ObjectOld.(*corev1.Node)
newNode := e.ObjectNew.(*corev1.Node)
if newNode.ResourceVersion == oldNode.ResourceVersion {
return false
}
// Don't do anything if the ready condition hasn't changed
for _, newCondition := range newNode.Status.Conditions {
if newCondition.Type != corev1.NodeReady {
continue
}
// Don't do anything if the ready condition hasn't changed
for _, newCondition := range newNode.Status.Conditions {
if newCondition.Type != corev1.NodeReady {
for _, oldCondition := range oldNode.Status.Conditions {
if oldCondition.Type != corev1.NodeReady {
continue
}
for _, oldCondition := range oldNode.Status.Conditions {
if oldCondition.Type != corev1.NodeReady {
continue
}
if newCondition.Status == oldCondition.Status {
return false
}
if newCondition.Status == oldCondition.Status {
return false
}
}
return true
}},
)
}
return true
}}

_, err := builder.ControllerManagedBy(mgr).
Named(ControllerName).
WithOptions(controller.Options{
MaxConcurrentReconciles: numWorkers,
LogConstructor: func(*reconcile.Request) logr.Logger {
// we log ourselves
return zapr.NewLogger(zap.NewNop())
},
}).
For(&clusterv1alpha1.Machine{}).
Watches(&corev1.Node{}, enqueueRequestsForNodes(ctx, log, mgr), builder.WithPredicates(nodePredicate)).
Build(reconciler)

return err
}

func enqueueRequestsForNodes(ctx context.Context, log *zap.SugaredLogger, mgr manager.Manager) handler.EventHandler {
Expand Down
62 changes: 20 additions & 42 deletions pkg/controller/machinedeployment/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@ import (
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/tools/record"
ctrlruntime "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/builder"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller"
"sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
"sigs.k8s.io/controller-runtime/pkg/source"
)

// controllerName is the name of this controller.
Expand Down Expand Up @@ -77,47 +77,25 @@ func Add(mgr manager.Manager, log *zap.SugaredLogger) error {

// add adds a new Controller to mgr with r as the reconcile.Reconciler.
func add(mgr manager.Manager, r reconcile.Reconciler, mapFn handler.MapFunc) error {
// Create a new controller.
c, err := controller.New(controllerName, mgr, controller.Options{
Reconciler: r,
LogConstructor: func(*reconcile.Request) logr.Logger {
// we log ourselves
return zapr.NewLogger(zap.NewNop())
},
})
if err != nil {
return err
}

// Watch for changes to MachineDeployment.
err = c.Watch(source.Kind(mgr.GetCache(), &v1alpha1.MachineDeployment{}),
&handler.EnqueueRequestForObject{},
)
if err != nil {
return err
}

// Watch for changes to MachineSet and reconcile the owner MachineDeployment.
err = c.Watch(
source.Kind(mgr.GetCache(), &v1alpha1.MachineSet{}),
handler.EnqueueRequestForOwner(mgr.GetScheme(), mgr.GetRESTMapper(), &v1alpha1.MachineDeployment{}, handler.OnlyControllerOwner()),
)
if err != nil {
return err
}

// Watch for changes to MachineSets using a mapping function to MachineDeployment.
// This watcher is required for use cases like adoption. In case a MachineSet doesn't have
// a controller reference, it'll look for potential matching MachineDeployments to reconcile.
err = c.Watch(
source.Kind(mgr.GetCache(), &v1alpha1.MachineSet{}),
handler.EnqueueRequestsFromMapFunc(mapFn),
)
if err != nil {
return err
}

return nil
_, err := builder.ControllerManagedBy(mgr).
Named(controllerName).
WithOptions(controller.Options{
LogConstructor: func(*reconcile.Request) logr.Logger {
// we log ourselves
return zapr.NewLogger(zap.NewNop())
},
}).
// Watch for changes to MachineDeployment.
For(&v1alpha1.MachineDeployment{}).
// Watch for changes to MachineSet and reconcile the owner MachineDeployment.
Owns(&v1alpha1.MachineSet{}).
// Watch for changes to MachineSets using a mapping function to MachineDeployment.
// This watcher is required for use cases like adoption. In case a MachineSet doesn't have
// a controller reference, it'll look for potential matching MachineDeployments to reconcile.
Watches(&v1alpha1.MachineSet{}, handler.EnqueueRequestsFromMapFunc(mapFn)).
Build(r)

return err
}

// Reconcile reads that state of the cluster for a MachineDeployment object and makes changes based on the state read
Expand Down
58 changes: 20 additions & 38 deletions pkg/controller/machineset/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,12 @@ import (
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/client-go/tools/record"
ctrlruntime "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/builder"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller"
"sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
"sigs.k8s.io/controller-runtime/pkg/source"
)

// controllerName is the name of this controller.
Expand Down Expand Up @@ -80,43 +80,25 @@ func newReconciler(mgr manager.Manager, log *zap.SugaredLogger) *ReconcileMachin

// add adds a new Controller to mgr with r as the reconcile.Reconciler.
func add(mgr manager.Manager, r reconcile.Reconciler, mapFn handler.MapFunc) error {
// Create a new controller.
c, err := controller.New(controllerName, mgr, controller.Options{
Reconciler: r,
LogConstructor: func(*reconcile.Request) logr.Logger {
// we log ourselves
return zapr.NewLogger(zap.NewNop())
},
})
if err != nil {
return err
}

// Watch for changes to MachineSet.
err = c.Watch(
source.Kind(mgr.GetCache(), &clusterv1alpha1.MachineSet{}),
&handler.EnqueueRequestForObject{},
)
if err != nil {
return err
}

// Watch for changes to Machines and reconcile the owner MachineSet.
err = c.Watch(
source.Kind(mgr.GetCache(), &clusterv1alpha1.Machine{}),
handler.EnqueueRequestForOwner(mgr.GetScheme(), mgr.GetRESTMapper(), &clusterv1alpha1.MachineSet{}, handler.OnlyControllerOwner()),
)
if err != nil {
return err
}

// Watch for changes to Machines using a mapping function to MachineSets.
// This watcher is required for use cases like adoption. In case a Machine doesn't have
// a controller reference, it'll look for potential matching MachineSet to reconcile.
return c.Watch(
source.Kind(mgr.GetCache(), &clusterv1alpha1.Machine{}),
handler.EnqueueRequestsFromMapFunc(mapFn),
)
_, err := builder.ControllerManagedBy(mgr).
Named(controllerName).
WithOptions(controller.Options{
LogConstructor: func(*reconcile.Request) logr.Logger {
// we log ourselves
return zapr.NewLogger(zap.NewNop())
},
}).
// Watch for changes to MachineSet.
For(&clusterv1alpha1.MachineSet{}).
// Watch for changes to Machines and reconcile the owner MachineSet.
Owns(&clusterv1alpha1.Machine{}).
// Watch for changes to Machines using a mapping function to MachineSets.
// This watcher is required for use cases like adoption. In case a Machine doesn't have
// a controller reference, it'll look for potential matching MachineSet to reconcile.
Watches(&clusterv1alpha1.Machine{}, handler.EnqueueRequestsFromMapFunc(mapFn)).
Build(r)

return err
}

// ReconcileMachineSet reconciles a MachineSet object.
Expand Down
28 changes: 13 additions & 15 deletions pkg/controller/nodecsrapprover/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,11 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/sets"
certificatesv1client "k8s.io/client-go/kubernetes/typed/certificates/v1"
"sigs.k8s.io/controller-runtime/pkg/builder"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller"
"sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
"sigs.k8s.io/controller-runtime/pkg/source"
)

const (
Expand Down Expand Up @@ -81,20 +80,19 @@ func Add(mgr manager.Manager, log *zap.SugaredLogger) error {
log: log.Named(ControllerName),
certClient: certClient.CertificateSigningRequests(),
}
watchType := &certificatesv1.CertificateSigningRequest{}

cntrl, err := controller.New(ControllerName, mgr, controller.Options{
Reconciler: rec,
LogConstructor: func(*reconcile.Request) logr.Logger {
// we log ourselves
return zapr.NewLogger(zap.NewNop())
},
})
if err != nil {
return fmt.Errorf("failed to construct controller: %w", err)
}

return cntrl.Watch(source.Kind(mgr.GetCache(), watchType), &handler.EnqueueRequestForObject{})
_, err = builder.ControllerManagedBy(mgr).
Named(ControllerName).
WithOptions(controller.Options{
LogConstructor: func(*reconcile.Request) logr.Logger {
// we log ourselves
return zapr.NewLogger(zap.NewNop())
},
}).
For(&certificatesv1.CertificateSigningRequest{}).
Build(rec)

return err
}

func (r *reconciler) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) {
Expand Down

0 comments on commit 298f82f

Please sign in to comment.