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 }
