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 13d68a0f6b80c337869aa7cc3b8251a77bdc40a5
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Fri Sep 29 16:02:45 2023 +0200

    feat(ctrl): verify existence of registry
    
    Closes #4647
---
 pkg/apis/camel/v1/integrationplatform_types.go   |  6 ++++
 pkg/controller/integrationplatform/create.go     |  4 +--
 pkg/controller/integrationplatform/initialize.go |  2 +-
 pkg/controller/integrationplatform/monitor.go    | 35 +++++++++++++++++++++++-
 4 files changed, 43 insertions(+), 4 deletions(-)

diff --git a/pkg/apis/camel/v1/integrationplatform_types.go 
b/pkg/apis/camel/v1/integrationplatform_types.go
index 4b5f8a01b..1d4a047cc 100644
--- a/pkg/apis/camel/v1/integrationplatform_types.go
+++ b/pkg/apis/camel/v1/integrationplatform_types.go
@@ -205,7 +205,13 @@ const (
        IntegrationPlatformPhaseDuplicate IntegrationPlatformPhase = "Duplicate"
 
        // IntegrationPlatformConditionReady is the condition if the 
IntegrationPlatform is ready.
+       // Deprecated: use IntegrationPlatformConditionTypeCreated
        IntegrationPlatformConditionReady = "Ready"
+       // IntegrationPlatformConditionTypeCreated is the condition if the 
IntegrationPlatform has been created.
+       IntegrationPlatformConditionTypeCreated 
IntegrationPlatformConditionType = "Created"
+
+       // IntegrationPlatformConditionTypeRegistryAvailable is the condition 
for the availability of a container registry.
+       IntegrationPlatformConditionTypeRegistryAvailable 
IntegrationPlatformConditionType = "RegistryAvailable"
 
        // IntegrationPlatformConditionCreatedReason represents the reason that 
the IntegrationPlatform is created.
        IntegrationPlatformConditionCreatedReason = "IntegrationPlatformCreated"
diff --git a/pkg/controller/integrationplatform/create.go 
b/pkg/controller/integrationplatform/create.go
index 3aba73474..a5d21f79d 100644
--- a/pkg/controller/integrationplatform/create.go
+++ b/pkg/controller/integrationplatform/create.go
@@ -74,12 +74,12 @@ func (action *createAction) Handle(ctx context.Context, 
platform *v1.Integration
                }
        }
 
-       platform.Status.Phase = v1.IntegrationPlatformPhaseReady
        platform.Status.SetCondition(
-               v1.IntegrationPlatformConditionReady,
+               v1.IntegrationPlatformConditionTypeCreated,
                corev1.ConditionTrue,
                v1.IntegrationPlatformConditionCreatedReason,
                "integration platform created")
 
+       platform.Status.Phase = v1.IntegrationPlatformPhaseReady
        return platform, nil
 }
diff --git a/pkg/controller/integrationplatform/initialize.go 
b/pkg/controller/integrationplatform/initialize.go
index 25add1bf2..a63b9f798 100644
--- a/pkg/controller/integrationplatform/initialize.go
+++ b/pkg/controller/integrationplatform/initialize.go
@@ -46,7 +46,7 @@ func (action *initializeAction) Name() string {
 }
 
 func (action *initializeAction) CanHandle(platform *v1.IntegrationPlatform) 
bool {
-       return platform.Status.Phase == "" || platform.Status.Phase == 
v1.IntegrationPlatformPhaseDuplicate
+       return platform.Status.Phase == v1.IntegrationPlatformPhaseNone || 
platform.Status.Phase == v1.IntegrationPlatformPhaseDuplicate
 }
 
 func (action *initializeAction) Handle(ctx context.Context, platform 
*v1.IntegrationPlatform) (*v1.IntegrationPlatform, error) {
diff --git a/pkg/controller/integrationplatform/monitor.go 
b/pkg/controller/integrationplatform/monitor.go
index 9aeec89c3..107d62b6c 100644
--- a/pkg/controller/integrationplatform/monitor.go
+++ b/pkg/controller/integrationplatform/monitor.go
@@ -19,10 +19,13 @@ package integrationplatform
 
 import (
        "context"
+       "fmt"
 
        v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1"
        platformutil "github.com/apache/camel-k/v2/pkg/platform"
        "github.com/apache/camel-k/v2/pkg/util/defaults"
+       "github.com/apache/camel-k/v2/pkg/util/openshift"
+       corev1 "k8s.io/api/core/v1"
 )
 
 // NewMonitorAction returns an action that monitors the integration platform 
after it's fully initialized.
@@ -39,7 +42,7 @@ func (action *monitorAction) Name() string {
 }
 
 func (action *monitorAction) CanHandle(platform *v1.IntegrationPlatform) bool {
-       return platform.Status.Phase == v1.IntegrationPlatformPhaseReady
+       return platform.Status.Phase == v1.IntegrationPlatformPhaseReady || 
platform.Status.Phase == v1.IntegrationPlatformPhaseError
 }
 
 func (action *monitorAction) Handle(ctx context.Context, platform 
*v1.IntegrationPlatform) (*v1.IntegrationPlatform, error) {
@@ -54,5 +57,35 @@ func (action *monitorAction) Handle(ctx context.Context, 
platform *v1.Integratio
                return nil, err
        }
 
+       // Registry condition
+       isOpenshift, err := openshift.IsOpenShift(action.client)
+       if err != nil {
+               return platform, err
+       }
+       if isOpenshift {
+               platform.Status.SetCondition(
+                       v1.IntegrationPlatformConditionTypeRegistryAvailable,
+                       corev1.ConditionFalse,
+                       "IntegrationPlatformRegistryAvailable",
+                       "registry not available because provided by Openshift")
+       } else {
+               if &platform.Status.Build.Registry == nil || 
platform.Status.Build.Registry.Address == "" {
+                       // error, we need a registry if we're not on Openshift
+                       platform.Status.Phase = v1.IntegrationPlatformPhaseError
+                       platform.Status.SetCondition(
+                               
v1.IntegrationPlatformConditionTypeRegistryAvailable,
+                               corev1.ConditionFalse,
+                               "IntegrationPlatformRegistryAvailable",
+                               "registry not available")
+               } else {
+                       platform.Status.Phase = v1.IntegrationPlatformPhaseReady
+                       platform.Status.SetCondition(
+                               
v1.IntegrationPlatformConditionTypeRegistryAvailable,
+                               corev1.ConditionTrue,
+                               "IntegrationPlatformRegistryAvailable",
+                               fmt.Sprintf("registry available at %s", 
platform.Status.Build.Registry.Address))
+               }
+       }
+
        return platform, nil
 }

Reply via email to