actions-runner-controller/controllers/actions.github.com/clientutil.go

40 lines
1.0 KiB
Go

package actionsgithubcom
import (
"context"
"go.opentelemetry.io/otel"
kclient "sigs.k8s.io/controller-runtime/pkg/client"
)
type object[T kclient.Object] interface {
kclient.Object
DeepCopy() T
}
type patcher interface {
Patch(ctx context.Context, obj kclient.Object, patch kclient.Patch, opts ...kclient.PatchOption) error
}
func patch[T object[T]](ctx context.Context, client patcher, obj T, update func(obj T)) error {
ctx, span := otel.Tracer("arc").Start(ctx, "patch")
defer span.End()
original := obj.DeepCopy()
update(obj)
return client.Patch(ctx, obj, kclient.MergeFrom(original))
}
type subResourcePatcher interface {
Patch(ctx context.Context, obj kclient.Object, patch kclient.Patch, opts ...kclient.SubResourcePatchOption) error
}
func patchSubResource[T object[T]](ctx context.Context, client subResourcePatcher, obj T, update func(obj T)) error {
ctx, span := otel.Tracer("arc").Start(ctx, "patchSubResource")
defer span.End()
original := obj.DeepCopy()
update(obj)
return client.Patch(ctx, obj, kclient.MergeFrom(original))
}