@@ -2,7 +2,9 @@ package controller
22
33import (
44 "context"
5+ "encoding/json"
56 "fmt"
7+ "maps"
68 "net/url"
79 "os/exec"
810 "slices"
@@ -185,11 +187,14 @@ func labelConfigurationResources(ctx context.Context, addonC *addonapi.Clientset
185187 if addonTemplate .Labels == nil {
186188 addonTemplate .Labels = make (map [string ]string )
187189 }
188- for k , v := range v1alpha1 .ManagedByLabels {
189- addonTemplate .Labels [k ] = v
190+ maps .Copy (addonTemplate .Labels , v1alpha1 .ManagedByLabels )
191+
192+ patchBytes , err := json .Marshal (labelPatchData (addonTemplate .Labels ))
193+ if err != nil {
194+ return fmt .Errorf ("failed to marshal patch data for AddOnTemplate %s: %v" , addonTemplateName , err )
190195 }
191196
192- _ , err = addonC .AddonV1alpha1 ().AddOnTemplates ().Update (ctx , addonTemplate , metav1.UpdateOptions {})
197+ _ , err = addonC .AddonV1alpha1 ().AddOnTemplates ().Patch (ctx , addonTemplate . Name , types . MergePatchType , patchBytes , metav1.PatchOptions {})
193198 if err != nil {
194199 return fmt .Errorf ("failed to update AddOnTemplate %s with labels: %v" , addonTemplateName , err )
195200 }
@@ -205,11 +210,14 @@ func labelConfigurationResources(ctx context.Context, addonC *addonapi.Clientset
205210 if clusterMgmtAddOn .Labels == nil {
206211 clusterMgmtAddOn .Labels = make (map [string ]string )
207212 }
208- for k , v := range v1alpha1 .ManagedByLabels {
209- clusterMgmtAddOn .Labels [k ] = v
213+ maps .Copy (clusterMgmtAddOn .Labels , v1alpha1 .ManagedByLabels )
214+
215+ patchBytes , err = json .Marshal (labelPatchData (clusterMgmtAddOn .Labels ))
216+ if err != nil {
217+ return fmt .Errorf ("failed to marshal patch data for ClusterManagementAddOn %s: %v" , addon .Name , err )
210218 }
211219
212- _ , err = addonC .AddonV1alpha1 ().ClusterManagementAddOns ().Update (ctx , clusterMgmtAddOn , metav1.UpdateOptions {})
220+ _ , err = addonC .AddonV1alpha1 ().ClusterManagementAddOns ().Patch (ctx , clusterMgmtAddOn . Name , types . MergePatchType , patchBytes , metav1.PatchOptions {})
213221 if err != nil {
214222 return fmt .Errorf ("failed to update ClusterManagementAddOn %s with labels: %v" , addon .Name , err )
215223 }
@@ -426,11 +434,14 @@ func labelManagedClusterAddOn(ctx context.Context, addonC *addonapi.Clientset, s
426434 if mcao .Labels == nil {
427435 mcao .Labels = make (map [string ]string )
428436 }
429- for k , v := range v1alpha1 .ManagedByLabels {
430- mcao .Labels [k ] = v
437+ maps .Copy (mcao .Labels , v1alpha1 .ManagedByLabels )
438+
439+ patchBytes , err := json .Marshal (labelPatchData (mcao .Labels ))
440+ if err != nil {
441+ return fmt .Errorf ("failed to marshal patch data for ManagedClusterAddOn %s: %v" , addonName , err )
431442 }
432443
433- _ , err = addonC .AddonV1alpha1 ().ManagedClusterAddOns (spokeName ).Update (ctx , mcao , metav1.UpdateOptions {})
444+ _ , err = addonC .AddonV1alpha1 ().ManagedClusterAddOns (spokeName ).Patch (ctx , mcao . Name , types . MergePatchType , patchBytes , metav1.PatchOptions {})
434445 if err != nil {
435446 return fmt .Errorf ("failed to update ManagedClusterAddOn %s for spoke %s with labels: %v" , addonName , spokeName , err )
436447 }
@@ -464,3 +475,11 @@ func handleAddonDisable(ctx context.Context, spokeName string, addons []string)
464475 logger .V (1 ).Info ("disabled addons" , "managedcluster" , spokeName , "addons" , addons , "output" , string (stdout ))
465476 return nil
466477}
478+
479+ func labelPatchData (labels map [string ]string ) map [string ]any {
480+ return map [string ]any {
481+ "metadata" : map [string ]any {
482+ "labels" : labels ,
483+ },
484+ }
485+ }
0 commit comments