You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pc...@apache.org on 2023/10/06 05:16:11 UTC

[camel-k] branch main updated: fix(api): deprecate .spec.integration Pipe

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

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


The following commit(s) were added to refs/heads/main by this push:
     new ea9fb039e fix(api): deprecate .spec.integration Pipe
ea9fb039e is described below

commit ea9fb039e862775669afd74368fe09cd844d0e8d
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Thu Oct 5 15:56:59 2023 +0200

    fix(api): deprecate .spec.integration Pipe
    
    Closes #4780
---
 config/crd/bases/camel.apache.org_pipes.yaml      |  3 ++-
 docs/modules/ROOT/partials/apis/camel-k-crds.adoc |  1 +
 helm/camel-k/crds/crd-pipe.yaml                   |  3 ++-
 pkg/apis/camel/v1/pipe_types.go                   |  3 +++
 pkg/controller/pipe/initialize.go                 | 11 ++++++++++-
 pkg/controller/pipe/integration.go                |  1 +
 pkg/controller/pipe/monitor.go                    |  9 +++++++++
 7 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/config/crd/bases/camel.apache.org_pipes.yaml b/config/crd/bases/camel.apache.org_pipes.yaml
index 5bf2d8ff0..c8c5b8ea8 100644
--- a/config/crd/bases/camel.apache.org_pipes.yaml
+++ b/config/crd/bases/camel.apache.org_pipes.yaml
@@ -74,7 +74,8 @@ spec:
                 x-kubernetes-preserve-unknown-fields: true
               integration:
                 description: Integration is an optional integration used to specify
-                  custom parameters
+                  custom parameters Deprecated don't use this. Use trait annotations
+                  if you need to change any cluster configuration.
                 properties:
                   configuration:
                     description: 'Deprecated: Use camel trait (camel.properties) to
diff --git a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
index 39fe3ed4c..a9070f7c7 100644
--- a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
+++ b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
@@ -4218,6 +4218,7 @@ PipeSpec defines the binding between a source and a sink. It can include custom
 
 
 Integration is an optional integration used to specify custom parameters
+Deprecated don't use this. Use trait annotations if you need to change any cluster configuration.
 
 |`source` +
 *xref:#_camel_apache_org_v1_Endpoint[Endpoint]*
diff --git a/helm/camel-k/crds/crd-pipe.yaml b/helm/camel-k/crds/crd-pipe.yaml
index 5bf2d8ff0..c8c5b8ea8 100644
--- a/helm/camel-k/crds/crd-pipe.yaml
+++ b/helm/camel-k/crds/crd-pipe.yaml
@@ -74,7 +74,8 @@ spec:
                 x-kubernetes-preserve-unknown-fields: true
               integration:
                 description: Integration is an optional integration used to specify
-                  custom parameters
+                  custom parameters Deprecated don't use this. Use trait annotations
+                  if you need to change any cluster configuration.
                 properties:
                   configuration:
                     description: 'Deprecated: Use camel trait (camel.properties) to
