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 2021/04/08 08:43:12 UTC

[camel-k] 01/03: fix: Add bindings.knative.dev/include label to SinkBinding sources

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

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

commit b070146701dda17590388372acfcf038fb8c0c16
Author: Antonin Stefanutti <an...@stefanutti.fr>
AuthorDate: Fri Apr 2 16:20:12 2021 +0200

    fix: Add bindings.knative.dev/include label to SinkBinding sources
---
 pkg/trait/knative.go              | 18 ++++++++++++++++++
 pkg/util/kubernetes/collection.go |  2 --
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/pkg/trait/knative.go b/pkg/trait/knative.go
index dbef97d..0dcfa2a 100644
--- a/pkg/trait/knative.go
+++ b/pkg/trait/knative.go
@@ -34,6 +34,7 @@ import (
 	"github.com/pkg/errors"
 	corev1 "k8s.io/api/core/v1"
 	k8serrors "k8s.io/apimachinery/pkg/api/errors"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/runtime"
 	eventing "knative.dev/eventing/pkg/apis/eventing/v1beta1"
 	serving "knative.dev/serving/pkg/apis/serving/v1"
@@ -535,7 +536,24 @@ func (t *knativeTrait) configureSinkBinding(e *Environment, env *knativeapi.Came
 						Name:       ref.Name,
 						APIVersion: ref.APIVersion,
 					}
+
+					// Add the SinkBinding in first position, to make sure it is created
+					// before the reference source, so that the SinkBinding webhook has
+					// all the information to perform injection.
 					e.Resources.AddFirst(knativeutil.CreateSinkBinding(source, target))
+
+					// Make sure the Eventing webhook will select the source resource,
+					// in order to inject the sink information.
+					// This is necessary for Knative environments, that are configured
+					// with SINK_BINDING_SELECTION_MODE=inclusion.
+					// See:
+					// - https://knative.dev/v0.20-docs/eventing/sources/sinkbinding/
+					// - https://github.com/knative/operator/blob/c60e62bb86ff318c44d1520927d2182659cfdeb5/docs/configuration.md#specsinkbindingselectionmode
+					c, ok := controller.(metav1.Object)
+					if !ok {
+						return fmt.Errorf("cannot set sink binding selection mode annotation on %v", controller)
+					}
+					c.GetLabels()["bindings.knative.dev/include"] = "true"
 				}
 				return nil
 			})
diff --git a/pkg/util/kubernetes/collection.go b/pkg/util/kubernetes/collection.go
index 4643e2f..1292803 100644
--- a/pkg/util/kubernetes/collection.go
+++ b/pkg/util/kubernetes/collection.go
@@ -474,7 +474,6 @@ func (c *Collection) Remove(selector func(runtime.Object) bool) runtime.Object {
 	return nil
 }
 
-// VisitServiceMonitor ---
 func (c *Collection) VisitServiceMonitor(visitor func(*monitoringv1.ServiceMonitor)) {
 	c.Visit(func(res runtime.Object) {
 		if conv, ok := res.(*monitoringv1.ServiceMonitor); ok {
@@ -483,7 +482,6 @@ func (c *Collection) VisitServiceMonitor(visitor func(*monitoringv1.ServiceMonit
 	})
 }
 
-// GetServiceMonitor ---
 func (c *Collection) GetServiceMonitor(filter func(*monitoringv1.ServiceMonitor) bool) *monitoringv1.ServiceMonitor {
 	var retValue *monitoringv1.ServiceMonitor
 	c.VisitServiceMonitor(func(serviceMonitor *monitoringv1.ServiceMonitor) {