@@ -13,9 +13,12 @@ import (
1313 ctrl "sigs.k8s.io/controller-runtime"
1414 "sigs.k8s.io/controller-runtime/pkg/client"
1515 "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
16+ "sigs.k8s.io/controller-runtime/pkg/handler"
1617 "sigs.k8s.io/controller-runtime/pkg/manager"
18+ "sigs.k8s.io/controller-runtime/pkg/reconcile"
1719
1820 vmopv1 "github.com/vmware-tanzu/vm-operator/api/v1alpha3"
21+ topologyv1 "github.com/vmware-tanzu/vm-operator/external/tanzu-topology/api/v1alpha1"
1922 pkgcfg "github.com/vmware-tanzu/vm-operator/pkg/config"
2023 pkgctx "github.com/vmware-tanzu/vm-operator/pkg/context"
2124 "github.com/vmware-tanzu/vm-operator/pkg/patch"
@@ -41,9 +44,16 @@ func AddToManager(ctx *pkgctx.ControllerManagerContext, mgr manager.Manager) err
4144 ctx .VMProvider ,
4245 )
4346
44- return ctrl .NewControllerManagedBy (mgr ).
45- For (controlledType ).
46- Complete (r )
47+ builder := ctrl .NewControllerManagedBy (mgr ).
48+ For (controlledType )
49+
50+ if pkgcfg .FromContext (ctx ).Features .WorkloadDomainIsolation {
51+ builder .Watches (
52+ & topologyv1.Zone {},
53+ handler .EnqueueRequestsFromMapFunc (zoneToNamespaceVMSRP (mgr .GetClient ())))
54+ }
55+
56+ return builder .Complete (r )
4757}
4858
4959func NewReconciler (
@@ -59,6 +69,27 @@ func NewReconciler(
5969 }
6070}
6171
72+ func zoneToNamespaceVMSRP (
73+ c client.Client ) func (context.Context , client.Object ) []reconcile.Request {
74+
75+ return func (ctx context.Context , o client.Object ) []reconcile.Request {
76+ zone := o .(* topologyv1.Zone )
77+
78+ list := vmopv1.VirtualMachineSetResourcePolicyList {}
79+ if err := c .List (ctx , & list , client .InNamespace (zone .Namespace )); err != nil {
80+ return nil
81+ }
82+
83+ var reconcileRequests []reconcile.Request
84+ for i := range list .Items {
85+ reconcileRequests = append (reconcileRequests , reconcile.Request {
86+ NamespacedName : client .ObjectKeyFromObject (& list .Items [i ]),
87+ })
88+ }
89+ return reconcileRequests
90+ }
91+ }
92+
6293// Reconciler reconciles a VirtualMachineSetResourcePolicy object.
6394type Reconciler struct {
6495 Context context.Context
0 commit comments