diff --git a/pkg/apis/camel/v1/pipe_types.go b/pkg/apis/camel/v1/pipe_types.go
index 369e8626f..74bf55626 100644
--- a/pkg/apis/camel/v1/pipe_types.go
+++ b/pkg/apis/camel/v1/pipe_types.go
@@ -46,6 +46,7 @@ type Pipe struct {
 // PipeSpec defines the binding between a source and a sink. It can include custom parameters and additional intermediate steps and error handling.
 type PipeSpec struct {
 	// Integration is an optional integration used to specify custom parameters
+	// Deprecated don't use this. Use trait annotations if you need to change any cluster configuration.
 	Integration *IntegrationSpec `json:"integration,omitempty"`
 	// Source is the starting point of the integration defined by this Pipe
 	Source Endpoint `json:"source,omitempty"`
@@ -132,6 +133,8 @@ const (
 	PipeConditionReady PipeConditionType = "Ready"
 	// PipeIntegrationConditionError is used to report the error on the generated Integration.
 	PipeIntegrationConditionError PipeConditionType = "IntegrationError"
+	// PipeIntegrationDeprecationNotice is used to report the usage of a deprecated resource.
+	PipeIntegrationDeprecationNotice PipeConditionType = "DeprecationNotice"
 )
 
 // PipePhase --.
diff --git a/pkg/controller/pipe/initialize.go b/pkg/controller/pipe/initialize.go
index 35b5c56f0..4cec1faf4 100644
--- a/pkg/controller/pipe/initialize.go
+++ b/pkg/controller/pipe/initialize.go
@@ -54,6 +54,15 @@ func (action *initializeAction) CanHandle(binding *v1.Pipe) bool {
 func (action *initializeAction) Handle(ctx context.Context, binding *v1.Pipe) (*v1.Pipe, error) {
 	action.L.Info("Initializing Pipe")
 
+	if binding.Spec.Integration != nil {
+		action.L.Infof("Pipe %s is using deprecated .spec.integration parameter. Please, update and use annotation traits instead", binding.Name)
+		binding.Status.SetCondition(
+			v1.PipeIntegrationDeprecationNotice,
+			corev1.ConditionTrue,
+			".spec.integration parameter is deprecated",
+			".spec.integration parameter is deprecated. Use annotation traits instead",
+		)
+	}
 	it, err := CreateIntegrationFor(ctx, action.client, binding)
 	if err != nil {
 		binding.Status.Phase = v1.PipePhaseError
@@ -63,7 +72,7 @@ func (action *initializeAction) Handle(ctx context.Context, binding *v1.Pipe) (*
 	}
 
 	if _, err := kubernetes.ReplaceResource(ctx, action.client, it); err != nil {
-		return nil, fmt.Errorf("could not create integration forPipe: %w", err)
+		return nil, fmt.Errorf("could not create integration for Pipe: %w", err)
 	}
 
 	// propagate Kamelet icon (best effort)
diff --git a/pkg/controller/pipe/integration.go b/pkg/controller/pipe/integration.go
index 9d21e1c41..cf25f0722 100644
--- a/pkg/controller/pipe/integration.go
+++ b/pkg/controller/pipe/integration.go
@@ -75,6 +75,7 @@ func CreateIntegrationFor(ctx context.Context, c client.Client, binding *v1.Pipe
 	it.GetLabels()[kubernetes.CamelCreatorLabelKind] = binding.Kind
 	it.GetLabels()[kubernetes.CamelCreatorLabelName] = binding.Name
 
+	// Deprecated
 	// start from the integration spec defined in the binding
 	if binding.Spec.Integration != nil {
 		it.Spec = *binding.Spec.Integration.DeepCopy()
diff --git a/pkg/controller/pipe/monitor.go b/pkg/controller/pipe/monitor.go
index a2bff2456..292add27a 100644
--- a/pkg/controller/pipe/monitor.go
+++ b/pkg/controller/pipe/monitor.go
@@ -82,6 +82,15 @@ func (action *monitorAction) Handle(ctx context.Context, binding *v1.Pipe) (*v1.
 
 	// Check if the integration needs to be changed
 	expected, err := CreateIntegrationFor(ctx, action.client, binding)
+	if binding.Spec.Integration != nil {
+		action.L.Infof("Pipe %s is using deprecated .spec.integration parameter. Please, update and use annotation traits instead", binding.Name)
+		binding.Status.SetCondition(
+			v1.PipeIntegrationDeprecationNotice,
+			corev1.ConditionTrue,
+			".spec.integration parameter is deprecated",
+			".spec.integration parameter is deprecated. Use annotation traits instead",
+		)
+	}
 	if err != nil {
 		binding.Status.Phase = v1.PipePhaseError
 		binding.Status.SetErrorCondition(v1.PipeIntegrationConditionError,