Skip to content

Commit 260ec26

Browse files
committed
add template patcher
1 parent 9c2e402 commit 260ec26

5 files changed

Lines changed: 22 additions & 3 deletions

File tree

xset/api/xset_controller_types.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ type XSetController interface {
3535

3636
GetXSetSpec(object XSetObject) *XSetSpec
3737
GetXSetPatch(object metav1.Object) ([]byte, error)
38+
GetXSetTemplatePatcher(object metav1.Object) func(client.Object) error
3839
UpdateScaleStrategy(object XSetObject, scaleStrategy *ScaleStrategy) (err error)
3940
GetXSetStatus(object XSetObject) *XSetStatus
4041
SetXSetStatus(object XSetObject, status *XSetStatus)

xset/synccontrols/sync_control.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,9 @@ func (r *RealSyncControl) Scale(ctx context.Context, xsetObject api.XSetObject,
473473
r.xsetLabelMgr.Set(object.GetLabels(), api.EnumXSetTargetCompletingLabel, strconv.FormatInt(time.Now().UnixNano(), 10))
474474
}
475475
return nil
476-
})
476+
},
477+
r.xsetController.GetXSetTemplatePatcher(xsetObject),
478+
)
477479
if err != nil {
478480
return fmt.Errorf("fail to new Target from revision %s: %w", revision.GetName(), err)
479481
}

xset/synccontrols/x_replace.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,8 @@ func (r *RealSyncControl) replaceOriginTargets(
131131
replaceRevision := r.getReplaceRevision(originTarget, syncContext)
132132

133133
// create target using update revision if replaced by update, otherwise using current revision
134-
newTarget, err := NewTargetFrom(r.xsetController, r.xsetLabelMgr, instance, replaceRevision, originTargetId)
134+
newTarget, err := NewTargetFrom(r.xsetController, r.xsetLabelMgr, instance, replaceRevision, originTargetId,
135+
r.xsetController.GetXSetTemplatePatcher(instance))
135136
if err != nil {
136137
return err
137138
}

xset/synccontrols/x_utils.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package synccontrols
1818

1919
import (
20+
"context"
2021
"fmt"
2122
"strconv"
2223
"time"
@@ -26,6 +27,8 @@ import (
2627
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2728
"sigs.k8s.io/controller-runtime/pkg/client"
2829

30+
clientutils "kusionstack.io/kube-utils/client"
31+
controllerutils "kusionstack.io/kube-utils/controller/utils"
2932
"kusionstack.io/kube-utils/xset/api"
3033
)
3134

@@ -180,3 +183,14 @@ func IsControlledByXSet(xsetLabelManager api.XSetLabelManager, obj client.Object
180183
v, ok := xsetLabelManager.Get(obj.GetLabels(), api.EnumXSetControlledLabel)
181184
return ok && v == "true"
182185
}
186+
187+
func ApplyTemplatePatcher(ctx context.Context, xsetController api.XSetController, c client.Client, xset api.XSetObject, targets []targetWrapper) error {
188+
_, patchErr := controllerutils.SlowStartBatch(len(targets), controllerutils.SlowStartInitialBatchSize, false, func(i int, _ error) error {
189+
if targets[i].Object == nil || targets[i].PlaceHolder {
190+
return nil
191+
}
192+
_, err := clientutils.UpdateOnConflict(ctx, c, c, targets[i].Object, xsetController.GetXSetTemplatePatcher(xset))
193+
return err
194+
})
195+
return patchErr
196+
}

xset/xset_controller.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,9 @@ func (r *xSetCommonReconciler) doSync(ctx context.Context, instance api.XSetObje
242242

243243
_, scaleRequeueAfter, scaleErr := r.syncControl.Scale(ctx, instance, syncContext)
244244
_, updateRequeueAfter, updateErr := r.syncControl.Update(ctx, instance, syncContext)
245+
patcherErr := synccontrols.ApplyTemplatePatcher(ctx, r.XSetController, r.Client, instance, syncContext.TargetWrappers)
245246

246-
err = errors.Join(scaleErr, updateErr)
247+
err = errors.Join(scaleErr, updateErr, patcherErr)
247248
if updateRequeueAfter != nil && (scaleRequeueAfter == nil || *updateRequeueAfter < *scaleRequeueAfter) {
248249
return updateRequeueAfter, err
249250
}

0 commit comments

Comments
 (0)