Skip to content

Commit 362e410

Browse files
committed
Adding a watcher to the LinodeCluster for new machine objects.
1 parent 2ba7e97 commit 362e410

2 files changed

Lines changed: 53 additions & 0 deletions

File tree

internal/controller/linodecluster_controller.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ import (
3838
"sigs.k8s.io/controller-runtime/pkg/client"
3939
crcontroller "sigs.k8s.io/controller-runtime/pkg/controller"
4040
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
41+
"sigs.k8s.io/controller-runtime/pkg/event"
4142
"sigs.k8s.io/controller-runtime/pkg/handler"
43+
"sigs.k8s.io/controller-runtime/pkg/predicate"
4244

4345
infrav1alpha2 "github.com/linode/cluster-api-provider-linode/api/v1alpha2"
4446
"github.com/linode/cluster-api-provider-linode/cloud/scope"
@@ -533,6 +535,20 @@ func (r *LinodeClusterReconciler) SetupWithManager(mgr ctrl.Manager, options crc
533535
),
534536
builder.WithPredicates(predicates.ClusterPausedTransitionsOrInfrastructureProvisioned(mgr.GetScheme(), mgr.GetLogger())),
535537
).
538+
Watches(
539+
&clusterv1.Machine{},
540+
handler.EnqueueRequestsFromMapFunc(machineToLinodeCluster(r.TracedClient(), mgr.GetLogger())),
541+
builder.WithPredicates(predicate.Funcs{
542+
CreateFunc: func(e event.CreateEvent) bool {
543+
return !e.Object.GetDeletionTimestamp().IsZero()
544+
},
545+
UpdateFunc: func(e event.UpdateEvent) bool {
546+
return !e.ObjectNew.GetDeletionTimestamp().IsZero()
547+
},
548+
DeleteFunc: func(event.DeleteEvent) bool { return false },
549+
GenericFunc: func(event.GenericEvent) bool { return false },
550+
}),
551+
).
536552
Watches(
537553
&infrav1alpha2.LinodeMachine{},
538554
handler.EnqueueRequestsFromMapFunc(linodeMachineToLinodeCluster(r.TracedClient(), mgr.GetLogger())),

internal/controller/linodecluster_controller_helpers.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,43 @@ func buildPortCombosForIP(ip string, apiServerLBPort int, additionalPorts []infr
143143
return results
144144
}
145145

146+
func machineToLinodeCluster(tracedClient client.Client, logger logr.Logger) handler.MapFunc {
147+
logger = logger.WithName("LinodeClusterReconciler").WithName("MachineToLinodeCluster")
148+
149+
return func(ctx context.Context, o client.Object) []ctrl.Request {
150+
ctx, cancel := context.WithTimeout(ctx, reconciler.DefaultMappingTimeout)
151+
defer cancel()
152+
153+
machine, ok := o.(*clusterv1.Machine)
154+
if !ok {
155+
logger.Info("Failed to cast object to Machine")
156+
return nil
157+
}
158+
159+
linodeCluster := infrav1alpha2.LinodeCluster{}
160+
if err := tracedClient.Get(
161+
ctx,
162+
types.NamespacedName{
163+
Name: machine.Labels[clusterv1.ClusterNameLabel],
164+
Namespace: machine.Namespace,
165+
},
166+
&linodeCluster); err != nil {
167+
logger.Info("Failed to get LinodeCluster")
168+
return nil
169+
}
170+
171+
result := make([]ctrl.Request, 0, 1)
172+
result = append(result, ctrl.Request{
173+
NamespacedName: client.ObjectKey{
174+
Namespace: linodeCluster.Namespace,
175+
Name: linodeCluster.Name,
176+
},
177+
})
178+
179+
return result
180+
}
181+
}
182+
146183
func linodeMachineToLinodeCluster(tracedClient client.Client, logger logr.Logger) handler.MapFunc {
147184
logger = logger.WithName("LinodeClusterReconciler").WithName("linodeMachineToLinodeCluster")
148185

0 commit comments

Comments
 (0)