You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2019/10/01 13:53:49 UTC

[camel-k] 06/08: Fix #952: fix error while replacing knative services (immutable annotation)

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

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

commit 57a982233fdb2cb3c8aaaa6ed941184a27ddf9b5
Author: nferraro <ni...@gmail.com>
AuthorDate: Thu Sep 26 18:24:09 2019 +0200

    Fix #952: fix error while replacing knative services (immutable annotation)
---
 pkg/util/kubernetes/replace.go | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/pkg/util/kubernetes/replace.go b/pkg/util/kubernetes/replace.go
index 927a625..cbf5029 100644
--- a/pkg/util/kubernetes/replace.go
+++ b/pkg/util/kubernetes/replace.go
@@ -29,6 +29,8 @@ import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/runtime"
 	k8sclient "sigs.k8s.io/controller-runtime/pkg/client"
+	serving "knative.dev/serving/pkg/apis/serving/v1beta1"
+	servingv1 "knative.dev/serving/pkg/apis/serving/v1"
 )
 
 // ReplaceResources allows to completely replace a list of resources on Kubernetes, taking care of immutable fields and resource versions
@@ -60,6 +62,8 @@ func ReplaceResource(ctx context.Context, c client.Client, res runtime.Object) e
 		mapRequiredServiceData(existing, res)
 		mapRequiredRouteData(existing, res)
 		mapRequiredKnativeData(existing, res)
+		mapRequiredKnativeServiceV1Beta1Data(existing, res)
+		mapRequiredKnativeServiceV1Data(existing, res)
 		err = c.Update(ctx, res)
 	}
 	if err != nil {
@@ -100,6 +104,38 @@ func mapRequiredKnativeData(from runtime.Object, to runtime.Object) {
 	}
 }
 
+func mapRequiredKnativeServiceV1Beta1Data(from runtime.Object, to runtime.Object) {
+	if fromC, ok := from.(*serving.Service); ok {
+		if toC, ok := to.(*serving.Service); ok {
+			if toC.ObjectMeta.Annotations == nil {
+				toC.ObjectMeta.Annotations = make(map[string]string)
+			}
+			if v, present := fromC.ObjectMeta.Annotations["serving.knative.dev/creator"]; present {
+				toC.ObjectMeta.Annotations["serving.knative.dev/creator"] = v
+			}
+			if v, present := fromC.ObjectMeta.Annotations["serving.knative.dev/lastModifier"]; present {
+				toC.ObjectMeta.Annotations["serving.knative.dev/lastModifier"] = v
+			}
+		}
+	}
+}
+
+func mapRequiredKnativeServiceV1Data(from runtime.Object, to runtime.Object) {
+	if fromC, ok := from.(*servingv1.Service); ok {
+		if toC, ok := to.(*servingv1.Service); ok {
+			if toC.ObjectMeta.Annotations == nil {
+				toC.ObjectMeta.Annotations = make(map[string]string)
+			}
+			if v, present := fromC.ObjectMeta.Annotations["serving.knative.dev/creator"]; present {
+				toC.ObjectMeta.Annotations["serving.knative.dev/creator"] = v
+			}
+			if v, present := fromC.ObjectMeta.Annotations["serving.knative.dev/lastModifier"]; present {
+				toC.ObjectMeta.Annotations["serving.knative.dev/lastModifier"] = v
+			}
+		}
+	}
+}
+
 func findResourceDetails(res runtime.Object) string {
 	if res == nil {
 		return "nil resource"