From 97faaae1ff19df77a489dfb4a0d467951eea5881 Mon Sep 17 00:00:00 2001 From: Sagar Muchhal Date: Tue, 17 Jun 2025 15:33:48 -0700 Subject: [PATCH] Enhances VirtualMachineSetResourcePolicy reconcile Thie patch ensures that the vSphereCluster owner reference is always set at every reconcile. This ensures that even after a manual removal, the vSphereCluster owner ref link will be reset at the next reconcile. --- pkg/services/vmoperator/resource_policy.go | 24 +++---------------- .../vmoperator/resource_policy_test.go | 8 ++++++- 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/pkg/services/vmoperator/resource_policy.go b/pkg/services/vmoperator/resource_policy.go index 61fd255e02..39a9460d41 100644 --- a/pkg/services/vmoperator/resource_policy.go +++ b/pkg/services/vmoperator/resource_policy.go @@ -21,7 +21,6 @@ import ( "github.com/pkg/errors" vmoprv1 "github.com/vmware-tanzu/vm-operator/api/v1alpha2" - apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/controller-runtime/pkg/client" ctrlutil "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" @@ -37,17 +36,10 @@ type RPService struct { // ReconcileResourcePolicy ensures that a VirtualMachineSetResourcePolicy exists for the cluster // Returns the name of a policy if it exists, otherwise returns an error. func (s *RPService) ReconcileResourcePolicy(ctx context.Context, clusterCtx *vmware.ClusterContext) (string, error) { - resourcePolicy, err := s.getVirtualMachineSetResourcePolicy(ctx, clusterCtx) + resourcePolicy, err := s.createOrPatchVirtualMachineSetResourcePolicy(ctx, clusterCtx) if err != nil { - if !apierrors.IsNotFound(err) { - return "", errors.Errorf("unexpected error in getting the Resource policy: %+v", err) - } - resourcePolicy, err = s.createVirtualMachineSetResourcePolicy(ctx, clusterCtx) - if err != nil { - return "", errors.Errorf("failed to create Resource Policy: %+v", err) - } + return "", errors.Errorf("failed to create Resource Policy: %+v", err) } - return resourcePolicy.Name, nil } @@ -60,17 +52,7 @@ func (s *RPService) newVirtualMachineSetResourcePolicy(clusterCtx *vmware.Cluste } } -func (s *RPService) getVirtualMachineSetResourcePolicy(ctx context.Context, clusterCtx *vmware.ClusterContext) (*vmoprv1.VirtualMachineSetResourcePolicy, error) { - vmResourcePolicy := &vmoprv1.VirtualMachineSetResourcePolicy{} - vmResourcePolicyName := client.ObjectKey{ - Namespace: clusterCtx.Cluster.Namespace, - Name: clusterCtx.Cluster.Name, - } - err := s.Client.Get(ctx, vmResourcePolicyName, vmResourcePolicy) - return vmResourcePolicy, err -} - -func (s *RPService) createVirtualMachineSetResourcePolicy(ctx context.Context, clusterCtx *vmware.ClusterContext) (*vmoprv1.VirtualMachineSetResourcePolicy, error) { +func (s *RPService) createOrPatchVirtualMachineSetResourcePolicy(ctx context.Context, clusterCtx *vmware.ClusterContext) (*vmoprv1.VirtualMachineSetResourcePolicy, error) { vmResourcePolicy := s.newVirtualMachineSetResourcePolicy(clusterCtx) _, err := ctrlutil.CreateOrPatch(ctx, s.Client, vmResourcePolicy, func() error { diff --git a/pkg/services/vmoperator/resource_policy_test.go b/pkg/services/vmoperator/resource_policy_test.go index b2f0529057..c0faa6c060 100644 --- a/pkg/services/vmoperator/resource_policy_test.go +++ b/pkg/services/vmoperator/resource_policy_test.go @@ -22,7 +22,9 @@ import ( "testing" . "github.com/onsi/gomega" + vmoprv1 "github.com/vmware-tanzu/vm-operator/api/v1alpha2" capi_util "sigs.k8s.io/cluster-api/util" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/cluster-api-provider-vsphere/pkg/util" ) @@ -44,7 +46,11 @@ func TestRPService(t *testing.T) { g.Expect(err).NotTo(HaveOccurred()) g.Expect(name).To(Equal(clusterName)) - resourcePolicy, err := rpService.getVirtualMachineSetResourcePolicy(ctx, clusterCtx) + resourcePolicy := &vmoprv1.VirtualMachineSetResourcePolicy{} + err = rpService.Client.Get(ctx, client.ObjectKey{ + Namespace: clusterCtx.Cluster.Namespace, + Name: clusterCtx.Cluster.Name, + }, resourcePolicy) g.Expect(err).NotTo(HaveOccurred()) g.Expect(resourcePolicy.Spec.ResourcePool.Name).To(Equal(clusterName)) g.Expect(resourcePolicy.Spec.Folder).To(Equal(clusterName))