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:
parent
88dd08fe1d
commit
c545400093
|
@ -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())
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue