This is an automated email from the ASF dual-hosted git repository.

astefanutti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit 467a69774d0756d2b15c32244b1dc55c90926ab6
Author: Antonin Stefanutti <anto...@stefanutti.fr>
AuthorDate: Tue Jan 18 11:46:58 2022 +0100

    fix: Use Kamelet serialized JSON as merge patch for client-side apply
---
 pkg/install/kamelets.go | 18 ++++--------------
 1 file changed, 4 insertions(+), 14 deletions(-)

diff --git a/pkg/install/kamelets.go b/pkg/install/kamelets.go
index 024341c..6bd15f4 100644
--- a/pkg/install/kamelets.go
+++ b/pkg/install/kamelets.go
@@ -19,6 +19,7 @@ package install
 
 import (
        "context"
+       "encoding/json"
        "errors"
        "fmt"
        "io/fs"
@@ -33,7 +34,6 @@ import (
        "golang.org/x/sync/errgroup"
 
        k8serrors "k8s.io/apimachinery/pkg/api/errors"
-       "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
        "k8s.io/apimachinery/pkg/runtime"
        "k8s.io/apimachinery/pkg/types"
 
@@ -139,26 +139,16 @@ func serverSideApply(ctx context.Context, c 
client.Client, resource runtime.Obje
 }
 
 func clientSideApply(ctx context.Context, c client.Client, resource 
ctrl.Object) error {
-       err := c.Create(ctx, resource)
-       if err == nil {
+       if err := c.Create(ctx, resource); err == nil {
                return nil
        } else if !k8serrors.IsAlreadyExists(err) {
                return fmt.Errorf("error during create resource: %s/%s: %w", 
resource.GetNamespace(), resource.GetName(), err)
        }
-       object := &unstructured.Unstructured{}
-       object.SetNamespace(resource.GetNamespace())
-       object.SetName(resource.GetName())
-       object.SetGroupVersionKind(resource.GetObjectKind().GroupVersionKind())
-       err = c.Get(ctx, ctrl.ObjectKeyFromObject(object), object)
+       // Directly use the serialized resource as JSON merge patch since it's 
prescriptive
+       p, err := json.Marshal(resource)
        if err != nil {
                return err
        }
-       p, err := patch.MergePatch(object, resource)
-       if err != nil {
-               return err
-       } else if len(p) == 0 {
-               return nil
-       }
        return c.Patch(ctx, resource, ctrl.RawPatch(types.MergePatchType, p))
 }
 

Reply via email to