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


The following commit(s) were added to refs/heads/master by this push:
     new 0087d1b  Add a state to integrations waiting for platform to be ready 
#136
0087d1b is described below

commit 0087d1bfac12798d6238821e2fb38e0765c8190a
Author: lburgazzoli <[email protected]>
AuthorDate: Wed Jan 16 14:40:25 2019 +0100

    Add a state to integrations waiting for platform to be ready #136
---
 pkg/apis/camel/v1alpha1/integration_types.go |  4 +++
 pkg/controller/integration/initialize.go     | 42 ++++++++++++++++++++++------
 2 files changed, 37 insertions(+), 9 deletions(-)

diff --git a/pkg/apis/camel/v1alpha1/integration_types.go 
b/pkg/apis/camel/v1alpha1/integration_types.go
index a84d2fc..6a4f51b 100644
--- a/pkg/apis/camel/v1alpha1/integration_types.go
+++ b/pkg/apis/camel/v1alpha1/integration_types.go
@@ -123,6 +123,10 @@ const (
        // IntegrationKind --
        IntegrationKind string = "Integration"
 
+       // IntegrationPhaseInitial --
+       IntegrationPhaseInitial IntegrationPhase = ""
+       // IntegrationPhaseWaitingForPlatform --
+       IntegrationPhaseWaitingForPlatform IntegrationPhase = "Waiting For 
Platform"
        // IntegrationPhaseBuildingContext --
        IntegrationPhaseBuildingContext IntegrationPhase = "Building Context"
        // IntegrationPhaseBuildingImage --
diff --git a/pkg/controller/integration/initialize.go 
b/pkg/controller/integration/initialize.go
index aa824af..642addb 100644
--- a/pkg/controller/integration/initialize.go
+++ b/pkg/controller/integration/initialize.go
@@ -43,32 +43,56 @@ func (action *initializeAction) Name() string {
 
 // CanHandle tells whether this action can handle the integration
 func (action *initializeAction) CanHandle(integration *v1alpha1.Integration) 
bool {
-       return integration.Status.Phase == ""
+       return integration.Status.Phase == v1alpha1.IntegrationPhaseInitial || 
integration.Status.Phase == v1alpha1.IntegrationPhaseWaitingForPlatform
 }
 
 // Handle handles the integrations
 func (action *initializeAction) Handle(ctx context.Context, integration 
*v1alpha1.Integration) error {
+       pl, err := platform.GetCurrentPlatform(ctx, action.client, 
integration.Namespace)
+
        // The integration platform needs to be ready before starting to create 
integrations
-       if pl, err := platform.GetCurrentPlatform(ctx, action.client, 
integration.Namespace); err != nil || pl.Status.Phase != 
v1alpha1.IntegrationPlatformPhaseReady {
+       if err != nil || pl.Status.Phase != 
v1alpha1.IntegrationPlatformPhaseReady {
                logrus.Info("Waiting for a integration platform to be ready")
+
+               if integration.Status.Phase != 
v1alpha1.IntegrationPhaseWaitingForPlatform {
+                       target := integration.DeepCopy()
+                       target.Status.Phase = 
v1alpha1.IntegrationPhaseWaitingForPlatform
+
+                       logrus.Info("Integration ", target.Name, " 
transitioning to state ", target.Status.Phase)
+
+                       return action.client.Update(ctx, target)
+               }
+
                return nil
        }
 
-       target := integration.DeepCopy()
+       dgst, err := digest.ComputeForIntegration(integration)
+       if err != nil {
+               return err
+       }
+
+       //
+       // restore phase to initial phase ase traits are not aware of
+       // WaitingForPlatform phase
+       //
+       if integration.Status.Phase == 
v1alpha1.IntegrationPhaseWaitingForPlatform {
+               target := integration.DeepCopy()
+               target.Status.Phase = v1alpha1.IntegrationPhaseInitial
+               target.Status.Digest = dgst
+
+               return action.client.Update(ctx, target)
+       }
+
        // better not changing the spec section of the target because it may be 
used for comparison by a
        // higher level controller (e.g. Knative source controller)
 
+       target := integration.DeepCopy()
+
        // execute custom initialization
        if _, err := trait.Apply(ctx, action.client, target, nil); err != nil {
                return err
        }
 
-       // update the status
-       dgst, err := digest.ComputeForIntegration(integration)
-       if err != nil {
-               return err
-       }
-
        target.Status.Phase = v1alpha1.IntegrationPhaseBuildingContext
        target.Status.Digest = dgst
        target.Status.Context = integration.Spec.Context

Reply via email to