diff --git a/config/crd/bases/camel.apache.org_integrationplatforms.yaml b/config/crd/bases/camel.apache.org_integrationplatforms.yaml index 4d1fdf46a7..703421ce0e 100644 --- a/config/crd/bases/camel.apache.org_integrationplatforms.yaml +++ b/config/crd/bases/camel.apache.org_integrationplatforms.yaml @@ -1474,7 +1474,9 @@ spec: type: boolean hotReload: description: Enable "hot reload" when a secret/configmap mounted - is edited (default `false`) + is edited (default `false`). The configmap/secret must be + marked with `camel.apache.org/integration` label to be taken + in account. type: boolean resources: description: 'A list of resources (text or binary content) @@ -3340,7 +3342,9 @@ spec: type: boolean hotReload: description: Enable "hot reload" when a secret/configmap mounted - is edited (default `false`) + is edited (default `false`). The configmap/secret must be + marked with `camel.apache.org/integration` label to be taken + in account. type: boolean resources: description: 'A list of resources (text or binary content) diff --git a/config/crd/bases/camel.apache.org_integrations.yaml b/config/crd/bases/camel.apache.org_integrations.yaml index 558ba2dc95..cb7af2c065 100644 --- a/config/crd/bases/camel.apache.org_integrations.yaml +++ b/config/crd/bases/camel.apache.org_integrations.yaml @@ -7375,7 +7375,9 @@ spec: type: boolean hotReload: description: Enable "hot reload" when a secret/configmap mounted - is edited (default `false`) + is edited (default `false`). The configmap/secret must be + marked with `camel.apache.org/integration` label to be taken + in account. type: boolean resources: description: 'A list of resources (text or binary content) diff --git a/config/crd/bases/camel.apache.org_kameletbindings.yaml b/config/crd/bases/camel.apache.org_kameletbindings.yaml index 574914b8c6..549baab200 100644 --- a/config/crd/bases/camel.apache.org_kameletbindings.yaml +++ b/config/crd/bases/camel.apache.org_kameletbindings.yaml @@ -7672,7 +7672,9 @@ spec: type: boolean hotReload: description: Enable "hot reload" when a secret/configmap - mounted is edited (default `false`) + mounted is edited (default `false`). The configmap/secret + must be marked with `camel.apache.org/integration` label + to be taken in account. type: boolean resources: description: 'A list of resources (text or binary content) diff --git a/config/crd/bases/camel.apache.org_pipes.yaml b/config/crd/bases/camel.apache.org_pipes.yaml index 7984794fc0..c83ee3d6a1 100644 --- a/config/crd/bases/camel.apache.org_pipes.yaml +++ b/config/crd/bases/camel.apache.org_pipes.yaml @@ -7670,7 +7670,9 @@ spec: type: boolean hotReload: description: Enable "hot reload" when a secret/configmap - mounted is edited (default `false`) + mounted is edited (default `false`). The configmap/secret + must be marked with `camel.apache.org/integration` label + to be taken in account. type: boolean resources: description: 'A list of resources (text or binary content) diff --git a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc index 83b1362565..685bcb11d8 100644 --- a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc +++ b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc @@ -7392,7 +7392,8 @@ bool | -Enable "hot reload" when a secret/configmap mounted is edited (default `false`) +Enable "hot reload" when a secret/configmap mounted is edited (default `false`). The configmap/secret must be +marked with `camel.apache.org/integration` label to be taken in account. |=== diff --git a/docs/modules/traits/pages/mount.adoc b/docs/modules/traits/pages/mount.adoc index 2e082f419e..1077b8e48e 100644 --- a/docs/modules/traits/pages/mount.adoc +++ b/docs/modules/traits/pages/mount.adoc @@ -47,7 +47,8 @@ Syntax: [configmap\|secret]:name[/key][@path], where name represents the resourc | mount.hot-reload | bool -| Enable "hot reload" when a secret/configmap mounted is edited (default `false`) +| Enable "hot reload" when a secret/configmap mounted is edited (default `false`). The configmap/secret must be +marked with `camel.apache.org/integration` label to be taken in account. |=== diff --git a/e2e/common/config/config_reload_test.go b/e2e/common/config/config_reload_test.go index 338dd7f6e2..cb43fac0fe 100644 --- a/e2e/common/config/config_reload_test.go +++ b/e2e/common/config/config_reload_test.go @@ -40,7 +40,7 @@ func TestConfigmapHotReload(t *testing.T) { var cmData = make(map[string]string) cmData["my-configmap-key"] = "my configmap content" - CreatePlainTextConfigmap(ns, "my-hot-cm", cmData) + CreatePlainTextConfigmapWithLabels(ns, "my-hot-cm", cmData, map[string]string{"camel.apache.org/integration": "test"}) Expect(KamelRunWithID(operatorID, ns, "./files/config-configmap-route.groovy", @@ -56,7 +56,7 @@ func TestConfigmapHotReload(t *testing.T) { Eventually(IntegrationLogs(ns, name), TestTimeoutShort).Should(ContainSubstring("my configmap content")) cmData["my-configmap-key"] = "my configmap content updated" - UpdatePlainTextConfigmap(ns, "my-hot-cm", cmData) + UpdatePlainTextConfigmapWithLabels(ns, "my-hot-cm", cmData, map[string]string{"camel.apache.org/integration": "test"}) Eventually(IntegrationLogs(ns, name), TestTimeoutShort).Should(ContainSubstring("my configmap content updated")) Expect(Kamel("delete", "--all", "-n", ns).Execute()).To(Succeed()) @@ -69,7 +69,7 @@ func TestConfigmapHotReloadDefault(t *testing.T) { var cmData = make(map[string]string) cmData["my-configmap-key"] = "my configmap content" - CreatePlainTextConfigmap(ns, "my-hot-cm-2", cmData) + CreatePlainTextConfigmapWithLabels(ns, "my-hot-cm-2", cmData, map[string]string{"camel.apache.org/integration": "test"}) Expect(KamelRunWithID(operatorID, ns, "./files/config-configmap-route.groovy", "--config", @@ -82,7 +82,7 @@ func TestConfigmapHotReloadDefault(t *testing.T) { Eventually(IntegrationLogs(ns, name), TestTimeoutShort).Should(ContainSubstring("my configmap content")) cmData["my-configmap-key"] = "my configmap content updated" - UpdatePlainTextConfigmap(ns, "my-hot-cm-2", cmData) + UpdatePlainTextConfigmapWithLabels(ns, "my-hot-cm-2", cmData, map[string]string{"camel.apache.org/integration": "test"}) Eventually(IntegrationLogs(ns, name), TestTimeoutShort).Should(Not(ContainSubstring("my configmap content updated"))) Expect(Kamel("delete", "--all", "-n", ns).Execute()).To(Succeed()) @@ -95,7 +95,7 @@ func TestSecretHotReload(t *testing.T) { var secData = make(map[string]string) secData["my-secret-key"] = "very top secret" - CreatePlainTextSecret(ns, "my-hot-sec", secData) + CreatePlainTextSecretWithLabels(ns, "my-hot-sec", secData, map[string]string{"camel.apache.org/integration": "test"}) Expect(KamelRunWithID(operatorID, ns, "./files/config-secret-route.groovy", "--config", @@ -110,7 +110,7 @@ func TestSecretHotReload(t *testing.T) { Eventually(IntegrationLogs(ns, name), TestTimeoutShort).Should(ContainSubstring("very top secret")) secData["my-secret-key"] = "very top secret updated" - UpdatePlainTextSecret(ns, "my-hot-sec", secData) + UpdatePlainTextSecretWithLabels(ns, "my-hot-sec", secData, map[string]string{"camel.apache.org/integration": "test"}) Eventually(IntegrationLogs(ns, name), TestTimeoutShort).Should(ContainSubstring("very top secret updated")) Expect(Kamel("delete", "--all", "-n", ns).Execute()).To(Succeed()) diff --git a/e2e/support/test_support.go b/e2e/support/test_support.go index 3e2faf2c7a..457c3b0a9c 100644 --- a/e2e/support/test_support.go +++ b/e2e/support/test_support.go @@ -1607,6 +1607,10 @@ func CreatePlainTextConfigmapWithLabels(ns string, name string, data map[string] } func UpdatePlainTextConfigmap(ns string, name string, data map[string]string) error { + return UpdatePlainTextConfigmapWithLabels(ns, name, data, nil) +} + +func UpdatePlainTextConfigmapWithLabels(ns string, name string, data map[string]string, labels map[string]string) error { cm := corev1.ConfigMap{ TypeMeta: metav1.TypeMeta{ Kind: "ConfigMap", @@ -1615,6 +1619,7 @@ func UpdatePlainTextConfigmap(ns string, name string, data map[string]string) er ObjectMeta: metav1.ObjectMeta{ Namespace: ns, Name: name, + Labels: labels, }, Data: data, } @@ -1655,6 +1660,10 @@ func CreatePlainTextSecret(ns string, name string, data map[string]string) error } func UpdatePlainTextSecret(ns string, name string, data map[string]string) error { + return UpdatePlainTextSecretWithLabels(ns, name, data, nil) +} + +func UpdatePlainTextSecretWithLabels(ns string, name string, data map[string]string, labels map[string]string) error { sec := corev1.Secret{ TypeMeta: metav1.TypeMeta{ Kind: "Secret", @@ -1663,6 +1672,7 @@ func UpdatePlainTextSecret(ns string, name string, data map[string]string) error ObjectMeta: metav1.ObjectMeta{ Namespace: ns, Name: name, + Labels: labels, }, StringData: data, } diff --git a/helm/camel-k/crds/crd-integration-platform.yaml b/helm/camel-k/crds/crd-integration-platform.yaml index 4d1fdf46a7..703421ce0e 100644 --- a/helm/camel-k/crds/crd-integration-platform.yaml +++ b/helm/camel-k/crds/crd-integration-platform.yaml @@ -1474,7 +1474,9 @@ spec: type: boolean hotReload: description: Enable "hot reload" when a secret/configmap mounted - is edited (default `false`) + is edited (default `false`). The configmap/secret must be + marked with `camel.apache.org/integration` label to be taken + in account. type: boolean resources: description: 'A list of resources (text or binary content) @@ -3340,7 +3342,9 @@ spec: type: boolean hotReload: description: Enable "hot reload" when a secret/configmap mounted - is edited (default `false`) + is edited (default `false`). The configmap/secret must be + marked with `camel.apache.org/integration` label to be taken + in account. type: boolean resources: description: 'A list of resources (text or binary content) diff --git a/helm/camel-k/crds/crd-integration.yaml b/helm/camel-k/crds/crd-integration.yaml index 558ba2dc95..cb7af2c065 100644 --- a/helm/camel-k/crds/crd-integration.yaml +++ b/helm/camel-k/crds/crd-integration.yaml @@ -7375,7 +7375,9 @@ spec: type: boolean hotReload: description: Enable "hot reload" when a secret/configmap mounted - is edited (default `false`) + is edited (default `false`). The configmap/secret must be + marked with `camel.apache.org/integration` label to be taken + in account. type: boolean resources: description: 'A list of resources (text or binary content) diff --git a/helm/camel-k/crds/crd-kamelet-binding.yaml b/helm/camel-k/crds/crd-kamelet-binding.yaml index 574914b8c6..549baab200 100644 --- a/helm/camel-k/crds/crd-kamelet-binding.yaml +++ b/helm/camel-k/crds/crd-kamelet-binding.yaml @@ -7672,7 +7672,9 @@ spec: type: boolean hotReload: description: Enable "hot reload" when a secret/configmap - mounted is edited (default `false`) + mounted is edited (default `false`). The configmap/secret + must be marked with `camel.apache.org/integration` label + to be taken in account. type: boolean resources: description: 'A list of resources (text or binary content) diff --git a/helm/camel-k/crds/crd-pipe.yaml b/helm/camel-k/crds/crd-pipe.yaml index 7984794fc0..c83ee3d6a1 100644 --- a/helm/camel-k/crds/crd-pipe.yaml +++ b/helm/camel-k/crds/crd-pipe.yaml @@ -7670,7 +7670,9 @@ spec: type: boolean hotReload: description: Enable "hot reload" when a secret/configmap - mounted is edited (default `false`) + mounted is edited (default `false`). The configmap/secret + must be marked with `camel.apache.org/integration` label + to be taken in account. type: boolean resources: description: 'A list of resources (text or binary content) diff --git a/pkg/apis/camel/v1/trait/mount.go b/pkg/apis/camel/v1/trait/mount.go index 48b44f20e4..a0bcb889a7 100644 --- a/pkg/apis/camel/v1/trait/mount.go +++ b/pkg/apis/camel/v1/trait/mount.go @@ -35,6 +35,7 @@ type MountTrait struct { Resources []string `property:"resources" json:"resources,omitempty"` // A list of Persistent Volume Claims to be mounted. Syntax: [pvcname:/container/path] Volumes []string `property:"volumes" json:"volumes,omitempty"` - // Enable "hot reload" when a secret/configmap mounted is edited (default `false`) + // Enable "hot reload" when a secret/configmap mounted is edited (default `false`). The configmap/secret must be + // marked with `camel.apache.org/integration` label to be taken in account. HotReload *bool `property:"hot-reload" json:"hotReload,omitempty"` } diff --git a/pkg/controller/integration/integration_controller.go b/pkg/controller/integration/integration_controller.go index 5129f6ade5..233523a1eb 100644 --- a/pkg/controller/integration/integration_controller.go +++ b/pkg/controller/integration/integration_controller.go @@ -37,6 +37,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/event" "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/manager" + "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/reconcile" "knative.dev/serving/pkg/apis/serving" @@ -375,7 +376,11 @@ func watchIntegrationResources(c client.Client, b *builder.Builder) { return []reconcile.Request{} } return configmapEnqueueRequestsFromMapFunc(ctx, c, cm) - })). + }), + builder.WithPredicates(predicate.NewPredicateFuncs(func(object ctrl.Object) bool { + return object.GetLabels()["camel.apache.org/integration"] != "" + })), + ). Watches(&corev1.Secret{}, handler.EnqueueRequestsFromMapFunc(func(ctx context.Context, a ctrl.Object) []reconcile.Request { secret, ok := a.(*corev1.Secret) @@ -384,7 +389,11 @@ func watchIntegrationResources(c client.Client, b *builder.Builder) { return []reconcile.Request{} } return secretEnqueueRequestsFromMapFunc(ctx, c, secret) - })). + }), + builder.WithPredicates(predicate.NewPredicateFuncs(func(object ctrl.Object) bool { + return object.GetLabels()["camel.apache.org/integration"] != "" + })), + ). // Watch for the Integration Pods belonging to managed Integrations Watches(&corev1.Pod{}, handler.EnqueueRequestsFromMapFunc(func(ctx context.Context, a ctrl.Object) []reconcile.Request { diff --git a/resources/traits.yaml b/resources/traits.yaml index 747827bea3..ddf226878e 100755 --- a/resources/traits.yaml +++ b/resources/traits.yaml @@ -1214,7 +1214,8 @@ traits: - name: hot-reload type: bool description: Enable "hot reload" when a secret/configmap mounted is edited (default - `false`) + `false`). The configmap/secret must be marked with `camel.apache.org/integration` + label to be taken in account. - name: openapi platform: true profiles: