mirror of
https://github.com/kairos-io/osbuilder.git
synced 2025-06-28 07:57:16 +00:00
29 lines
794 B
Go
29 lines
794 B
Go
|
package controllers
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"reflect"
|
||
|
|
||
|
"k8s.io/client-go/util/retry"
|
||
|
ctrlruntimeclient "sigs.k8s.io/controller-runtime/pkg/client"
|
||
|
)
|
||
|
|
||
|
func TryToUpdateStatus(ctx context.Context, client ctrlruntimeclient.Client, object ctrlruntimeclient.Object) error {
|
||
|
key := ctrlruntimeclient.ObjectKeyFromObject(object)
|
||
|
|
||
|
return retry.RetryOnConflict(retry.DefaultRetry, func() error {
|
||
|
original := object.DeepCopyObject().(ctrlruntimeclient.Object)
|
||
|
if err := client.Get(ctx, key, object); err != nil {
|
||
|
return fmt.Errorf("could not fetch current %s/%s state, got error: %+v", object.GetName(), object.GetNamespace(), err)
|
||
|
}
|
||
|
|
||
|
if reflect.DeepEqual(object, original) {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
return client.Status().Patch(ctx, original, ctrlruntimeclient.MergeFrom(object))
|
||
|
})
|
||
|
|
||
|
}
|