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 2024/01/09 14:21:55 UTC
(camel-k) 07/08: chore: monitor when missing delete event
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
commit bc63675eb9ca8473fddf0f9e108997cd336779d0
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Wed Jan 3 15:26:48 2024 +0100
chore: monitor when missing delete event
---
pkg/controller/integration/monitor_synthetic.go | 11 +++++++++++
pkg/controller/integration/monitor_synthetic_test.go | 13 +++++++++++--
pkg/trait/trait.go | 7 ++++++-
3 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/pkg/controller/integration/monitor_synthetic.go b/pkg/controller/integration/monitor_synthetic.go
index cee622163..a51758814 100644
--- a/pkg/controller/integration/monitor_synthetic.go
+++ b/pkg/controller/integration/monitor_synthetic.go
@@ -65,5 +65,16 @@ func (action *monitorSyntheticAction) Handle(ctx context.Context, integration *v
return integration, err
}
+ if environment == nil {
+ // The application which generated the Integration has no longer the importing label. We may have missed the
+ // delete event, therefore we need to perform the operation here.
+ err := action.client.Delete(ctx, integration)
+ action.L.Infof("Deleting synthetic Integration %s", integration.Name)
+ if err != nil {
+ return integration, err
+ }
+ return nil, nil
+ }
+
return action.monitorPods(ctx, environment, integration)
}
diff --git a/pkg/controller/integration/monitor_synthetic_test.go b/pkg/controller/integration/monitor_synthetic_test.go
index c2217218a..aa1f9b232 100644
--- a/pkg/controller/integration/monitor_synthetic_test.go
+++ b/pkg/controller/integration/monitor_synthetic_test.go
@@ -110,7 +110,7 @@ func TestMonitorSyntheticIntegrationCannotMonitorPods(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{
Namespace: "ns",
Name: "my-deploy",
- Annotations: map[string]string{
+ Labels: map[string]string{
v1.IntegrationLabel: "my-imported-it",
},
},
@@ -178,7 +178,7 @@ func TestMonitorSyntheticIntegrationDeployment(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{
Namespace: "ns",
Name: "my-deploy",
- Annotations: map[string]string{
+ Labels: map[string]string{
v1.IntegrationLabel: "my-imported-it",
},
},
@@ -249,6 +249,15 @@ func TestMonitorSyntheticIntegrationDeployment(t *testing.T) {
// Check monitoring pods condition
assert.Equal(t, corev1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionMonitoringPodsAvailable).Status)
assert.Equal(t, v1.IntegrationConditionMonitoringPodsAvailableReason, handledIt.Status.GetCondition(v1.IntegrationConditionMonitoringPodsAvailable).Reason)
+
+ // Remove label from deployment
+ deploy.Labels = nil
+ c, err = test.NewFakeClient(importedIt, deploy)
+ assert.Nil(t, err)
+ a.InjectClient(c)
+ handledIt, err = a.Handle(context.TODO(), importedIt)
+ assert.Nil(t, err)
+ assert.Nil(t, handledIt)
}
func TestMonitorSyntheticIntegrationCronJob(t *testing.T) {
diff --git a/pkg/trait/trait.go b/pkg/trait/trait.go
index 16794ee12..059b294f1 100644
--- a/pkg/trait/trait.go
+++ b/pkg/trait/trait.go
@@ -137,7 +137,8 @@ func newEnvironment(ctx context.Context, c client.Client, integration *v1.Integr
return &env, nil
}
-// NewSyntheticEnvironment creates an environment suitable for a synthetic Integration.
+// NewSyntheticEnvironment creates an environment suitable for a synthetic Integration. If the application which generated the synthetic Integration
+// has no longer the label, it will return a nil result.
func NewSyntheticEnvironment(ctx context.Context, c client.Client, integration *v1.Integration, kit *v1.IntegrationKit) (*Environment, error) {
if integration == nil && kit == nil {
return nil, errors.New("neither integration nor kit are set")
@@ -173,6 +174,10 @@ func NewSyntheticEnvironment(ctx context.Context, c client.Client, integration *
if err != nil {
return nil, err
}
+ // Verify if the application has still the expected label. If not, return nil.
+ if camelApp.GetLabels()[v1.IntegrationLabel] != integration.Name {
+ return nil, nil
+ }
env.Resources.Add(camelApp)
return &env, nil