feat: use server side apply for status subresource (#222)

Signed-off-by: Luca Burgazzoli <lburgazzoli@gmail.com>
Co-authored-by: salaboy <Salaboy@gmail.com>
This commit is contained in:
Luca Burgazzoli 2024-09-25 10:36:03 +02:00 committed by GitHub
parent 88dd08fe1d
commit c545400093
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 32 additions and 14 deletions

View File

@ -23,6 +23,9 @@ import (
"fmt"
"sort"
"github.com/dapr/kubernetes-operator/pkg/controller"
"sigs.k8s.io/controller-runtime/pkg/client"
"github.com/dapr/kubernetes-operator/pkg/conditions"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
@ -123,7 +126,12 @@ func (r *Reconciler) Reconcile(ctx context.Context, res *daprApi.DaprInstance) (
// Update status
//
err = r.Client().Status().Update(ctx, rr.Resource)
err = r.Client().ApplyStatus(
ctx,
rr.Resource,
client.ForceOwnership,
client.FieldOwner(controller.FieldManager),
)
if err != nil && k8serrors.IsConflict(err) {
l.Info(err.Error())

View File

@ -1,9 +1,12 @@
package client
import (
"context"
"fmt"
"time"
"github.com/dapr/kubernetes-operator/pkg/resources"
"golang.org/x/time/rate"
apiextv1 "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1"
"k8s.io/apimachinery/pkg/api/meta"
@ -151,3 +154,23 @@ func (c *Client) Invalidate() {
c.discoveryCache.Invalidate()
}
}
func (c *Client) ApplyStatus(ctx context.Context, obj ctrl.Object, opts ...ctrl.SubResourcePatchOption) error {
u, err := resources.ToUnstructured(c.Scheme(), obj)
if err != nil {
return fmt.Errorf("unable to convert object %s to unstructured: %w", obj, err)
}
// Reset field not meaningful for patch
delete(u.Object, "spec")
u.SetResourceVersion("")
u.SetManagedFields(nil)
err = c.Client.Status().Patch(ctx, u, ctrl.Apply, opts...)
if err != nil {
return fmt.Errorf("unable to pactch object %s: %w", obj, err)
}
return nil
}

View File

@ -10,8 +10,6 @@ import (
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"github.com/dapr/kubernetes-operator/pkg/pointer"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@ -88,17 +86,6 @@ func Ref(obj client.Object) string {
)
}
func UnstructuredFor(group string, version string, kind string) *unstructured.Unstructured {
u := unstructured.Unstructured{}
u.SetGroupVersionKind(schema.GroupVersionKind{
Kind: kind,
Group: group,
Version: version,
})
return &u
}
func ToUnstructured(s *runtime.Scheme, obj runtime.Object) (*unstructured.Unstructured, error) {
switch ot := obj.(type) {
case *unstructured.Unstructured: