From 502a6d847fd7aa3a5f99f04f05e4fef00428b8ac Mon Sep 17 00:00:00 2001 From: Geovanny_LP Date: Sat, 5 Sep 2026 21:04:01 -0300 Subject: [PATCH] Fix #5191: Use metav1.Condition for CR statuses Replace Camel K's own condition structs (IntegrationCondition, PipeCondition, BuildCondition, IntegrationKitCondition, IntegrationPlatformCondition, KameletCondition, CamelCatalogCondition) with the standard metav1.Condition type across all affected CRDs, backed by the k8s.io/apimachinery/pkg/api/meta helpers (FindStatusCondition, SetStatusCondition, RemoveStatusCondition). - FirstTruthyTime (per-condition) migrated to FirstReadyTimestamp (top-level status field), set only on the first transition to Ready=True. - DeprecatedPods promoted from a per-condition nested field to a top-level status field. - CRDs updated with x-kubernetes-list-type: map / list-map-keys: [type] on the conditions list, per standard Kubernetes conventions. - A conditionAdapter preserves the legacy ResourceCondition interface for existing call sites. - Regenerated: zz_generated.deepcopy.go, pkg/client/camel/applyconfiguration/**, all CRD YAMLs (pkg/resources/config/crd/bases and the Helm CRD bundle), and docs/modules/ROOT/partials/apis/camel-k-crds.adoc via script/gen_doc.sh. - Added unit tests for the migration logic and updated pre-existing assertions across trait/controller tests that compared .Status/.Type against the old typed condition constants. - Fixed isIntegrationUpdated(), which required FirstReadyTimestamp to already be set to detect a transition to Ready=True -- backwards, since that field is exactly what gets set as a result of the transition. The nil/zero guard was moved to the call site in integrationUpdateFunc, where FirstReadyTimestamp.Sub(startTime) is actually dereferenced. IntegrationProfile is intentionally left untouched: its condition field was already marked DeprecatedIntegrationProfileCondition prior to this change. Fixes #5191 Co-authored-by: Ganny-lp --- .../ROOT/partials/apis/camel-k-crds.adoc | 515 ++---------------- e2e/advanced/operator_metrics_test.go | 2 +- e2e/common/traits/health_test.go | 69 +-- e2e/support/test_support.go | 34 +- helm/camel-k/crds/camel-k-crds.yaml | 400 ++++++-------- pkg/apis/camel/v1/build_types.go | 19 +- pkg/apis/camel/v1/build_types_support.go | 103 ++-- pkg/apis/camel/v1/camelcatalog_types.go | 19 +- .../camel/v1/camelcatalog_types_support.go | 87 +-- pkg/apis/camel/v1/integration_types.go | 36 +- .../camel/v1/integration_types_support.go | 108 +--- .../v1/integration_types_support_test.go | 30 + pkg/apis/camel/v1/integrationkit_types.go | 19 +- .../camel/v1/integrationkit_types_support.go | 95 +--- .../camel/v1/integrationplatform_types.go | 19 +- .../v1/integrationplatform_types_support.go | 89 +-- pkg/apis/camel/v1/kamelet_types.go | 19 +- pkg/apis/camel/v1/kamelet_types_support.go | 87 +-- pkg/apis/camel/v1/pipe_types.go | 26 +- pkg/apis/camel/v1/pipe_types_support.go | 101 +--- pkg/apis/camel/v1/pipe_types_support_test.go | 25 + pkg/apis/camel/v1/zz_generated.deepcopy.go | 169 +----- .../camel/v1/buildcondition.go | 99 ---- .../camel/v1/buildstatus.go | 5 +- .../camel/v1/camelcatalogcondition.go | 99 ---- .../camel/v1/camelcatalogstatus.go | 5 +- .../camel/v1/integrationcondition.go | 126 ----- .../camel/v1/integrationkitcondition.go | 99 ---- .../camel/v1/integrationkitstatus.go | 5 +- .../camel/v1/integrationplatformcondition.go | 99 ---- .../camel/v1/integrationplatformstatus.go | 5 +- .../camel/v1/integrationstatus.go | 26 +- .../camel/v1/kameletcondition.go | 99 ---- .../camel/v1/kameletstatus.go | 5 +- .../camel/v1/pipecondition.go | 116 ---- .../applyconfiguration/camel/v1/pipestatus.go | 17 +- pkg/client/camel/applyconfiguration/utils.go | 14 - pkg/controller/build/build_monitor.go | 15 +- pkg/controller/build/build_monitor_test.go | 18 +- pkg/controller/build/schedule.go | 4 +- pkg/controller/integration/build_test.go | 3 +- pkg/controller/integration/initialize.go | 38 +- pkg/controller/integration/initialize_test.go | 15 +- .../integration/integration_controller.go | 24 +- .../integration_controller_test.go | 25 +- pkg/controller/integration/monitor.go | 32 +- .../integration/monitor_synthetic_test.go | 50 +- pkg/controller/integration/monitor_test.go | 14 +- .../integrationplatform/create_test.go | 15 +- .../integrationplatform/monitor_test.go | 17 +- pkg/controller/pipe/initialize_test.go | 4 +- pkg/controller/pipe/monitor.go | 31 +- pkg/controller/pipe/monitor_test.go | 16 +- .../crd/bases/camel.apache.org_builds.yaml | 22 +- .../bases/camel.apache.org_camelcatalogs.yaml | 22 +- .../camel.apache.org_integrationkits.yaml | 23 +- ...camel.apache.org_integrationplatforms.yaml | 23 +- .../bases/camel.apache.org_integrations.yaml | 171 +++--- .../crd/bases/camel.apache.org_kamelets.yaml | 22 +- .../crd/bases/camel.apache.org_pipes.yaml | 162 +++--- pkg/trait/builder_test.go | 8 +- pkg/trait/deployment.go | 2 +- pkg/trait/deployment_test.go | 2 +- pkg/trait/gateway_test.go | 2 +- pkg/trait/kamelets_test.go | 10 +- pkg/trait/knative_service.go | 2 +- pkg/trait/prometheus.go | 6 +- pkg/trait/prometheus_test.go | 8 +- pkg/trait/security_context.go | 3 +- pkg/trait/trait_catalog_test.go | 7 +- pkg/trait/trait_test.go | 24 +- 71 files changed, 986 insertions(+), 2744 deletions(-) delete mode 100644 pkg/client/camel/applyconfiguration/camel/v1/buildcondition.go delete mode 100644 pkg/client/camel/applyconfiguration/camel/v1/camelcatalogcondition.go delete mode 100644 pkg/client/camel/applyconfiguration/camel/v1/integrationcondition.go delete mode 100644 pkg/client/camel/applyconfiguration/camel/v1/integrationkitcondition.go delete mode 100644 pkg/client/camel/applyconfiguration/camel/v1/integrationplatformcondition.go delete mode 100644 pkg/client/camel/applyconfiguration/camel/v1/kameletcondition.go delete mode 100644 pkg/client/camel/applyconfiguration/camel/v1/pipecondition.go diff --git a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc index dbaeea7b7d..99dbffe9fb 100644 --- a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc +++ b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc @@ -503,74 +503,11 @@ BeanProperties represent an unstructured object properties to be set on a bean. -|=== - -[#_camel_apache_org_v1_BuildCondition] -=== BuildCondition - -*Appears on:* - -* <<#_camel_apache_org_v1_BuildStatus, BuildStatus>> - -BuildCondition describes the state of a resource at a certain point. - -[cols="2,2a",options="header"] -|=== -|Field -|Description - -|`type` + -*xref:#_camel_apache_org_v1_BuildConditionType[BuildConditionType]* -| - - -Type of integration condition. - -|`status` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#conditionstatus-v1-core[Kubernetes core/v1.ConditionStatus]* -| - - -Status of the condition, one of True, False, Unknown. - -|`lastUpdateTime` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#time-v1-meta[Kubernetes meta/v1.Time]* -| - - -The last time this condition was updated. - -|`lastTransitionTime` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#time-v1-meta[Kubernetes meta/v1.Time]* -| - - -Last time the condition transitioned from one status to another. - -|`reason` + -string -| - - -The reason for the condition's last transition. - -|`message` + -string -| - - -A human-readable message indicating details about the transition. - - |=== [#_camel_apache_org_v1_BuildConditionType] === BuildConditionType(`string` alias) -*Appears on:* - -* <<#_camel_apache_org_v1_BuildCondition, BuildCondition>> - BuildConditionType -- . @@ -849,7 +786,7 @@ the reason of the failure (if any) the time when it started |`conditions` + -*xref:#_camel_apache_org_v1_BuildCondition[[\]BuildCondition]* +*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#condition-v1-meta[[\]Kubernetes meta/v1.Condition]* | @@ -1133,74 +1070,11 @@ string Maven Artifact -|=== - -[#_camel_apache_org_v1_CamelCatalogCondition] -=== CamelCatalogCondition - -*Appears on:* - -* <<#_camel_apache_org_v1_CamelCatalogStatus, CamelCatalogStatus>> - -CamelCatalogCondition describes the state of a resource at a certain point. - -[cols="2,2a",options="header"] -|=== -|Field -|Description - -|`type` + -*xref:#_camel_apache_org_v1_CamelCatalogConditionType[CamelCatalogConditionType]* -| - - -Type of CamelCatalog condition. - -|`status` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#conditionstatus-v1-core[Kubernetes core/v1.ConditionStatus]* -| - - -Status of the condition, one of True, False, Unknown. - -|`lastUpdateTime` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#time-v1-meta[Kubernetes meta/v1.Time]* -| - - -The last time this condition was updated. - -|`lastTransitionTime` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#time-v1-meta[Kubernetes meta/v1.Time]* -| - - -Last time the condition transitioned from one status to another. - -|`reason` + -string -| - - -The reason for the condition's last transition. - -|`message` + -string -| - - -A human-readable message indicating details about the transition. - - |=== [#_camel_apache_org_v1_CamelCatalogConditionType] === CamelCatalogConditionType(`string` alias) -*Appears on:* - -* <<#_camel_apache_org_v1_CamelCatalogCondition, CamelCatalogCondition>> - CamelCatalogConditionType --. @@ -1281,7 +1155,7 @@ ObservedGeneration is the most recent generation observed for this Catalog. the actual phase |`conditions` + -*xref:#_camel_apache_org_v1_CamelCatalogCondition[[\]CamelCatalogCondition]* +*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#condition-v1-meta[[\]Kubernetes meta/v1.Condition]* | @@ -2541,157 +2415,15 @@ string -[#_camel_apache_org_v1_IntegrationCondition] -=== IntegrationCondition - -*Appears on:* - -* <<#_camel_apache_org_v1_IntegrationStatus, IntegrationStatus>> - -IntegrationCondition describes the state of a resource at a certain point. - -[cols="2,2a",options="header"] -|=== -|Field -|Description - -|`type` + -*xref:#_camel_apache_org_v1_IntegrationConditionType[IntegrationConditionType]* -| - - -Type of integration condition. - -|`status` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#conditionstatus-v1-core[Kubernetes core/v1.ConditionStatus]* -| - - -Status of the condition, one of True, False, Unknown. - -|`lastUpdateTime` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#time-v1-meta[Kubernetes meta/v1.Time]* -| - - -The last time this condition was updated. - -|`lastTransitionTime` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#time-v1-meta[Kubernetes meta/v1.Time]* -| - - -Last time the condition transitioned from one status to another. - -|`firstTruthyTime` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#time-v1-meta[Kubernetes meta/v1.Time]* -| - - -First time the condition status transitioned to True. - -|`reason` + -string -| - - -The reason for the condition's last transition. - -|`message` + -string -| - - -A human-readable message indicating details about the transition. - -|`pods` + -*xref:#_camel_apache_org_v1_PodCondition[[\]PodCondition]* -| - - -DeprecatedPods collect health and conditions information from the owned PODs - -Deprecated: may be removed in future releases. - - -|=== - [#_camel_apache_org_v1_IntegrationConditionType] === IntegrationConditionType(`string` alias) -*Appears on:* - -* <<#_camel_apache_org_v1_IntegrationCondition, IntegrationCondition>> - IntegrationConditionType --. -[#_camel_apache_org_v1_IntegrationKitCondition] -=== IntegrationKitCondition - -*Appears on:* - -* <<#_camel_apache_org_v1_IntegrationKitStatus, IntegrationKitStatus>> - -IntegrationKitCondition describes the state of a resource at a certain point. - -[cols="2,2a",options="header"] -|=== -|Field -|Description - -|`type` + -*xref:#_camel_apache_org_v1_IntegrationKitConditionType[IntegrationKitConditionType]* -| - - -Type of integration condition. - -|`status` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#conditionstatus-v1-core[Kubernetes core/v1.ConditionStatus]* -| - - -Status of the condition, one of True, False, Unknown. - -|`lastUpdateTime` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#time-v1-meta[Kubernetes meta/v1.Time]* -| - - -The last time this condition was updated. - -|`lastTransitionTime` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#time-v1-meta[Kubernetes meta/v1.Time]* -| - - -Last time the condition transitioned from one status to another. - -|`reason` + -string -| - - -The reason for the condition's last transition. - -|`message` + -string -| - - -A human-readable message indicating details about the transition. - - -|=== - [#_camel_apache_org_v1_IntegrationKitConditionType] === IntegrationKitConditionType(`string` alias) -*Appears on:* - -* <<#_camel_apache_org_v1_IntegrationKitCondition, IntegrationKitCondition>> - IntegrationKitConditionType --. @@ -2892,7 +2624,7 @@ string the Camel K operator version for which this kit was configured |`conditions` + -*xref:#_camel_apache_org_v1_IntegrationKitCondition[[\]IntegrationKitCondition]* +*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#condition-v1-meta[[\]Kubernetes meta/v1.Condition]* | @@ -3096,72 +2828,9 @@ IntegrationPlatformCluster is the kind of orchestration cluster the platform is Deprecated: no longer in use. -[#_camel_apache_org_v1_IntegrationPlatformCondition] -=== IntegrationPlatformCondition - -*Appears on:* - -* <<#_camel_apache_org_v1_IntegrationPlatformStatus, IntegrationPlatformStatus>> - -IntegrationPlatformCondition describes the state of a resource at a certain point. - -[cols="2,2a",options="header"] -|=== -|Field -|Description - -|`type` + -*xref:#_camel_apache_org_v1_IntegrationPlatformConditionType[IntegrationPlatformConditionType]* -| - - -Type of integration condition. - -|`status` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#conditionstatus-v1-core[Kubernetes core/v1.ConditionStatus]* -| - - -Status of the condition, one of True, False, Unknown. - -|`lastUpdateTime` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#time-v1-meta[Kubernetes meta/v1.Time]* -| - - -The last time this condition was updated. - -|`lastTransitionTime` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#time-v1-meta[Kubernetes meta/v1.Time]* -| - - -Last time the condition transitioned from one status to another. - -|`reason` + -string -| - - -The reason for the condition's last transition. - -|`message` + -string -| - - -A human-readable message indicating details about the transition. - - -|=== - [#_camel_apache_org_v1_IntegrationPlatformConditionType] === IntegrationPlatformConditionType(`string` alias) -*Appears on:* - -* <<#_camel_apache_org_v1_IntegrationPlatformCondition, IntegrationPlatformCondition>> - IntegrationPlatformConditionType defines the type of condition. @@ -3306,7 +2975,7 @@ ObservedGeneration is the most recent generation observed for this IntegrationPl defines in what phase the IntegrationPlatform is found |`conditions` + -*xref:#_camel_apache_org_v1_IntegrationPlatformCondition[[\]IntegrationPlatformCondition]* +*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#condition-v1-meta[[\]Kubernetes meta/v1.Condition]* | @@ -3750,7 +3419,7 @@ a list of configuration specification. Deprecated: use properties instead. |`conditions` + -*xref:#_camel_apache_org_v1_IntegrationCondition[[\]IntegrationCondition]* +*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#condition-v1-meta[[\]Kubernetes meta/v1.Condition]* | @@ -3805,6 +3474,28 @@ the timestamp representing the last time when this integration was deployed. the timestamp representing the last time when this integration was built. +|`firstReadyTimestamp` + +*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#time-v1-meta[Kubernetes meta/v1.Time]* +| + + +the timestamp representing the first time the Ready condition became true. + +This used to be tracked per-condition (FirstTruthyTime on the Ready condition); +it now lives on the status directly since Conditions was migrated to the +standard metav1.Condition type, which has no room for extra fields. + +|`pods` + +*xref:#_camel_apache_org_v1_PodCondition[[\]PodCondition]* +| + + +DeprecatedPods collect health and conditions information from the owned PODs + +Deprecated: may be removed in future releases. This used to live on the Ready +IntegrationCondition; it moved to the status directly when Conditions was +migrated to the standard metav1.Condition type. + |=== @@ -4165,74 +3856,11 @@ JibTask is used to configure Jib. -|=== - -[#_camel_apache_org_v1_KameletCondition] -=== KameletCondition - -*Appears on:* - -* <<#_camel_apache_org_v1_KameletStatus, KameletStatus>> - -KameletCondition describes the state of a resource at a certain point. - -[cols="2,2a",options="header"] -|=== -|Field -|Description - -|`type` + -*xref:#_camel_apache_org_v1_KameletConditionType[KameletConditionType]* -| - - -Type of kamelet condition. - -|`status` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#conditionstatus-v1-core[Kubernetes core/v1.ConditionStatus]* -| - - -Status of the condition, one of True, False, Unknown. - -|`lastUpdateTime` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#time-v1-meta[Kubernetes meta/v1.Time]* -| - - -The last time this condition was updated. - -|`lastTransitionTime` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#time-v1-meta[Kubernetes meta/v1.Time]* -| - - -Last time the condition transitioned from one status to another. - -|`reason` + -string -| - - -The reason for the condition's last transition. - -|`message` + -string -| - - -A human-readable message indicating details about the transition. - - |=== [#_camel_apache_org_v1_KameletConditionType] === KameletConditionType(`string` alias) -*Appears on:* - -* <<#_camel_apache_org_v1_KameletCondition, KameletCondition>> - KameletConditionType --. @@ -4424,7 +4052,7 @@ ObservedGeneration is the most recent generation observed for this Kamelet. Phase -- |`conditions` + -*xref:#_camel_apache_org_v1_KameletCondition[[\]KameletCondition]* +*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#condition-v1-meta[[\]Kubernetes meta/v1.Condition]* | @@ -4784,83 +4412,11 @@ string -|=== - -[#_camel_apache_org_v1_PipeCondition] -=== PipeCondition - -*Appears on:* - -* <<#_camel_apache_org_v1_PipeStatus, PipeStatus>> - -PipeCondition describes the state of a resource at a certain point. - -[cols="2,2a",options="header"] -|=== -|Field -|Description - -|`type` + -*xref:#_camel_apache_org_v1_PipeConditionType[PipeConditionType]* -| - - -Type of pipe condition. - -|`status` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#conditionstatus-v1-core[Kubernetes core/v1.ConditionStatus]* -| - - -Status of the condition, one of True, False, Unknown. - -|`lastUpdateTime` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#time-v1-meta[Kubernetes meta/v1.Time]* -| - - -The last time this condition was updated. - -|`lastTransitionTime` + -*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#time-v1-meta[Kubernetes meta/v1.Time]* -| - - -Last time the condition transitioned from one status to another. - -|`reason` + -string -| - - -The reason for the condition's last transition. - -|`message` + -string -| - - -A human readable message indicating details about the transition. - -|`pods` + -*xref:#_camel_apache_org_v1_PodCondition[[\]PodCondition]* -| - - -DeprecatedPods collect health and conditions information from the owned PODs - -Deprecated: may be removed in future releases. - - |=== [#_camel_apache_org_v1_PipeConditionType] === PipeConditionType(`string` alias) -*Appears on:* - -* <<#_camel_apache_org_v1_PipeCondition, PipeCondition>> - PipeConditionType --. @@ -4984,12 +4540,21 @@ ObservedGeneration is the most recent generation observed for this Pipe. Phase -- |`conditions` + -*xref:#_camel_apache_org_v1_PipeCondition[[\]PipeCondition]* +*https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.36/#condition-v1-meta[[\]Kubernetes meta/v1.Condition]* | Conditions -- +|`pods` + +*xref:#_camel_apache_org_v1_PodCondition[[\]PodCondition]* +| + + +DeprecatedPods collect health and conditions information from the owned PODs + +Deprecated: may be removed in future releases. + |`replicas` + int32 | @@ -5145,8 +4710,8 @@ PluginProperties -- . *Appears on:* -* <<#_camel_apache_org_v1_IntegrationCondition, IntegrationCondition>> -* <<#_camel_apache_org_v1_PipeCondition, PipeCondition>> +* <<#_camel_apache_org_v1_IntegrationStatus, IntegrationStatus>> +* <<#_camel_apache_org_v1_PipeStatus, PipeStatus>> Deprecated: may be removed in future releases. diff --git a/e2e/advanced/operator_metrics_test.go b/e2e/advanced/operator_metrics_test.go index ab49843ffb..81ce63a833 100644 --- a/e2e/advanced/operator_metrics_test.go +++ b/e2e/advanced/operator_metrics_test.go @@ -422,7 +422,7 @@ func TestMetrics(t *testing.T) { } g.Expect(ts1).NotTo(BeZero()) // The end time is reported into the ready condition first truthy time - ts2 = it.Status.GetCondition(v1.IntegrationConditionReady).FirstTruthyTime.Time + ts2 = it.Status.FirstReadyTimestamp.Time g.Expect(ts2).NotTo(BeZero()) duration := ts2.Sub(ts1) diff --git a/e2e/common/traits/health_test.go b/e2e/common/traits/health_test.go index 784352b330..9e67de2a59 100644 --- a/e2e/common/traits/health_test.go +++ b/e2e/common/traits/health_test.go @@ -30,6 +30,7 @@ import ( "time" camelv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" . "github.com/onsi/gomega" "github.com/onsi/gomega/gstruct" @@ -101,17 +102,17 @@ func TestHealthTrait(t *testing.T) { } g.Eventually(IntegrationCondition(t, ctx, ns, name, v1.IntegrationConditionReady), TestTimeoutLong).Should( - Satisfy(func(c *v1.IntegrationCondition) bool { - if c.Status != corev1.ConditionFalse { + Satisfy(func(c *metav1.Condition) bool { + if c.Status != metav1.ConditionFalse { return false } - if len(c.DeprecatedPods) != 3 { + if len(Integration(t, ctx, ns, name)().Status.DeprecatedPods) != 3 { return false } var r *v1.HealthCheckResponse - for _, pod := range c.DeprecatedPods { + for _, pod := range Integration(t, ctx, ns, name)().Status.DeprecatedPods { for h := range pod.Health { if pod.Health[h].Name == "camel-routes" { r = &pod.Health[h] @@ -193,19 +194,19 @@ func TestHealthTrait(t *testing.T) { WithTransform(IntegrationConditionMessage, Equal("1/1 pods are not ready")))) g.Eventually(IntegrationCondition(t, ctx, ns, name, v1.IntegrationConditionReady), TestTimeoutLong).Should( - Satisfy(func(c *v1.IntegrationCondition) bool { - if c.Status != corev1.ConditionFalse { + Satisfy(func(c *metav1.Condition) bool { + if c.Status != metav1.ConditionFalse { return false } - if len(c.DeprecatedPods) != 1 { + if len(Integration(t, ctx, ns, name)().Status.DeprecatedPods) != 1 { return false } var r *v1.HealthCheckResponse - for h := range c.DeprecatedPods[0].Health { - if c.DeprecatedPods[0].Health[h].Name == "camel-routes" { - r = &c.DeprecatedPods[0].Health[h] + for h := range Integration(t, ctx, ns, name)().Status.DeprecatedPods[0].Health { + if Integration(t, ctx, ns, name)().Status.DeprecatedPods[0].Health[h].Name == "camel-routes" { + r = &Integration(t, ctx, ns, name)().Status.DeprecatedPods[0].Health[h] } } @@ -278,19 +279,19 @@ func TestHealthTrait(t *testing.T) { WithTransform(IntegrationConditionMessage, Equal("1/1 pods are not ready")))) g.Eventually(IntegrationCondition(t, ctx, ns, name, v1.IntegrationConditionReady), TestTimeoutLong).Should( - Satisfy(func(c *v1.IntegrationCondition) bool { - if c.Status != corev1.ConditionFalse { + Satisfy(func(c *metav1.Condition) bool { + if c.Status != metav1.ConditionFalse { return false } - if len(c.DeprecatedPods) != 1 { + if len(Integration(t, ctx, ns, name)().Status.DeprecatedPods) != 1 { return false } var r *v1.HealthCheckResponse - for h := range c.DeprecatedPods[0].Health { - if c.DeprecatedPods[0].Health[h].Name == "camel-routes" { - r = &c.DeprecatedPods[0].Health[h] + for h := range Integration(t, ctx, ns, name)().Status.DeprecatedPods[0].Health { + if Integration(t, ctx, ns, name)().Status.DeprecatedPods[0].Health[h].Name == "camel-routes" { + r = &Integration(t, ctx, ns, name)().Status.DeprecatedPods[0].Health[h] } } @@ -311,19 +312,19 @@ func TestHealthTrait(t *testing.T) { })) g.Eventually(PipeCondition(t, ctx, ns, name, camelv1.PipeConditionReady), TestTimeoutLong).Should( - Satisfy(func(c *camelv1.PipeCondition) bool { - if c.Status != corev1.ConditionFalse { + Satisfy(func(c *metav1.Condition) bool { + if c.Status != metav1.ConditionFalse { return false } - if len(c.DeprecatedPods) != 1 { + if len(Integration(t, ctx, ns, name)().Status.DeprecatedPods) != 1 { return false } var r *v1.HealthCheckResponse - for h := range c.DeprecatedPods[0].Health { - if c.DeprecatedPods[0].Health[h].Name == "camel-routes" { - r = &c.DeprecatedPods[0].Health[h] + for h := range Integration(t, ctx, ns, name)().Status.DeprecatedPods[0].Health { + if Integration(t, ctx, ns, name)().Status.DeprecatedPods[0].Health[h].Name == "camel-routes" { + r = &Integration(t, ctx, ns, name)().Status.DeprecatedPods[0].Health[h] } } @@ -363,19 +364,19 @@ func TestHealthTrait(t *testing.T) { WithTransform(IntegrationConditionMessage, Equal("1/1 pods are not ready")))) g.Eventually(IntegrationCondition(t, ctx, ns, name, v1.IntegrationConditionReady), TestTimeoutLong).Should( - Satisfy(func(c *v1.IntegrationCondition) bool { - if c.Status != corev1.ConditionFalse { + Satisfy(func(c *metav1.Condition) bool { + if c.Status != metav1.ConditionFalse { return false } - if len(c.DeprecatedPods) != 1 { + if len(Integration(t, ctx, ns, name)().Status.DeprecatedPods) != 1 { return false } var r *v1.HealthCheckResponse - for h := range c.DeprecatedPods[0].Health { - if c.DeprecatedPods[0].Health[h].Name == "never-ready" { - r = &c.DeprecatedPods[0].Health[h] + for h := range Integration(t, ctx, ns, name)().Status.DeprecatedPods[0].Health { + if Integration(t, ctx, ns, name)().Status.DeprecatedPods[0].Health[h].Name == "never-ready" { + r = &Integration(t, ctx, ns, name)().Status.DeprecatedPods[0].Health[h] } } @@ -413,19 +414,19 @@ func TestHealthTrait(t *testing.T) { WithTransform(IntegrationConditionMessage, Equal("1/1 pods are not ready")))) g.Eventually(IntegrationCondition(t, ctx, ns, name, v1.IntegrationConditionReady), TestTimeoutLong).Should( - Satisfy(func(c *v1.IntegrationCondition) bool { - if c.Status != corev1.ConditionFalse { + Satisfy(func(c *metav1.Condition) bool { + if c.Status != metav1.ConditionFalse { return false } - if len(c.DeprecatedPods) != 1 { + if len(Integration(t, ctx, ns, name)().Status.DeprecatedPods) != 1 { return false } var r *v1.HealthCheckResponse - for h := range c.DeprecatedPods[0].Health { - if c.DeprecatedPods[0].Health[h].Name == "never-ready" && c.DeprecatedPods[0].Health[h].Status == "DOWN" { - r = &c.DeprecatedPods[0].Health[h] + for h := range Integration(t, ctx, ns, name)().Status.DeprecatedPods[0].Health { + if Integration(t, ctx, ns, name)().Status.DeprecatedPods[0].Health[h].Name == "never-ready" && Integration(t, ctx, ns, name)().Status.DeprecatedPods[0].Health[h].Status == "DOWN" { + r = &Integration(t, ctx, ns, name)().Status.DeprecatedPods[0].Health[h] } } diff --git a/e2e/support/test_support.go b/e2e/support/test_support.go index dab27c0502..bb99acf4ac 100644 --- a/e2e/support/test_support.go +++ b/e2e/support/test_support.go @@ -592,8 +592,8 @@ func IntegrationStatusImage(t *testing.T, ctx context.Context, ns string, name s } } -func IntegrationCondition(t *testing.T, ctx context.Context, ns string, name string, conditionType v1.IntegrationConditionType) func() *v1.IntegrationCondition { - return func() *v1.IntegrationCondition { +func IntegrationCondition(t *testing.T, ctx context.Context, ns string, name string, conditionType v1.IntegrationConditionType) func() *metav1.Condition { + return func() *metav1.Condition { it := Integration(t, ctx, ns, name)() if it == nil { return nil @@ -602,14 +602,14 @@ func IntegrationCondition(t *testing.T, ctx context.Context, ns string, name str } } -func IntegrationConditionReason(c *v1.IntegrationCondition) string { +func IntegrationConditionReason(c *metav1.Condition) string { if c == nil { return "" } return c.Reason } -func IntegrationConditionMessage(c *v1.IntegrationCondition) string { +func IntegrationConditionMessage(c *metav1.Condition) string { if c == nil { return "" } @@ -622,7 +622,7 @@ func IntegrationConditionStatus(t *testing.T, ctx context.Context, ns string, na if c == nil { return "Unknown" } - return c.Status + return corev1.ConditionStatus(c.Status) } } @@ -1034,8 +1034,8 @@ func PipeStatusReplicas(t *testing.T, ctx context.Context, ns string, name strin } } -func PipeCondition(t *testing.T, ctx context.Context, ns string, name string, conditionType v1.PipeConditionType) func() *v1.PipeCondition { - return func() *v1.PipeCondition { +func PipeCondition(t *testing.T, ctx context.Context, ns string, name string, conditionType v1.PipeConditionType) func() *metav1.Condition { + return func() *metav1.Condition { kb := Pipe(t, ctx, ns, name)() if kb == nil { return nil @@ -1048,21 +1048,21 @@ func PipeCondition(t *testing.T, ctx context.Context, ns string, name string, co } } -func PipeConditionStatusExtract(c *v1.PipeCondition) corev1.ConditionStatus { +func PipeConditionStatusExtract(c *metav1.Condition) corev1.ConditionStatus { if c == nil { return "" } - return c.Status + return corev1.ConditionStatus(c.Status) } -func PipeConditionReason(c *v1.PipeCondition) string { +func PipeConditionReason(c *metav1.Condition) string { if c == nil { return "" } return c.Reason } -func PipeConditionMessage(c *v1.PipeCondition) string { +func PipeConditionMessage(c *metav1.Condition) string { if c == nil { return "" } @@ -1079,7 +1079,7 @@ func PipeConditionStatus(t *testing.T, ctx context.Context, ns string, name stri if c == nil { return "ConditionMissing" } - return c.Status + return corev1.ConditionStatus(c.Status) } } @@ -1569,8 +1569,8 @@ func BuildPhase(t *testing.T, ctx context.Context, ns, name string) func() v1.Bu } } -func BuildConditions(t *testing.T, ctx context.Context, ns, name string) func() []v1.BuildCondition { - return func() []v1.BuildCondition { +func BuildConditions(t *testing.T, ctx context.Context, ns, name string) func() []metav1.Condition { + return func() []metav1.Condition { build := Build(t, ctx, ns, name)() if build != nil && build.Status.Conditions != nil { return build.Status.Conditions @@ -1579,13 +1579,13 @@ func BuildConditions(t *testing.T, ctx context.Context, ns, name string) func() } } -func BuildCondition(t *testing.T, ctx context.Context, ns string, name string, conditionType v1.BuildConditionType) func() *v1.BuildCondition { - return func() *v1.BuildCondition { +func BuildCondition(t *testing.T, ctx context.Context, ns string, name string, conditionType v1.BuildConditionType) func() *metav1.Condition { + return func() *metav1.Condition { build := Build(t, ctx, ns, name)() if build != nil && build.Status.Conditions != nil { return build.Status.GetCondition(conditionType) } - return &v1.BuildCondition{} + return &metav1.Condition{} } } diff --git a/helm/camel-k/crds/camel-k-crds.yaml b/helm/camel-k/crds/camel-k-crds.yaml index 2675f27d31..726f7dfd96 100644 --- a/helm/camel-k/crds/camel-k-crds.yaml +++ b/helm/camel-k/crds/camel-k-crds.yaml @@ -2089,21 +2089,14 @@ spec: conditions: description: a list of conditions occurred during the build items: - description: BuildCondition describes the state of a resource at - a certain point. + description: Condition contains details for one aspect of the current state of a resource. properties: lastTransitionTime: - description: Last time the condition transitioned from one status - to another. - format: date-time - type: string - lastUpdateTime: - description: The last time this condition was updated. + description: Last time the condition transitioned from one status to another. format: date-time type: string message: - description: A human-readable message indicating details about - the transition. + description: A human-readable message indicating details about the transition. type: string reason: description: The reason for the condition's last transition. @@ -2112,13 +2105,18 @@ spec: description: Status of the condition, one of True, False, Unknown. type: string type: - description: Type of integration condition. + description: Type of condition. type: string required: + - lastTransitionTime + - message + - reason - status - type - type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map digest: description: the digest from image type: string @@ -2669,21 +2667,14 @@ spec: conditions: description: a list of events happened for the CamelCatalog items: - description: CamelCatalogCondition describes the state of a resource - at a certain point. + description: Condition contains details for one aspect of the current state of a resource. properties: lastTransitionTime: - description: Last time the condition transitioned from one status - to another. - format: date-time - type: string - lastUpdateTime: - description: The last time this condition was updated. + description: Last time the condition transitioned from one status to another. format: date-time type: string message: - description: A human-readable message indicating details about - the transition. + description: A human-readable message indicating details about the transition. type: string reason: description: The reason for the condition's last transition. @@ -2692,13 +2683,18 @@ spec: description: Status of the condition, one of True, False, Unknown. type: string type: - description: Type of CamelCatalog condition. + description: Type of condition. type: string required: + - lastTransitionTime + - message + - reason - status - type - type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map image: description: the container image available for building an application with this catalog @@ -3209,23 +3205,15 @@ spec: type: object conditions: description: a list of conditions which happened for the events related - the kit items: - description: IntegrationKitCondition describes the state of a resource - at a certain point. + description: Condition contains details for one aspect of the current state of a resource. properties: lastTransitionTime: - description: Last time the condition transitioned from one status - to another. - format: date-time - type: string - lastUpdateTime: - description: The last time this condition was updated. + description: Last time the condition transitioned from one status to another. format: date-time type: string message: - description: A human-readable message indicating details about - the transition. + description: A human-readable message indicating details about the transition. type: string reason: description: The reason for the condition's last transition. @@ -3234,13 +3222,18 @@ spec: description: Status of the condition, one of True, False, Unknown. type: string type: - description: Type of integration condition. + description: Type of condition. type: string required: + - lastTransitionTime + - message + - reason - status - type - type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map digest: description: actual image digest of the kit type: string @@ -6251,23 +6244,15 @@ spec: type: string conditions: description: which are the conditions met (particularly useful when - in ERROR phase) items: - description: IntegrationPlatformCondition describes the state of - a resource at a certain point. + description: Condition contains details for one aspect of the current state of a resource. properties: lastTransitionTime: - description: Last time the condition transitioned from one status - to another. - format: date-time - type: string - lastUpdateTime: - description: The last time this condition was updated. + description: Last time the condition transitioned from one status to another. format: date-time type: string message: - description: A human-readable message indicating details about - the transition. + description: A human-readable message indicating details about the transition. type: string reason: description: The reason for the condition's last transition. @@ -6276,13 +6261,18 @@ spec: description: Status of the condition, one of True, False, Unknown. type: string type: - description: Type of integration condition. + description: Type of condition. type: string required: + - lastTransitionTime + - message + - reason - status - type - type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map configuration: description: |- Deprecated: @@ -11269,25 +11259,15 @@ spec: type: object conditions: description: which are the conditions met (particularly useful when - in ERROR phase) items: - description: |- - DeprecatedIntegrationProfileCondition describes the state of a resource at a certain point. - - Deprecated: no longer in use. + description: Condition contains details for one aspect of the current state of a resource. properties: lastTransitionTime: - description: Last time the condition transitioned from one status - to another. - format: date-time - type: string - lastUpdateTime: - description: The last time this condition was updated. + description: Last time the condition transitioned from one status to another. format: date-time type: string message: - description: A human-readable message indicating details about - the transition. + description: A human-readable message indicating details about the transition. type: string reason: description: The reason for the condition's last transition. @@ -11296,13 +11276,18 @@ spec: description: Status of the condition, one of True, False, Unknown. type: string type: - description: Type of integration condition. + description: Type of condition. type: string required: + - lastTransitionTime + - message + - reason - status - type - type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map dependencies: description: a list of dependencies needed by the application items: @@ -22703,97 +22688,15 @@ spec: conditions: description: a list of events happened for the Integration items: - description: IntegrationCondition describes the state of a resource - at a certain point. + description: Condition contains details for one aspect of the current state of a resource. properties: - firstTruthyTime: - description: First time the condition status transitioned to - True. - format: date-time - type: string lastTransitionTime: - description: Last time the condition transitioned from one status - to another. - format: date-time - type: string - lastUpdateTime: - description: The last time this condition was updated. + description: Last time the condition transitioned from one status to another. format: date-time type: string message: - description: A human-readable message indicating details about - the transition. + description: A human-readable message indicating details about the transition. type: string - pods: - description: |- - DeprecatedPods collect health and conditions information from the owned PODs - - Deprecated: may be removed in future releases. - items: - description: 'Deprecated: may be removed in future releases.' - properties: - condition: - description: PodCondition contains details for the current - condition of this pod. - properties: - lastProbeTime: - description: Last time we probed the condition. - format: date-time - type: string - lastTransitionTime: - description: Last time the condition transitioned - from one status to another. - format: date-time - type: string - message: - description: Human-readable message indicating details - about last transition. - type: string - observedGeneration: - description: If set, this represents the .metadata.generation - that the pod condition was set based upon. - format: int64 - type: integer - reason: - description: Unique, one-word, CamelCase reason for - the condition's last transition. - type: string - status: - description: |- - Status is the status of the condition. - Can be True, False, Unknown. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions - type: string - type: - description: |- - Type is the type of the condition. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions - type: string - required: - - status - - type - type: object - health: - items: - properties: - data: - description: |- - RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can - be used to delay JSON decoding or precompute a JSON encoding. - x-kubernetes-preserve-unknown-fields: true - name: - type: string - status: - type: string - type: object - type: array - name: - type: string - required: - - condition - type: object - type: array reason: description: The reason for the condition's last transition. type: string @@ -22801,13 +22704,18 @@ spec: description: Status of the condition, one of True, False, Unknown. type: string type: - description: Type of integration condition. + description: Type of condition. type: string required: + - lastTransitionTime + - message + - reason - status - type - type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map configuration: description: |- a list of configuration specification. @@ -22838,6 +22746,10 @@ spec: digest: description: the digest calculated for this Integration type: string + firstReadyTimestamp: + description: the timestamp representing the first time the Ready condition became true. + format: date-time + type: string generatedSources: description: a list of sources generated for this Integration items: @@ -26320,21 +26232,14 @@ spec: conditions: description: Conditions -- items: - description: KameletCondition describes the state of a resource - at a certain point. + description: Condition contains details for one aspect of the current state of a resource. properties: lastTransitionTime: - description: Last time the condition transitioned from one status - to another. - format: date-time - type: string - lastUpdateTime: - description: The last time this condition was updated. + description: Last time the condition transitioned from one status to another. format: date-time type: string message: - description: A human-readable message indicating details about - the transition. + description: A human-readable message indicating details about the transition. type: string reason: description: The reason for the condition's last transition. @@ -26343,13 +26248,18 @@ spec: description: Status of the condition, one of True, False, Unknown. type: string type: - description: Type of kamelet condition. + description: Type of condition. type: string required: + - lastTransitionTime + - message + - reason - status - type - type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map observedGeneration: description: ObservedGeneration is the most recent generation observed for this Kamelet. @@ -38018,92 +37928,15 @@ spec: conditions: description: Conditions -- items: - description: PipeCondition describes the state of a resource at - a certain point. + description: Condition contains details for one aspect of the current state of a resource. properties: lastTransitionTime: - description: Last time the condition transitioned from one status - to another. - format: date-time - type: string - lastUpdateTime: - description: The last time this condition was updated. + description: Last time the condition transitioned from one status to another. format: date-time type: string message: - description: A human readable message indicating details about - the transition. + description: A human-readable message indicating details about the transition. type: string - pods: - description: |- - DeprecatedPods collect health and conditions information from the owned PODs - - Deprecated: may be removed in future releases. - items: - description: 'Deprecated: may be removed in future releases.' - properties: - condition: - description: PodCondition contains details for the current - condition of this pod. - properties: - lastProbeTime: - description: Last time we probed the condition. - format: date-time - type: string - lastTransitionTime: - description: Last time the condition transitioned - from one status to another. - format: date-time - type: string - message: - description: Human-readable message indicating details - about last transition. - type: string - observedGeneration: - description: If set, this represents the .metadata.generation - that the pod condition was set based upon. - format: int64 - type: integer - reason: - description: Unique, one-word, CamelCase reason for - the condition's last transition. - type: string - status: - description: |- - Status is the status of the condition. - Can be True, False, Unknown. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions - type: string - type: - description: |- - Type is the type of the condition. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions - type: string - required: - - status - - type - type: object - health: - items: - properties: - data: - description: |- - RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can - be used to delay JSON decoding or precompute a JSON encoding. - x-kubernetes-preserve-unknown-fields: true - name: - type: string - status: - type: string - type: object - type: array - name: - type: string - required: - - condition - type: object - type: array reason: description: The reason for the condition's last transition. type: string @@ -38111,13 +37944,18 @@ spec: description: Status of the condition, one of True, False, Unknown. type: string type: - description: Type of pipe condition. + description: Type of condition. type: string required: + - lastTransitionTime + - message + - reason - status - type - type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map observedGeneration: description: ObservedGeneration is the most recent generation observed for this Pipe. @@ -38126,6 +37964,76 @@ spec: phase: description: Phase -- type: string + pods: + description: |- + DeprecatedPods collect health and conditions information from the owned PODs + + Deprecated: may be removed in future releases. + items: + description: 'Deprecated: may be removed in future releases.' + properties: + condition: + description: PodCondition contains details for the current + condition of this pod. + properties: + lastProbeTime: + description: Last time we probed the condition. + format: date-time + type: string + lastTransitionTime: + description: Last time the condition transitioned + from one status to another. + format: date-time + type: string + message: + description: Human-readable message indicating details + about last transition. + type: string + observedGeneration: + description: If set, this represents the .metadata.generation + that the pod condition was set based upon. + format: int64 + type: integer + reason: + description: Unique, one-word, CamelCase reason for + the condition's last transition. + type: string + status: + description: |- + Status is the status of the condition. + Can be True, False, Unknown. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions + type: string + type: + description: |- + Type is the type of the condition. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions + type: string + required: + - status + - type + type: object + health: + items: + properties: + data: + description: |- + RawMessage is a raw encoded JSON value. + It implements Marshaler and Unmarshaler and can + be used to delay JSON decoding or precompute a JSON encoding. + x-kubernetes-preserve-unknown-fields: true + name: + type: string + status: + type: string + type: object + type: array + name: + type: string + required: + - condition + type: object + type: array replicas: description: Replicas is the number of actual replicas of the pipe format: int32 diff --git a/pkg/apis/camel/v1/build_types.go b/pkg/apis/camel/v1/build_types.go index e3add9950a..7837dc43c6 100644 --- a/pkg/apis/camel/v1/build_types.go +++ b/pkg/apis/camel/v1/build_types.go @@ -18,7 +18,6 @@ limitations under the License. package v1 import ( - corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -265,7 +264,7 @@ type BuildStatus struct { // the time when it started StartedAt *metav1.Time `json:"startedAt,omitempty"` // a list of conditions occurred during the build - Conditions []BuildCondition `json:"conditions,omitempty"` + Conditions []metav1.Condition `json:"conditions,omitempty"` // how long it took for the build // Change to Duration / ISO 8601 when CRD uses OpenAPI spec v3 // https://github.com/OAI/OpenAPI-Specification/issues/845 @@ -340,19 +339,3 @@ type BuildList struct { Items []Build `json:"items"` } - -// BuildCondition describes the state of a resource at a certain point. -type BuildCondition struct { - // Type of integration condition. - Type BuildConditionType `json:"type"` - // Status of the condition, one of True, False, Unknown. - Status corev1.ConditionStatus `json:"status"` - // The last time this condition was updated. - LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty"` - // Last time the condition transitioned from one status to another. - LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"` - // The reason for the condition's last transition. - Reason string `json:"reason,omitempty"` - // A human-readable message indicating details about the transition. - Message string `json:"message,omitempty"` -} diff --git a/pkg/apis/camel/v1/build_types_support.go b/pkg/apis/camel/v1/build_types_support.go index 6128b96b10..9cb0f19987 100644 --- a/pkg/apis/camel/v1/build_types_support.go +++ b/pkg/apis/camel/v1/build_types_support.go @@ -22,6 +22,7 @@ import ( "strings" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -127,15 +128,8 @@ func (in *BuildStatus) GetRunnable() (*Artifact, error) { } // GetCondition returns the condition with the provided type. -func (in *BuildStatus) GetCondition(condType BuildConditionType) *BuildCondition { - for i := range in.Conditions { - c := in.Conditions[i] - if c.Type == condType { - return &c - } - } - - return nil +func (in *BuildStatus) GetCondition(condType BuildConditionType) *metav1.Condition { + return meta.FindStatusCondition(in.Conditions, string(condType)) } func (in *BuildStatus) Failed(err error) BuildStatus { @@ -150,100 +144,87 @@ func (in *BuildStatus) IsFinished() bool { in.Phase == BuildPhaseInterrupted || in.Phase == BuildPhaseError } +// SetCondition sets a condition on the build status, using metav1.Condition semantics +// (i.e. relying on Status/Reason to decide whether LastTransitionTime should be bumped). func (in *BuildStatus) SetCondition(condType BuildConditionType, status corev1.ConditionStatus, reason string, message string) { - in.SetConditions(BuildCondition{ - Type: condType, - Status: status, - LastUpdateTime: metav1.Now(), - LastTransitionTime: metav1.Now(), - Reason: reason, - Message: message, + in.SetConditions(metav1.Condition{ + Type: string(condType), + Status: metav1.ConditionStatus(status), + Reason: reason, + Message: message, }) } func (in *BuildStatus) SetErrorCondition(condType BuildConditionType, reason string, err error) { - in.SetConditions(BuildCondition{ - Type: condType, - Status: corev1.ConditionFalse, - LastUpdateTime: metav1.Now(), - LastTransitionTime: metav1.Now(), - Reason: reason, - Message: err.Error(), + in.SetConditions(metav1.Condition{ + Type: string(condType), + Status: metav1.ConditionFalse, + Reason: reason, + Message: err.Error(), }) } // SetConditions updates the resource to include the provided conditions. // -// If a condition that we are about to add already exists and has the same status and -// reason then we are not going to update. -func (in *BuildStatus) SetConditions(conditions ...BuildCondition) { +// It delegates to k8s.io/apimachinery's meta.SetStatusCondition, which already +// implements the "only bump LastTransitionTime when Status changes" semantics, +// and fills in a sane default Reason/LastTransitionTime when they are missing. +func (in *BuildStatus) SetConditions(conditions ...metav1.Condition) { for _, condition := range conditions { - if condition.LastUpdateTime.IsZero() { - condition.LastUpdateTime = metav1.Now() + if condition.Reason == "" { + // Reason is a required field for metav1.Condition. + condition.Reason = string(condition.Status) } if condition.LastTransitionTime.IsZero() { condition.LastTransitionTime = metav1.Now() } - currentCond := in.GetCondition(condition.Type) - - if currentCond != nil && currentCond.Status == condition.Status && currentCond.Reason == condition.Reason { - return - } - // Do not update lastTransitionTime if the status of the condition doesn't change. - if currentCond != nil && currentCond.Status == condition.Status { - condition.LastTransitionTime = currentCond.LastTransitionTime - } - - in.RemoveCondition(condition.Type) - in.Conditions = append(in.Conditions, condition) + meta.SetStatusCondition(&in.Conditions, condition) } } // RemoveCondition removes the resource condition with the provided type. func (in *BuildStatus) RemoveCondition(condType BuildConditionType) { - newConditions := in.Conditions[:0] - for _, c := range in.Conditions { - if c.Type != condType { - newConditions = append(newConditions, c) - } - } - - in.Conditions = newConditions + meta.RemoveStatusCondition(&in.Conditions, string(condType)) } -var _ ResourceCondition = &BuildCondition{} - func (in *BuildStatus) GetConditions() []ResourceCondition { res := make([]ResourceCondition, 0, len(in.Conditions)) - for _, c := range in.Conditions { - res = append(res, &c) + for i := range in.Conditions { + res = append(res, (*conditionAdapter)(&in.Conditions[i])) } return res } -func (c *BuildCondition) GetType() string { - return string(c.Type) +// conditionAdapter adapts a metav1.Condition to the legacy ResourceCondition +// interface, so callers that used to work with the per-CRD condition structs +// keep working unchanged while the underlying storage is the k8s-standard type. +type conditionAdapter metav1.Condition + +var _ ResourceCondition = &conditionAdapter{} + +func (c *conditionAdapter) GetType() string { + return c.Type } -func (c *BuildCondition) GetStatus() corev1.ConditionStatus { - return c.Status +func (c *conditionAdapter) GetStatus() corev1.ConditionStatus { + return corev1.ConditionStatus(c.Status) } -func (c *BuildCondition) GetLastUpdateTime() metav1.Time { - return c.LastUpdateTime +func (c *conditionAdapter) GetLastUpdateTime() metav1.Time { + return c.LastTransitionTime } -func (c *BuildCondition) GetLastTransitionTime() metav1.Time { +func (c *conditionAdapter) GetLastTransitionTime() metav1.Time { return c.LastTransitionTime } -func (c *BuildCondition) GetReason() string { +func (c *conditionAdapter) GetReason() string { return c.Reason } -func (c *BuildCondition) GetMessage() string { +func (c *conditionAdapter) GetMessage() string { return c.Message } diff --git a/pkg/apis/camel/v1/camelcatalog_types.go b/pkg/apis/camel/v1/camelcatalog_types.go index 18734384c9..e6de14d303 100644 --- a/pkg/apis/camel/v1/camelcatalog_types.go +++ b/pkg/apis/camel/v1/camelcatalog_types.go @@ -18,7 +18,6 @@ limitations under the License. package v1 import ( - corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -76,7 +75,7 @@ type CamelCatalogStatus struct { // the actual phase Phase CamelCatalogPhase `json:"phase,omitempty"` // a list of events happened for the CamelCatalog - Conditions []CamelCatalogCondition `json:"conditions,omitempty"` + Conditions []metav1.Condition `json:"conditions,omitempty"` // the container image available for building an application with this catalog Image string `json:"image,omitempty"` } @@ -93,22 +92,6 @@ const ( CamelCatalogPhaseError CamelCatalogPhase = "Error" ) -// CamelCatalogCondition describes the state of a resource at a certain point. -type CamelCatalogCondition struct { - // Type of CamelCatalog condition. - Type CamelCatalogConditionType `json:"type"` - // Status of the condition, one of True, False, Unknown. - Status corev1.ConditionStatus `json:"status"` - // The last time this condition was updated. - LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty"` - // Last time the condition transitioned from one status to another. - LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"` - // The reason for the condition's last transition. - Reason string `json:"reason,omitempty"` - // A human-readable message indicating details about the transition. - Message string `json:"message,omitempty"` -} - // CamelCatalogConditionType --. type CamelCatalogConditionType string diff --git a/pkg/apis/camel/v1/camelcatalog_types_support.go b/pkg/apis/camel/v1/camelcatalog_types_support.go index 5a07bffbb6..e03716ff8b 100644 --- a/pkg/apis/camel/v1/camelcatalog_types_support.go +++ b/pkg/apis/camel/v1/camelcatalog_types_support.go @@ -21,6 +21,7 @@ import ( "strings" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -74,78 +75,49 @@ func (c *CamelCatalog) SetOperatorID(operatorID string) { } // GetType --. -func (c *CamelCatalogCondition) GetType() string { - return string(c.Type) -} // GetStatus --. -func (c *CamelCatalogCondition) GetStatus() corev1.ConditionStatus { - return c.Status -} // GetLastUpdateTime --. -func (c *CamelCatalogCondition) GetLastUpdateTime() metav1.Time { - return c.LastUpdateTime -} // GetLastTransitionTime --. -func (c *CamelCatalogCondition) GetLastTransitionTime() metav1.Time { - return c.LastTransitionTime -} // GetReason --. -func (c *CamelCatalogCondition) GetReason() string { - return c.Reason -} // GetMessage --. -func (c *CamelCatalogCondition) GetMessage() string { - return c.Message -} // GetConditions --. func (in *CamelCatalogStatus) GetConditions() []ResourceCondition { res := make([]ResourceCondition, 0, len(in.Conditions)) - for _, c := range in.Conditions { - res = append(res, &c) + for i := range in.Conditions { + res = append(res, (*conditionAdapter)(&in.Conditions[i])) } return res } // GetCondition returns the condition with the provided type. -func (in *CamelCatalogStatus) GetCondition(condType CamelCatalogConditionType) *CamelCatalogCondition { - for i := range in.Conditions { - c := in.Conditions[i] - if c.Type == condType { - return &c - } - } - - return nil +func (in *CamelCatalogStatus) GetCondition(condType CamelCatalogConditionType) *metav1.Condition { + return meta.FindStatusCondition(in.Conditions, string(condType)) } // SetCondition --. func (in *CamelCatalogStatus) SetCondition(condType CamelCatalogConditionType, status corev1.ConditionStatus, reason string, message string) { - in.SetConditions(CamelCatalogCondition{ - Type: condType, - Status: status, - LastUpdateTime: metav1.Now(), - LastTransitionTime: metav1.Now(), - Reason: reason, - Message: message, + in.SetConditions(metav1.Condition{ + Type: string(condType), + Status: metav1.ConditionStatus(status), + Reason: reason, + Message: message, }) } // SetErrorCondition --. func (in *CamelCatalogStatus) SetErrorCondition(condType CamelCatalogConditionType, reason string, err error) { - in.SetConditions(CamelCatalogCondition{ - Type: condType, - Status: corev1.ConditionFalse, - LastUpdateTime: metav1.Now(), - LastTransitionTime: metav1.Now(), - Reason: reason, - Message: err.Error(), + in.SetConditions(metav1.Condition{ + Type: string(condType), + Status: metav1.ConditionFalse, + Reason: reason, + Message: err.Error(), }) } @@ -153,40 +125,23 @@ func (in *CamelCatalogStatus) SetErrorCondition(condType CamelCatalogConditionTy // // If a condition that we are about to add already exists and has the same status and // reason then we are not going to update. -func (in *CamelCatalogStatus) SetConditions(conditions ...CamelCatalogCondition) { +func (in *CamelCatalogStatus) SetConditions(conditions ...metav1.Condition) { for _, condition := range conditions { - if condition.LastUpdateTime.IsZero() { - condition.LastUpdateTime = metav1.Now() + if condition.Reason == "" { + // Reason is a required field for metav1.Condition. + condition.Reason = string(condition.Status) } if condition.LastTransitionTime.IsZero() { condition.LastTransitionTime = metav1.Now() } - currentCond := in.GetCondition(condition.Type) - - if currentCond != nil && currentCond.Status == condition.Status && currentCond.Reason == condition.Reason { - return - } - // Do not update lastTransitionTime if the status of the condition doesn't change. - if currentCond != nil && currentCond.Status == condition.Status { - condition.LastTransitionTime = currentCond.LastTransitionTime - } - - in.RemoveCondition(condition.Type) - in.Conditions = append(in.Conditions, condition) + meta.SetStatusCondition(&in.Conditions, condition) } } // RemoveCondition removes the resource condition with the provided type. func (in *CamelCatalogStatus) RemoveCondition(condType CamelCatalogConditionType) { - newConditions := in.Conditions[:0] - for _, c := range in.Conditions { - if c.Type != condType { - newConditions = append(newConditions, c) - } - } - - in.Conditions = newConditions + meta.RemoveStatusCondition(&in.Conditions, string(condType)) } // GetRuntimeVersion returns the Camel K runtime version of the catalog. diff --git a/pkg/apis/camel/v1/integration_types.go b/pkg/apis/camel/v1/integration_types.go index a2b98c4232..d873ee83a3 100644 --- a/pkg/apis/camel/v1/integration_types.go +++ b/pkg/apis/camel/v1/integration_types.go @@ -126,7 +126,7 @@ type IntegrationStatus struct { // Deprecated: use properties instead. Configuration []ConfigurationSpec `json:"configuration,omitempty"` // a list of events happened for the Integration - Conditions []IntegrationCondition `json:"conditions,omitempty"` + Conditions []metav1.Condition `json:"conditions,omitempty"` // the operator version Version string `json:"version,omitempty"` // the number of replicas @@ -141,6 +141,18 @@ type IntegrationStatus struct { DeploymentTimestamp *metav1.Time `json:"lastDeploymentTimestamp,omitempty"` // the timestamp representing the last time when this integration was built. BuildTimestamp *metav1.Time `json:"lastBuildTimestamp,omitempty"` + // the timestamp representing the first time the Ready condition became true. + // + // This used to be tracked per-condition (FirstTruthyTime on the Ready condition); + // it now lives on the status directly since Conditions was migrated to the + // standard metav1.Condition type, which has no room for extra fields. + FirstReadyTimestamp *metav1.Time `json:"firstReadyTimestamp,omitempty"` + // DeprecatedPods collect health and conditions information from the owned PODs + // + // Deprecated: may be removed in future releases. This used to live on the Ready + // IntegrationCondition; it moved to the status directly when Conditions was + // migrated to the standard metav1.Condition type. + DeprecatedPods []PodCondition `json:"pods,omitempty"` } // +kubebuilder:object:root=true @@ -285,28 +297,6 @@ const ( IntegrationConditionImportingKindAvailableReason string = "ImportingKindAvailable" ) -// IntegrationCondition describes the state of a resource at a certain point. -type IntegrationCondition struct { - // Type of integration condition. - Type IntegrationConditionType `json:"type"` - // Status of the condition, one of True, False, Unknown. - Status corev1.ConditionStatus `json:"status"` - // The last time this condition was updated. - LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty"` - // Last time the condition transitioned from one status to another. - LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"` - // First time the condition status transitioned to True. - FirstTruthyTime *metav1.Time `json:"firstTruthyTime,omitempty"` - // The reason for the condition's last transition. - Reason string `json:"reason,omitempty"` - // A human-readable message indicating details about the transition. - Message string `json:"message,omitempty"` - // DeprecatedPods collect health and conditions information from the owned PODs - // - // Deprecated: may be removed in future releases. - DeprecatedPods []PodCondition `json:"pods,omitempty"` -} - // PodSpecTemplate represent a template used to deploy an Integration `Pod`. type PodSpecTemplate struct { // the specification diff --git a/pkg/apis/camel/v1/integration_types_support.go b/pkg/apis/camel/v1/integration_types_support.go index bae4ee4fcc..57699592dc 100644 --- a/pkg/apis/camel/v1/integration_types_support.go +++ b/pkg/apis/camel/v1/integration_types_support.go @@ -28,6 +28,7 @@ import ( yaml2 "gopkg.in/yaml.v2" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/yaml" ) @@ -349,7 +350,7 @@ func (in *Integration) IsConditionTrue(conditionType IntegrationConditionType) b return false } - return cond.Status == corev1.ConditionTrue + return cond.Status == metav1.ConditionTrue } // SetReadyCondition sets Ready condition with the given status, reason, and message. @@ -382,125 +383,70 @@ func (in *Integration) SetDeployingPhase() { } // GetCondition returns the condition with the provided type. -func (in *IntegrationStatus) GetCondition(condType IntegrationConditionType) *IntegrationCondition { - for i := range in.Conditions { - c := in.Conditions[i] - if c.Type == condType { - return &c - } - } - - return nil +func (in *IntegrationStatus) GetCondition(condType IntegrationConditionType) *metav1.Condition { + return meta.FindStatusCondition(in.Conditions, string(condType)) } func (in *IntegrationStatus) SetCondition(condType IntegrationConditionType, status corev1.ConditionStatus, reason string, message string) { - in.SetConditions(IntegrationCondition{ - Type: condType, - Status: status, + in.SetConditions(metav1.Condition{ + Type: string(condType), + Status: metav1.ConditionStatus(status), Reason: reason, Message: message, }) } func (in *IntegrationStatus) SetErrorCondition(condType IntegrationConditionType, reason string, err error) { - in.SetConditions(IntegrationCondition{ - Type: condType, - Status: corev1.ConditionFalse, + in.SetConditions(metav1.Condition{ + Type: string(condType), + Status: metav1.ConditionFalse, Reason: reason, Message: err.Error(), }) } -// SetConditions updates the resource to include the provided conditions. +// SetConditions updates the resource to include the provided conditions, delegating the +// well known metav1.Condition semantics (LastTransitionTime handling, etc.) to +// k8s.io/apimachinery's meta.SetStatusCondition. // -// If a condition that we are about to add already exists and has the same status and -// reason then we are not going to update. -func (in *IntegrationStatus) SetConditions(conditions ...IntegrationCondition) { +// As a side effect, when the Ready condition transitions to True for the first time, +// IntegrationStatus.FirstReadyTimestamp is recorded. This used to be tracked as a +// per-condition FirstTruthyTime field, which metav1.Condition has no room for. +func (in *IntegrationStatus) SetConditions(conditions ...metav1.Condition) { // Round to second precision, as meta.Time fields are marshalled in RFC3339 format now := metav1.Now().Rfc3339Copy() for _, condition := range conditions { - currentCond := in.GetCondition(condition.Type) - - if currentCond != nil && currentCond.Status == condition.Status && currentCond.Reason == condition.Reason && currentCond.Message == condition.Message { - break - } - - if condition.LastUpdateTime.IsZero() { - condition.LastUpdateTime = now + if condition.Reason == "" { + // Reason is a required field for metav1.Condition. + condition.Reason = string(condition.Status) } - if condition.LastTransitionTime.IsZero() { - // We may want not to set it when the current condition is nil condition.LastTransitionTime = now } - if (condition.FirstTruthyTime == nil || condition.FirstTruthyTime.IsZero()) && condition.Status == corev1.ConditionTrue { - condition.FirstTruthyTime = &now + if condition.Type == string(IntegrationConditionReady) && condition.Status == metav1.ConditionTrue && + (in.FirstReadyTimestamp == nil || in.FirstReadyTimestamp.IsZero()) { + in.FirstReadyTimestamp = &now } - if currentCond != nil { - if currentCond.Status == condition.Status { - // Do not update LastTransitionTime if the status of the condition doesn't change - condition.LastTransitionTime = currentCond.LastTransitionTime - } - if currentCond.FirstTruthyTime != nil && !currentCond.FirstTruthyTime.IsZero() { - // Preserve FirstTruthyTime - condition.FirstTruthyTime = currentCond.FirstTruthyTime.DeepCopy() - } - } - - in.RemoveCondition(condition.Type) - in.Conditions = append(in.Conditions, condition) + meta.SetStatusCondition(&in.Conditions, condition) } } // RemoveCondition removes the resource condition with the provided type. func (in *IntegrationStatus) RemoveCondition(condType IntegrationConditionType) { - newConditions := in.Conditions[:0] - for _, c := range in.Conditions { - if c.Type != condType { - newConditions = append(newConditions, c) - } - } - - in.Conditions = newConditions + meta.RemoveStatusCondition(&in.Conditions, string(condType)) } -var _ ResourceCondition = &IntegrationCondition{} - func (in *IntegrationStatus) GetConditions() []ResourceCondition { res := make([]ResourceCondition, 0, len(in.Conditions)) - for _, c := range in.Conditions { - res = append(res, &c) + for i := range in.Conditions { + res = append(res, (*conditionAdapter)(&in.Conditions[i])) } return res } -func (c *IntegrationCondition) GetType() string { - return string(c.Type) -} - -func (c *IntegrationCondition) GetStatus() corev1.ConditionStatus { - return c.Status -} - -func (c *IntegrationCondition) GetLastUpdateTime() metav1.Time { - return c.LastUpdateTime -} - -func (c *IntegrationCondition) GetLastTransitionTime() metav1.Time { - return c.LastTransitionTime -} - -func (c *IntegrationCondition) GetReason() string { - return c.Reason -} - -func (c *IntegrationCondition) GetMessage() string { - return c.Message -} - // FromYamlDSLString creates a slice of flows from a Camel YAML DSL string. func FromYamlDSLString(flowsString string) ([]Flow, error) { return FromYamlDSL(bytes.NewReader([]byte(flowsString))) diff --git a/pkg/apis/camel/v1/integration_types_support_test.go b/pkg/apis/camel/v1/integration_types_support_test.go index 157b2b635e..df222e18e4 100644 --- a/pkg/apis/camel/v1/integration_types_support_test.go +++ b/pkg/apis/camel/v1/integration_types_support_test.go @@ -23,6 +23,9 @@ import ( "fmt" "testing" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "github.com/apache/camel-k/v2/pkg/apis/camel/v1/trait" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -154,3 +157,30 @@ func TestReadWriteYaml(t *testing.T) { assert.NotNil(t, data) assert.Equal(t, yaml, string(data)) } + +func TestIntegrationStatusSetConditions(t *testing.T) { + status := IntegrationStatus{} + + status.SetCondition(IntegrationConditionReady, corev1.ConditionTrue, "Ready", "integration is ready") + + condition := status.GetCondition(IntegrationConditionReady) + require.NotNil(t, condition) + assert.Equal(t, metav1.ConditionTrue, condition.Status) + assert.False(t, condition.LastTransitionTime.IsZero()) + require.NotNil(t, status.FirstReadyTimestamp) + firstReady := status.FirstReadyTimestamp.DeepCopy() + transition := condition.LastTransitionTime + + status.SetCondition(IntegrationConditionReady, corev1.ConditionTrue, "Ready", "updated message") + + condition = status.GetCondition(IntegrationConditionReady) + require.NotNil(t, condition) + assert.Equal(t, transition, condition.LastTransitionTime) + assert.Equal(t, firstReady, status.FirstReadyTimestamp) + + status.SetCondition(IntegrationConditionReady, corev1.ConditionFalse, "NotReady", "integration is not ready") + condition = status.GetCondition(IntegrationConditionReady) + require.NotNil(t, condition) + assert.Equal(t, metav1.ConditionFalse, condition.Status) + assert.Equal(t, firstReady, status.FirstReadyTimestamp) +} diff --git a/pkg/apis/camel/v1/integrationkit_types.go b/pkg/apis/camel/v1/integrationkit_types.go index 6407ff2198..db0fa765d9 100644 --- a/pkg/apis/camel/v1/integrationkit_types.go +++ b/pkg/apis/camel/v1/integrationkit_types.go @@ -18,7 +18,6 @@ limitations under the License. package v1 import ( - corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/apache/camel-k/v2/pkg/apis/camel/v1/trait" @@ -128,7 +127,7 @@ type IntegrationKitStatus struct { // the Camel K operator version for which this kit was configured Version string `json:"version,omitempty"` // a list of conditions which happened for the events related the kit - Conditions []IntegrationKitCondition `json:"conditions,omitempty"` + Conditions []metav1.Condition `json:"conditions,omitempty"` } // +kubebuilder:object:root=true @@ -206,19 +205,3 @@ const ( // IntegrationKitConditionTraitInfo --. IntegrationKitConditionTraitInfo IntegrationKitConditionType = "TraitInfo" ) - -// IntegrationKitCondition describes the state of a resource at a certain point. -type IntegrationKitCondition struct { - // Type of integration condition. - Type IntegrationKitConditionType `json:"type"` - // Status of the condition, one of True, False, Unknown. - Status corev1.ConditionStatus `json:"status"` - // The last time this condition was updated. - LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty"` - // Last time the condition transitioned from one status to another. - LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"` - // The reason for the condition's last transition. - Reason string `json:"reason,omitempty"` - // A human-readable message indicating details about the transition. - Message string `json:"message,omitempty"` -} diff --git a/pkg/apis/camel/v1/integrationkit_types_support.go b/pkg/apis/camel/v1/integrationkit_types_support.go index b791a1db7e..839641c9e3 100644 --- a/pkg/apis/camel/v1/integrationkit_types_support.go +++ b/pkg/apis/camel/v1/integrationkit_types_support.go @@ -25,6 +25,7 @@ import ( "github.com/apache/camel-k/v2/pkg/util/sets" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -129,36 +130,25 @@ func (in *IntegrationKit) HasCapability(capability string) bool { } // GetCondition returns the condition with the provided type. -func (in *IntegrationKitStatus) GetCondition(condType IntegrationKitConditionType) *IntegrationKitCondition { - for i := range in.Conditions { - c := in.Conditions[i] - if c.Type == condType { - return &c - } - } - - return nil +func (in *IntegrationKitStatus) GetCondition(condType IntegrationKitConditionType) *metav1.Condition { + return meta.FindStatusCondition(in.Conditions, string(condType)) } func (in *IntegrationKitStatus) SetCondition(condType IntegrationKitConditionType, status corev1.ConditionStatus, reason string, message string) { - in.SetConditions(IntegrationKitCondition{ - Type: condType, - Status: status, - LastUpdateTime: metav1.Now(), - LastTransitionTime: metav1.Now(), - Reason: reason, - Message: message, + in.SetConditions(metav1.Condition{ + Type: string(condType), + Status: metav1.ConditionStatus(status), + Reason: reason, + Message: message, }) } func (in *IntegrationKitStatus) SetErrorCondition(condType IntegrationKitConditionType, reason string, err error) { - in.SetConditions(IntegrationKitCondition{ - Type: condType, - Status: corev1.ConditionFalse, - LastUpdateTime: metav1.Now(), - LastTransitionTime: metav1.Now(), - Reason: reason, - Message: err.Error(), + in.SetConditions(metav1.Condition{ + Type: string(condType), + Status: metav1.ConditionFalse, + Reason: reason, + Message: err.Error(), }) } @@ -166,48 +156,29 @@ func (in *IntegrationKitStatus) SetErrorCondition(condType IntegrationKitConditi // // If a condition that we are about to add already exists and has the same status and // reason then we are not going to update. -func (in *IntegrationKitStatus) SetConditions(conditions ...IntegrationKitCondition) { +func (in *IntegrationKitStatus) SetConditions(conditions ...metav1.Condition) { for _, condition := range conditions { - if condition.LastUpdateTime.IsZero() { - condition.LastUpdateTime = metav1.Now() + if condition.Reason == "" { + // Reason is a required field for metav1.Condition. + condition.Reason = string(condition.Status) } if condition.LastTransitionTime.IsZero() { condition.LastTransitionTime = metav1.Now() } - currentCond := in.GetCondition(condition.Type) - - if currentCond != nil && currentCond.Status == condition.Status && currentCond.Reason == condition.Reason { - return - } - // Do not update lastTransitionTime if the status of the condition doesn't change. - if currentCond != nil && currentCond.Status == condition.Status { - condition.LastTransitionTime = currentCond.LastTransitionTime - } - - in.RemoveCondition(condition.Type) - in.Conditions = append(in.Conditions, condition) + meta.SetStatusCondition(&in.Conditions, condition) } } // RemoveCondition removes the resource condition with the provided type. func (in *IntegrationKitStatus) RemoveCondition(condType IntegrationKitConditionType) { - newConditions := in.Conditions[:0] - for _, c := range in.Conditions { - if c.Type != condType { - newConditions = append(newConditions, c) - } - } - - in.Conditions = newConditions + meta.RemoveStatusCondition(&in.Conditions, string(condType)) } -var _ ResourceCondition = &IntegrationKitCondition{} - func (in *IntegrationKitStatus) GetConditions() []ResourceCondition { res := make([]ResourceCondition, 0, len(in.Conditions)) - for _, c := range in.Conditions { - res = append(res, &c) + for i := range in.Conditions { + res = append(res, (*conditionAdapter)(&in.Conditions[i])) } return res @@ -226,27 +197,3 @@ func (in *IntegrationKitStatus) GetDependenciesPaths() *sets.Set { return s } - -func (c *IntegrationKitCondition) GetType() string { - return string(c.Type) -} - -func (c *IntegrationKitCondition) GetStatus() corev1.ConditionStatus { - return c.Status -} - -func (c *IntegrationKitCondition) GetLastUpdateTime() metav1.Time { - return c.LastUpdateTime -} - -func (c *IntegrationKitCondition) GetLastTransitionTime() metav1.Time { - return c.LastTransitionTime -} - -func (c *IntegrationKitCondition) GetReason() string { - return c.Reason -} - -func (c *IntegrationKitCondition) GetMessage() string { - return c.Message -} diff --git a/pkg/apis/camel/v1/integrationplatform_types.go b/pkg/apis/camel/v1/integrationplatform_types.go index 45990e066c..8dc4d643d2 100644 --- a/pkg/apis/camel/v1/integrationplatform_types.go +++ b/pkg/apis/camel/v1/integrationplatform_types.go @@ -18,7 +18,6 @@ limitations under the License. package v1 import ( - corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -59,7 +58,7 @@ type IntegrationPlatformStatus struct { // defines in what phase the IntegrationPlatform is found Phase IntegrationPlatformPhase `json:"phase,omitempty"` // which are the conditions met (particularly useful when in ERROR phase) - Conditions []IntegrationPlatformCondition `json:"conditions,omitempty"` + Conditions []metav1.Condition `json:"conditions,omitempty"` // the Camel K operator version controlling this IntegrationPlatform Version string `json:"version,omitempty"` // generic information related to the build of Camel K operator software @@ -230,19 +229,3 @@ const ( // IntegrationPlatformConditionCamelCatalogAvailableReason represents the reason that the IntegrationPlatform is created. IntegrationPlatformConditionCamelCatalogAvailableReason = "IntegrationPlatformCamelCatalogAvailable" ) - -// IntegrationPlatformCondition describes the state of a resource at a certain point. -type IntegrationPlatformCondition struct { - // Type of integration condition. - Type IntegrationPlatformConditionType `json:"type"` - // Status of the condition, one of True, False, Unknown. - Status corev1.ConditionStatus `json:"status"` - // The last time this condition was updated. - LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty"` - // Last time the condition transitioned from one status to another. - LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"` - // The reason for the condition's last transition. - Reason string `json:"reason,omitempty"` - // A human-readable message indicating details about the transition. - Message string `json:"message,omitempty"` -} diff --git a/pkg/apis/camel/v1/integrationplatform_types_support.go b/pkg/apis/camel/v1/integrationplatform_types_support.go index 6aaf718a51..1cf0754e37 100644 --- a/pkg/apis/camel/v1/integrationplatform_types_support.go +++ b/pkg/apis/camel/v1/integrationplatform_types_support.go @@ -21,6 +21,7 @@ import ( "fmt" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -105,38 +106,27 @@ func (in *IntegrationPlatform) ResyncStatusFullConfig() { } // GetCondition returns the condition with the provided type. -func (in *IntegrationPlatformStatus) GetCondition(condType IntegrationPlatformConditionType) *IntegrationPlatformCondition { - for i := range in.Conditions { - c := in.Conditions[i] - if c.Type == condType { - return &c - } - } - - return nil +func (in *IntegrationPlatformStatus) GetCondition(condType IntegrationPlatformConditionType) *metav1.Condition { + return meta.FindStatusCondition(in.Conditions, string(condType)) } // SetCondition sets the condition with the given status, reason, and message. func (in *IntegrationPlatformStatus) SetCondition(condType IntegrationPlatformConditionType, status corev1.ConditionStatus, reason string, message string) { - in.SetConditions(IntegrationPlatformCondition{ - Type: condType, - Status: status, - LastUpdateTime: metav1.Now(), - LastTransitionTime: metav1.Now(), - Reason: reason, - Message: message, + in.SetConditions(metav1.Condition{ + Type: string(condType), + Status: metav1.ConditionStatus(status), + Reason: reason, + Message: message, }) } // SetErrorCondition sets the condition with the given reason and error message. func (in *IntegrationPlatformStatus) SetErrorCondition(condType IntegrationPlatformConditionType, reason string, err error) { - in.SetConditions(IntegrationPlatformCondition{ - Type: condType, - Status: corev1.ConditionFalse, - LastUpdateTime: metav1.Now(), - LastTransitionTime: metav1.Now(), - Reason: reason, - Message: err.Error(), + in.SetConditions(metav1.Condition{ + Type: string(condType), + Status: metav1.ConditionFalse, + Reason: reason, + Message: err.Error(), }) } @@ -144,40 +134,23 @@ func (in *IntegrationPlatformStatus) SetErrorCondition(condType IntegrationPlatf // // If a condition that we are about to add already exists and has the same status and // reason then we are not going to update. -func (in *IntegrationPlatformStatus) SetConditions(conditions ...IntegrationPlatformCondition) { +func (in *IntegrationPlatformStatus) SetConditions(conditions ...metav1.Condition) { for _, condition := range conditions { - if condition.LastUpdateTime.IsZero() { - condition.LastUpdateTime = metav1.Now() + if condition.Reason == "" { + // Reason is a required field for metav1.Condition. + condition.Reason = string(condition.Status) } if condition.LastTransitionTime.IsZero() { condition.LastTransitionTime = metav1.Now() } - currentCond := in.GetCondition(condition.Type) - - if currentCond != nil && currentCond.Status == condition.Status && currentCond.Reason == condition.Reason { - return - } - // Do not update lastTransitionTime if the status of the condition doesn't change. - if currentCond != nil && currentCond.Status == condition.Status { - condition.LastTransitionTime = currentCond.LastTransitionTime - } - - in.RemoveCondition(condition.Type) - in.Conditions = append(in.Conditions, condition) + meta.SetStatusCondition(&in.Conditions, condition) } } // RemoveCondition removes the resource condition with the provided type. func (in *IntegrationPlatformStatus) RemoveCondition(condType IntegrationPlatformConditionType) { - newConditions := in.Conditions[:0] - for _, c := range in.Conditions { - if c.Type != condType { - newConditions = append(newConditions, c) - } - } - - in.Conditions = newConditions + meta.RemoveStatusCondition(&in.Conditions, string(condType)) } // GetTimeout returns the specified duration or a default one. @@ -189,47 +162,27 @@ func (b *IntegrationPlatformBuildSpec) GetTimeout() metav1.Duration { return *b.Timeout } -var _ ResourceCondition = &IntegrationPlatformCondition{} - // GetConditions --. func (in *IntegrationPlatformStatus) GetConditions() []ResourceCondition { res := make([]ResourceCondition, 0, len(in.Conditions)) - for _, c := range in.Conditions { - res = append(res, &c) + for i := range in.Conditions { + res = append(res, (*conditionAdapter)(&in.Conditions[i])) } return res } // GetType --. -func (c *IntegrationPlatformCondition) GetType() string { - return string(c.Type) -} // GetStatus --. -func (c *IntegrationPlatformCondition) GetStatus() corev1.ConditionStatus { - return c.Status -} // GetLastUpdateTime --. -func (c *IntegrationPlatformCondition) GetLastUpdateTime() metav1.Time { - return c.LastUpdateTime -} // GetLastTransitionTime --. -func (c *IntegrationPlatformCondition) GetLastTransitionTime() metav1.Time { - return c.LastTransitionTime -} // GetReason --. -func (c *IntegrationPlatformCondition) GetReason() string { - return c.Reason -} // GetMessage --. -func (c *IntegrationPlatformCondition) GetMessage() string { - return c.Message -} // Validate checks the strategy is supported. func (b IntegrationPlatformBuildPublishStrategy) Validate() error { diff --git a/pkg/apis/camel/v1/kamelet_types.go b/pkg/apis/camel/v1/kamelet_types.go index 0e8146af26..a31e277eb4 100644 --- a/pkg/apis/camel/v1/kamelet_types.go +++ b/pkg/apis/camel/v1/kamelet_types.go @@ -19,7 +19,6 @@ limitations under the License. package v1 import ( - corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -186,7 +185,7 @@ type KameletStatus struct { // Phase -- Phase KameletPhase `json:"phase,omitempty"` // Conditions -- - Conditions []KameletCondition `json:"conditions,omitempty"` + Conditions []metav1.Condition `json:"conditions,omitempty"` // Properties -- Properties []KameletProperty `json:"properties,omitempty"` } @@ -199,22 +198,6 @@ type KameletProperty struct { Default string `json:"default,omitempty"` } -// KameletCondition describes the state of a resource at a certain point. -type KameletCondition struct { - // Type of kamelet condition. - Type KameletConditionType `json:"type"` - // Status of the condition, one of True, False, Unknown. - Status corev1.ConditionStatus `json:"status"` - // The last time this condition was updated. - LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty"` - // Last time the condition transitioned from one status to another. - LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"` - // The reason for the condition's last transition. - Reason string `json:"reason,omitempty"` - // A human-readable message indicating details about the transition. - Message string `json:"message,omitempty"` -} - // KameletConditionType --. type KameletConditionType string diff --git a/pkg/apis/camel/v1/kamelet_types_support.go b/pkg/apis/camel/v1/kamelet_types_support.go index 24267b6c23..260f80121a 100644 --- a/pkg/apis/camel/v1/kamelet_types_support.go +++ b/pkg/apis/camel/v1/kamelet_types_support.go @@ -23,80 +23,54 @@ import ( "sort" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) // GetConditions --. func (in *KameletStatus) GetConditions() []ResourceCondition { res := make([]ResourceCondition, 0, len(in.Conditions)) - for _, c := range in.Conditions { - res = append(res, &c) + for i := range in.Conditions { + res = append(res, (*conditionAdapter)(&in.Conditions[i])) } + return res } // GetType --. -func (c *KameletCondition) GetType() string { - return string(c.Type) -} // GetStatus --. -func (c *KameletCondition) GetStatus() corev1.ConditionStatus { - return c.Status -} // GetLastUpdateTime --. -func (c *KameletCondition) GetLastUpdateTime() metav1.Time { - return c.LastUpdateTime -} // GetLastTransitionTime --. -func (c *KameletCondition) GetLastTransitionTime() metav1.Time { - return c.LastTransitionTime -} // GetReason --. -func (c *KameletCondition) GetReason() string { - return c.Reason -} // GetMessage --. -func (c *KameletCondition) GetMessage() string { - return c.Message -} // GetCondition returns the condition with the provided type. -func (in *KameletStatus) GetCondition(condType KameletConditionType) *KameletCondition { - for i := range in.Conditions { - c := in.Conditions[i] - if c.Type == condType { - return &c - } - } - return nil +func (in *KameletStatus) GetCondition(condType KameletConditionType) *metav1.Condition { + return meta.FindStatusCondition(in.Conditions, string(condType)) } // SetCondition --. func (in *KameletStatus) SetCondition(condType KameletConditionType, status corev1.ConditionStatus, reason string, message string) { - in.SetConditions(KameletCondition{ - Type: condType, - Status: status, - LastUpdateTime: metav1.Now(), - LastTransitionTime: metav1.Now(), - Reason: reason, - Message: message, + in.SetConditions(metav1.Condition{ + Type: string(condType), + Status: metav1.ConditionStatus(status), + Reason: reason, + Message: message, }) } // SetErrorCondition --. func (in *KameletStatus) SetErrorCondition(condType KameletConditionType, reason string, err error) { - in.SetConditions(KameletCondition{ - Type: condType, - Status: corev1.ConditionFalse, - LastUpdateTime: metav1.Now(), - LastTransitionTime: metav1.Now(), - Reason: reason, - Message: err.Error(), + in.SetConditions(metav1.Condition{ + Type: string(condType), + Status: metav1.ConditionFalse, + Reason: reason, + Message: err.Error(), }) } @@ -104,40 +78,23 @@ func (in *KameletStatus) SetErrorCondition(condType KameletConditionType, reason // // If a condition that we are about to add already exists and has the same status and // reason then we are not going to update. -func (in *KameletStatus) SetConditions(conditions ...KameletCondition) { +func (in *KameletStatus) SetConditions(conditions ...metav1.Condition) { for _, condition := range conditions { - if condition.LastUpdateTime.IsZero() { - condition.LastUpdateTime = metav1.Now() + if condition.Reason == "" { + // Reason is a required field for metav1.Condition. + condition.Reason = string(condition.Status) } if condition.LastTransitionTime.IsZero() { condition.LastTransitionTime = metav1.Now() } - currentCond := in.GetCondition(condition.Type) - - if currentCond != nil && currentCond.Status == condition.Status && currentCond.Reason == condition.Reason { - return - } - // Do not update lastTransitionTime if the status of the condition doesn't change. - if currentCond != nil && currentCond.Status == condition.Status { - condition.LastTransitionTime = currentCond.LastTransitionTime - } - - in.RemoveCondition(condition.Type) - in.Conditions = append(in.Conditions, condition) + meta.SetStatusCondition(&in.Conditions, condition) } } // RemoveCondition removes the resource condition with the provided type. func (in *KameletStatus) RemoveCondition(condType KameletConditionType) { - newConditions := in.Conditions[:0] - for _, c := range in.Conditions { - if c.Type != condType { - newConditions = append(newConditions, c) - } - } - - in.Conditions = newConditions + meta.RemoveStatusCondition(&in.Conditions, string(condType)) } // SortedDefinitionPropertiesKeys returns the sorted keys of the Kamelet definition properties. diff --git a/pkg/apis/camel/v1/pipe_types.go b/pkg/apis/camel/v1/pipe_types.go index 9a4f4a7e4d..7ef725319b 100644 --- a/pkg/apis/camel/v1/pipe_types.go +++ b/pkg/apis/camel/v1/pipe_types.go @@ -105,31 +105,15 @@ type PipeStatus struct { // Phase -- Phase PipePhase `json:"phase,omitempty"` // Conditions -- - Conditions []PipeCondition `json:"conditions,omitempty"` - // Replicas is the number of actual replicas of the pipe - Replicas *int32 `json:"replicas,omitempty"` - // Selector allows to identify pods belonging to the pipe - Selector string `json:"selector,omitempty"` -} - -// PipeCondition describes the state of a resource at a certain point. -type PipeCondition struct { - // Type of pipe condition. - Type PipeConditionType `json:"type"` - // Status of the condition, one of True, False, Unknown. - Status corev1.ConditionStatus `json:"status"` - // The last time this condition was updated. - LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty"` - // Last time the condition transitioned from one status to another. - LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"` - // The reason for the condition's last transition. - Reason string `json:"reason,omitempty"` - // A human readable message indicating details about the transition. - Message string `json:"message,omitempty"` + Conditions []metav1.Condition `json:"conditions,omitempty"` // DeprecatedPods collect health and conditions information from the owned PODs // // Deprecated: may be removed in future releases. DeprecatedPods []PodCondition `json:"pods,omitempty"` + // Replicas is the number of actual replicas of the pipe + Replicas *int32 `json:"replicas,omitempty"` + // Selector allows to identify pods belonging to the pipe + Selector string `json:"selector,omitempty"` } // PipeConditionType --. diff --git a/pkg/apis/camel/v1/pipe_types_support.go b/pkg/apis/camel/v1/pipe_types_support.go index d66280e9a5..ecc09e0ebb 100644 --- a/pkg/apis/camel/v1/pipe_types_support.go +++ b/pkg/apis/camel/v1/pipe_types_support.go @@ -23,49 +23,20 @@ import ( "fmt" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) // GetConditions --. func (in *PipeStatus) GetConditions() []ResourceCondition { res := make([]ResourceCondition, 0, len(in.Conditions)) - for _, c := range in.Conditions { - res = append(res, &c) + for i := range in.Conditions { + res = append(res, (*conditionAdapter)(&in.Conditions[i])) } return res } -// GetType --. -func (c *PipeCondition) GetType() string { - return string(c.Type) -} - -// GetStatus --. -func (c *PipeCondition) GetStatus() corev1.ConditionStatus { - return c.Status -} - -// GetLastUpdateTime --. -func (c *PipeCondition) GetLastUpdateTime() metav1.Time { - return c.LastUpdateTime -} - -// GetLastTransitionTime --. -func (c *PipeCondition) GetLastTransitionTime() metav1.Time { - return c.LastTransitionTime -} - -// GetReason --. -func (c *PipeCondition) GetReason() string { - return c.Reason -} - -// GetMessage --. -func (c *PipeCondition) GetMessage() string { - return c.Message -} - // SetOperatorID sets the given operator id as an annotation. func (in *Pipe) SetOperatorID(operatorID string) { SetAnnotation(&in.ObjectMeta, OperatorIDAnnotation, operatorID) @@ -77,66 +48,40 @@ func (in *Pipe) SetTraits(traits *Traits) { } // GetCondition returns the condition with the provided type. -func (in *PipeStatus) GetCondition(condType PipeConditionType) *PipeCondition { - for i := range in.Conditions { - c := in.Conditions[i] - if c.Type == condType { - return &c - } - } - - return nil +func (in *PipeStatus) GetCondition(condType PipeConditionType) *metav1.Condition { + return meta.FindStatusCondition(in.Conditions, string(condType)) } -// SetCondition --. +// SetCondition sets the condition with the given status, reason, and message. func (in *PipeStatus) SetCondition(condType PipeConditionType, status corev1.ConditionStatus, reason string, message string) { - in.SetConditions(PipeCondition{ - Type: condType, - Status: status, - LastUpdateTime: metav1.Now(), - LastTransitionTime: metav1.Now(), - Reason: reason, - Message: message, + in.SetConditions(metav1.Condition{ + Type: string(condType), + Status: metav1.ConditionStatus(status), + Reason: reason, + Message: message, }) } -// SetErrorCondition --. +// SetErrorCondition sets the condition with the given reason and error message. func (in *PipeStatus) SetErrorCondition(condType PipeConditionType, reason string, err error) { - in.SetConditions(PipeCondition{ - Type: condType, - Status: corev1.ConditionFalse, - LastUpdateTime: metav1.Now(), - LastTransitionTime: metav1.Now(), - Reason: reason, - Message: err.Error(), + in.SetConditions(metav1.Condition{ + Type: string(condType), + Status: metav1.ConditionFalse, + Reason: reason, + Message: err.Error(), }) } -// SetConditions updates the resource to include the provided conditions. -// -// If a condition that we are about to add already exists and has the same status and -// reason then we are not going to update. -func (in *PipeStatus) SetConditions(conditions ...PipeCondition) { +// SetConditions updates the resource conditions using metav1.Condition semantics. +func (in *PipeStatus) SetConditions(conditions ...metav1.Condition) { for _, condition := range conditions { - if condition.LastUpdateTime.IsZero() { - condition.LastUpdateTime = metav1.Now() + if condition.Reason == "" { + condition.Reason = string(condition.Status) } if condition.LastTransitionTime.IsZero() { condition.LastTransitionTime = metav1.Now() } - - currentCond := in.GetCondition(condition.Type) - - if currentCond != nil && currentCond.Status == condition.Status && currentCond.Reason == condition.Reason { - return - } - // Do not update lastTransitionTime if the status of the condition doesn't change. - if currentCond != nil && currentCond.Status == condition.Status { - condition.LastTransitionTime = currentCond.LastTransitionTime - } - - in.RemoveCondition(condition.Type) - in.Conditions = append(in.Conditions, condition) + meta.SetStatusCondition(&in.Conditions, condition) } } @@ -144,7 +89,7 @@ func (in *PipeStatus) SetConditions(conditions ...PipeCondition) { func (in *PipeStatus) RemoveCondition(condType PipeConditionType) { newConditions := in.Conditions[:0] for _, c := range in.Conditions { - if c.Type != condType { + if c.Type != string(condType) { newConditions = append(newConditions, c) } } diff --git a/pkg/apis/camel/v1/pipe_types_support_test.go b/pkg/apis/camel/v1/pipe_types_support_test.go index dfa71e2a57..481f5cc924 100644 --- a/pkg/apis/camel/v1/pipe_types_support_test.go +++ b/pkg/apis/camel/v1/pipe_types_support_test.go @@ -21,6 +21,9 @@ import ( "encoding/json" "testing" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "github.com/apache/camel-k/v2/pkg/apis/camel/v1/trait" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -86,3 +89,25 @@ func TestSetTraits(t *testing.T) { pipe.SetTraits(&traits) assert.Equal(t, expectedTraits, pipe.Spec.Traits) } + +func TestPipeStatusSetConditions(t *testing.T) { + status := PipeStatus{} + + status.SetCondition(PipeConditionReady, corev1.ConditionTrue, "Ready", "pipe is ready") + + condition := status.GetCondition(PipeConditionReady) + require.NotNil(t, condition) + assert.Equal(t, metav1.ConditionTrue, condition.Status) + assert.False(t, condition.LastTransitionTime.IsZero()) + transition := condition.LastTransitionTime + + status.SetCondition(PipeConditionReady, corev1.ConditionTrue, "Ready", "updated message") + condition = status.GetCondition(PipeConditionReady) + require.NotNil(t, condition) + assert.Equal(t, transition, condition.LastTransitionTime) + + status.SetCondition(PipeConditionReady, corev1.ConditionFalse, "NotReady", "pipe is not ready") + condition = status.GetCondition(PipeConditionReady) + require.NotNil(t, condition) + assert.Equal(t, metav1.ConditionFalse, condition.Status) +} diff --git a/pkg/apis/camel/v1/zz_generated.deepcopy.go b/pkg/apis/camel/v1/zz_generated.deepcopy.go index 1d11e35a2e..143b64da58 100644 --- a/pkg/apis/camel/v1/zz_generated.deepcopy.go +++ b/pkg/apis/camel/v1/zz_generated.deepcopy.go @@ -125,23 +125,6 @@ func (in *Build) DeepCopyObject() runtime.Object { return nil } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *BuildCondition) DeepCopyInto(out *BuildCondition) { - *out = *in - in.LastUpdateTime.DeepCopyInto(&out.LastUpdateTime) - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildCondition. -func (in *BuildCondition) DeepCopy() *BuildCondition { - if in == nil { - return nil - } - out := new(BuildCondition) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *BuildConfiguration) DeepCopyInto(out *BuildConfiguration) { *out = *in @@ -251,7 +234,7 @@ func (in *BuildStatus) DeepCopyInto(out *BuildStatus) { } if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions - *out = make([]BuildCondition, len(*in)) + *out = make([]metav1.Condition, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -438,23 +421,6 @@ func (in *CamelCatalog) DeepCopyObject() runtime.Object { return nil } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CamelCatalogCondition) DeepCopyInto(out *CamelCatalogCondition) { - *out = *in - in.LastUpdateTime.DeepCopyInto(&out.LastUpdateTime) - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CamelCatalogCondition. -func (in *CamelCatalogCondition) DeepCopy() *CamelCatalogCondition { - if in == nil { - return nil - } - out := new(CamelCatalogCondition) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CamelCatalogList) DeepCopyInto(out *CamelCatalogList) { *out = *in @@ -522,7 +488,7 @@ func (in *CamelCatalogStatus) DeepCopyInto(out *CamelCatalogStatus) { *out = *in if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions - *out = make([]CamelCatalogCondition, len(*in)) + *out = make([]metav1.Condition, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -1229,34 +1195,6 @@ func (in *Integration) DeepCopyObject() runtime.Object { return nil } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IntegrationCondition) DeepCopyInto(out *IntegrationCondition) { - *out = *in - in.LastUpdateTime.DeepCopyInto(&out.LastUpdateTime) - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) - if in.FirstTruthyTime != nil { - in, out := &in.FirstTruthyTime, &out.FirstTruthyTime - *out = (*in).DeepCopy() - } - if in.DeprecatedPods != nil { - in, out := &in.DeprecatedPods, &out.DeprecatedPods - *out = make([]PodCondition, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IntegrationCondition. -func (in *IntegrationCondition) DeepCopy() *IntegrationCondition { - if in == nil { - return nil - } - out := new(IntegrationCondition) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *IntegrationKit) DeepCopyInto(out *IntegrationKit) { *out = *in @@ -1284,23 +1222,6 @@ func (in *IntegrationKit) DeepCopyObject() runtime.Object { return nil } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IntegrationKitCondition) DeepCopyInto(out *IntegrationKitCondition) { - *out = *in - in.LastUpdateTime.DeepCopyInto(&out.LastUpdateTime) - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IntegrationKitCondition. -func (in *IntegrationKitCondition) DeepCopy() *IntegrationKitCondition { - if in == nil { - return nil - } - out := new(IntegrationKitCondition) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *IntegrationKitList) DeepCopyInto(out *IntegrationKitList) { *out = *in @@ -1396,7 +1317,7 @@ func (in *IntegrationKitStatus) DeepCopyInto(out *IntegrationKitStatus) { } if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions - *out = make([]IntegrationKitCondition, len(*in)) + *out = make([]metav1.Condition, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -1549,23 +1470,6 @@ func (in *IntegrationPlatformBuildSpec) DeepCopy() *IntegrationPlatformBuildSpec return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IntegrationPlatformCondition) DeepCopyInto(out *IntegrationPlatformCondition) { - *out = *in - in.LastUpdateTime.DeepCopyInto(&out.LastUpdateTime) - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IntegrationPlatformCondition. -func (in *IntegrationPlatformCondition) DeepCopy() *IntegrationPlatformCondition { - if in == nil { - return nil - } - out := new(IntegrationPlatformCondition) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *IntegrationPlatformKameletSpec) DeepCopyInto(out *IntegrationPlatformKameletSpec) { *out = *in @@ -1647,7 +1551,7 @@ func (in *IntegrationPlatformStatus) DeepCopyInto(out *IntegrationPlatformStatus in.IntegrationPlatformSpec.DeepCopyInto(&out.IntegrationPlatformSpec) if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions - *out = make([]IntegrationPlatformCondition, len(*in)) + *out = make([]metav1.Condition, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -1911,7 +1815,18 @@ func (in *IntegrationStatus) DeepCopyInto(out *IntegrationStatus) { } if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions - *out = make([]IntegrationCondition, len(*in)) + *out = make([]metav1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.FirstReadyTimestamp != nil { + in, out := &in.FirstReadyTimestamp, &out.FirstReadyTimestamp + *out = (*in).DeepCopy() + } + if in.DeprecatedPods != nil { + in, out := &in.DeprecatedPods, &out.DeprecatedPods + *out = make([]PodCondition, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -2133,23 +2048,6 @@ func (in *Kamelet) DeepCopyObject() runtime.Object { return nil } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KameletCondition) DeepCopyInto(out *KameletCondition) { - *out = *in - in.LastUpdateTime.DeepCopyInto(&out.LastUpdateTime) - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KameletCondition. -func (in *KameletCondition) DeepCopy() *KameletCondition { - if in == nil { - return nil - } - out := new(KameletCondition) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *KameletList) DeepCopyInto(out *KameletList) { *out = *in @@ -2291,7 +2189,7 @@ func (in *KameletStatus) DeepCopyInto(out *KameletStatus) { *out = *in if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions - *out = make([]KameletCondition, len(*in)) + *out = make([]metav1.Condition, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -2509,30 +2407,6 @@ func (in *Pipe) DeepCopyObject() runtime.Object { return nil } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PipeCondition) DeepCopyInto(out *PipeCondition) { - *out = *in - in.LastUpdateTime.DeepCopyInto(&out.LastUpdateTime) - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) - if in.DeprecatedPods != nil { - in, out := &in.DeprecatedPods, &out.DeprecatedPods - *out = make([]PodCondition, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PipeCondition. -func (in *PipeCondition) DeepCopy() *PipeCondition { - if in == nil { - return nil - } - out := new(PipeCondition) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PipeList) DeepCopyInto(out *PipeList) { *out = *in @@ -2619,7 +2493,14 @@ func (in *PipeStatus) DeepCopyInto(out *PipeStatus) { *out = *in if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions - *out = make([]PipeCondition, len(*in)) + *out = make([]metav1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.DeprecatedPods != nil { + in, out := &in.DeprecatedPods, &out.DeprecatedPods + *out = make([]PodCondition, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } diff --git a/pkg/client/camel/applyconfiguration/camel/v1/buildcondition.go b/pkg/client/camel/applyconfiguration/camel/v1/buildcondition.go deleted file mode 100644 index 16fb0ba3e2..0000000000 --- a/pkg/client/camel/applyconfiguration/camel/v1/buildcondition.go +++ /dev/null @@ -1,99 +0,0 @@ -/* -Licensed to the Apache Software Foundation (ASF) under one or more -contributor license agreements. See the NOTICE file distributed with -this work for additional information regarding copyright ownership. -The ASF licenses this file to You under the Apache License, Version 2.0 -(the "License"); you may not use this file except in compliance with -the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1 - -import ( - camelv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// BuildConditionApplyConfiguration represents a declarative configuration of the BuildCondition type for use -// with apply. -// -// BuildCondition describes the state of a resource at a certain point. -type BuildConditionApplyConfiguration struct { - // Type of integration condition. - Type *camelv1.BuildConditionType `json:"type,omitempty"` - // Status of the condition, one of True, False, Unknown. - Status *corev1.ConditionStatus `json:"status,omitempty"` - // The last time this condition was updated. - LastUpdateTime *metav1.Time `json:"lastUpdateTime,omitempty"` - // Last time the condition transitioned from one status to another. - LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"` - // The reason for the condition's last transition. - Reason *string `json:"reason,omitempty"` - // A human-readable message indicating details about the transition. - Message *string `json:"message,omitempty"` -} - -// BuildConditionApplyConfiguration constructs a declarative configuration of the BuildCondition type for use with -// apply. -func BuildCondition() *BuildConditionApplyConfiguration { - return &BuildConditionApplyConfiguration{} -} - -// WithType sets the Type field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Type field is set to the value of the last call. -func (b *BuildConditionApplyConfiguration) WithType(value camelv1.BuildConditionType) *BuildConditionApplyConfiguration { - b.Type = &value - return b -} - -// WithStatus sets the Status field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Status field is set to the value of the last call. -func (b *BuildConditionApplyConfiguration) WithStatus(value corev1.ConditionStatus) *BuildConditionApplyConfiguration { - b.Status = &value - return b -} - -// WithLastUpdateTime sets the LastUpdateTime field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the LastUpdateTime field is set to the value of the last call. -func (b *BuildConditionApplyConfiguration) WithLastUpdateTime(value metav1.Time) *BuildConditionApplyConfiguration { - b.LastUpdateTime = &value - return b -} - -// WithLastTransitionTime sets the LastTransitionTime field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the LastTransitionTime field is set to the value of the last call. -func (b *BuildConditionApplyConfiguration) WithLastTransitionTime(value metav1.Time) *BuildConditionApplyConfiguration { - b.LastTransitionTime = &value - return b -} - -// WithReason sets the Reason field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Reason field is set to the value of the last call. -func (b *BuildConditionApplyConfiguration) WithReason(value string) *BuildConditionApplyConfiguration { - b.Reason = &value - return b -} - -// WithMessage sets the Message field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Message field is set to the value of the last call. -func (b *BuildConditionApplyConfiguration) WithMessage(value string) *BuildConditionApplyConfiguration { - b.Message = &value - return b -} diff --git a/pkg/client/camel/applyconfiguration/camel/v1/buildstatus.go b/pkg/client/camel/applyconfiguration/camel/v1/buildstatus.go index e4fdb31f11..f64a167ca5 100644 --- a/pkg/client/camel/applyconfiguration/camel/v1/buildstatus.go +++ b/pkg/client/camel/applyconfiguration/camel/v1/buildstatus.go @@ -22,6 +22,7 @@ package v1 import ( camelv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + applyconfigurationsmetav1 "k8s.io/client-go/applyconfigurations/meta/v1" ) // BuildStatusApplyConfiguration represents a declarative configuration of the BuildStatus type for use @@ -50,7 +51,7 @@ type BuildStatusApplyConfiguration struct { // the time when it started StartedAt *metav1.Time `json:"startedAt,omitempty"` // a list of conditions occurred during the build - Conditions []BuildConditionApplyConfiguration `json:"conditions,omitempty"` + Conditions []applyconfigurationsmetav1.ConditionApplyConfiguration `json:"conditions,omitempty"` // how long it took for the build // Change to Duration / ISO 8601 when CRD uses OpenAPI spec v3 // https://github.com/OAI/OpenAPI-Specification/issues/845 @@ -151,7 +152,7 @@ func (b *BuildStatusApplyConfiguration) WithStartedAt(value metav1.Time) *BuildS // WithConditions adds the given value to the Conditions field in the declarative configuration // and returns the receiver, so that objects can be build by chaining "With" function invocations. // If called multiple times, values provided by each call will be appended to the Conditions field. -func (b *BuildStatusApplyConfiguration) WithConditions(values ...*BuildConditionApplyConfiguration) *BuildStatusApplyConfiguration { +func (b *BuildStatusApplyConfiguration) WithConditions(values ...*applyconfigurationsmetav1.ConditionApplyConfiguration) *BuildStatusApplyConfiguration { for i := range values { if values[i] == nil { panic("nil value passed to WithConditions") diff --git a/pkg/client/camel/applyconfiguration/camel/v1/camelcatalogcondition.go b/pkg/client/camel/applyconfiguration/camel/v1/camelcatalogcondition.go deleted file mode 100644 index 07741588c9..0000000000 --- a/pkg/client/camel/applyconfiguration/camel/v1/camelcatalogcondition.go +++ /dev/null @@ -1,99 +0,0 @@ -/* -Licensed to the Apache Software Foundation (ASF) under one or more -contributor license agreements. See the NOTICE file distributed with -this work for additional information regarding copyright ownership. -The ASF licenses this file to You under the Apache License, Version 2.0 -(the "License"); you may not use this file except in compliance with -the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1 - -import ( - camelv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// CamelCatalogConditionApplyConfiguration represents a declarative configuration of the CamelCatalogCondition type for use -// with apply. -// -// CamelCatalogCondition describes the state of a resource at a certain point. -type CamelCatalogConditionApplyConfiguration struct { - // Type of CamelCatalog condition. - Type *camelv1.CamelCatalogConditionType `json:"type,omitempty"` - // Status of the condition, one of True, False, Unknown. - Status *corev1.ConditionStatus `json:"status,omitempty"` - // The last time this condition was updated. - LastUpdateTime *metav1.Time `json:"lastUpdateTime,omitempty"` - // Last time the condition transitioned from one status to another. - LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"` - // The reason for the condition's last transition. - Reason *string `json:"reason,omitempty"` - // A human-readable message indicating details about the transition. - Message *string `json:"message,omitempty"` -} - -// CamelCatalogConditionApplyConfiguration constructs a declarative configuration of the CamelCatalogCondition type for use with -// apply. -func CamelCatalogCondition() *CamelCatalogConditionApplyConfiguration { - return &CamelCatalogConditionApplyConfiguration{} -} - -// WithType sets the Type field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Type field is set to the value of the last call. -func (b *CamelCatalogConditionApplyConfiguration) WithType(value camelv1.CamelCatalogConditionType) *CamelCatalogConditionApplyConfiguration { - b.Type = &value - return b -} - -// WithStatus sets the Status field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Status field is set to the value of the last call. -func (b *CamelCatalogConditionApplyConfiguration) WithStatus(value corev1.ConditionStatus) *CamelCatalogConditionApplyConfiguration { - b.Status = &value - return b -} - -// WithLastUpdateTime sets the LastUpdateTime field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the LastUpdateTime field is set to the value of the last call. -func (b *CamelCatalogConditionApplyConfiguration) WithLastUpdateTime(value metav1.Time) *CamelCatalogConditionApplyConfiguration { - b.LastUpdateTime = &value - return b -} - -// WithLastTransitionTime sets the LastTransitionTime field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the LastTransitionTime field is set to the value of the last call. -func (b *CamelCatalogConditionApplyConfiguration) WithLastTransitionTime(value metav1.Time) *CamelCatalogConditionApplyConfiguration { - b.LastTransitionTime = &value - return b -} - -// WithReason sets the Reason field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Reason field is set to the value of the last call. -func (b *CamelCatalogConditionApplyConfiguration) WithReason(value string) *CamelCatalogConditionApplyConfiguration { - b.Reason = &value - return b -} - -// WithMessage sets the Message field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Message field is set to the value of the last call. -func (b *CamelCatalogConditionApplyConfiguration) WithMessage(value string) *CamelCatalogConditionApplyConfiguration { - b.Message = &value - return b -} diff --git a/pkg/client/camel/applyconfiguration/camel/v1/camelcatalogstatus.go b/pkg/client/camel/applyconfiguration/camel/v1/camelcatalogstatus.go index 7ffb454138..e468b0989d 100644 --- a/pkg/client/camel/applyconfiguration/camel/v1/camelcatalogstatus.go +++ b/pkg/client/camel/applyconfiguration/camel/v1/camelcatalogstatus.go @@ -21,6 +21,7 @@ package v1 import ( camelv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" + applyconfigurationsmetav1 "k8s.io/client-go/applyconfigurations/meta/v1" ) // CamelCatalogStatusApplyConfiguration represents a declarative configuration of the CamelCatalogStatus type for use @@ -33,7 +34,7 @@ type CamelCatalogStatusApplyConfiguration struct { // the actual phase Phase *camelv1.CamelCatalogPhase `json:"phase,omitempty"` // a list of events happened for the CamelCatalog - Conditions []CamelCatalogConditionApplyConfiguration `json:"conditions,omitempty"` + Conditions []applyconfigurationsmetav1.ConditionApplyConfiguration `json:"conditions,omitempty"` // the container image available for building an application with this catalog Image *string `json:"image,omitempty"` } @@ -63,7 +64,7 @@ func (b *CamelCatalogStatusApplyConfiguration) WithPhase(value camelv1.CamelCata // WithConditions adds the given value to the Conditions field in the declarative configuration // and returns the receiver, so that objects can be build by chaining "With" function invocations. // If called multiple times, values provided by each call will be appended to the Conditions field. -func (b *CamelCatalogStatusApplyConfiguration) WithConditions(values ...*CamelCatalogConditionApplyConfiguration) *CamelCatalogStatusApplyConfiguration { +func (b *CamelCatalogStatusApplyConfiguration) WithConditions(values ...*applyconfigurationsmetav1.ConditionApplyConfiguration) *CamelCatalogStatusApplyConfiguration { for i := range values { if values[i] == nil { panic("nil value passed to WithConditions") diff --git a/pkg/client/camel/applyconfiguration/camel/v1/integrationcondition.go b/pkg/client/camel/applyconfiguration/camel/v1/integrationcondition.go deleted file mode 100644 index 7af91d2263..0000000000 --- a/pkg/client/camel/applyconfiguration/camel/v1/integrationcondition.go +++ /dev/null @@ -1,126 +0,0 @@ -/* -Licensed to the Apache Software Foundation (ASF) under one or more -contributor license agreements. See the NOTICE file distributed with -this work for additional information regarding copyright ownership. -The ASF licenses this file to You under the Apache License, Version 2.0 -(the "License"); you may not use this file except in compliance with -the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1 - -import ( - camelv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// IntegrationConditionApplyConfiguration represents a declarative configuration of the IntegrationCondition type for use -// with apply. -// -// IntegrationCondition describes the state of a resource at a certain point. -type IntegrationConditionApplyConfiguration struct { - // Type of integration condition. - Type *camelv1.IntegrationConditionType `json:"type,omitempty"` - // Status of the condition, one of True, False, Unknown. - Status *corev1.ConditionStatus `json:"status,omitempty"` - // The last time this condition was updated. - LastUpdateTime *metav1.Time `json:"lastUpdateTime,omitempty"` - // Last time the condition transitioned from one status to another. - LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"` - // First time the condition status transitioned to True. - FirstTruthyTime *metav1.Time `json:"firstTruthyTime,omitempty"` - // The reason for the condition's last transition. - Reason *string `json:"reason,omitempty"` - // A human-readable message indicating details about the transition. - Message *string `json:"message,omitempty"` - // DeprecatedPods collect health and conditions information from the owned PODs - // - // Deprecated: may be removed in future releases. - DeprecatedPods []PodConditionApplyConfiguration `json:"pods,omitempty"` -} - -// IntegrationConditionApplyConfiguration constructs a declarative configuration of the IntegrationCondition type for use with -// apply. -func IntegrationCondition() *IntegrationConditionApplyConfiguration { - return &IntegrationConditionApplyConfiguration{} -} - -// WithType sets the Type field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Type field is set to the value of the last call. -func (b *IntegrationConditionApplyConfiguration) WithType(value camelv1.IntegrationConditionType) *IntegrationConditionApplyConfiguration { - b.Type = &value - return b -} - -// WithStatus sets the Status field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Status field is set to the value of the last call. -func (b *IntegrationConditionApplyConfiguration) WithStatus(value corev1.ConditionStatus) *IntegrationConditionApplyConfiguration { - b.Status = &value - return b -} - -// WithLastUpdateTime sets the LastUpdateTime field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the LastUpdateTime field is set to the value of the last call. -func (b *IntegrationConditionApplyConfiguration) WithLastUpdateTime(value metav1.Time) *IntegrationConditionApplyConfiguration { - b.LastUpdateTime = &value - return b -} - -// WithLastTransitionTime sets the LastTransitionTime field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the LastTransitionTime field is set to the value of the last call. -func (b *IntegrationConditionApplyConfiguration) WithLastTransitionTime(value metav1.Time) *IntegrationConditionApplyConfiguration { - b.LastTransitionTime = &value - return b -} - -// WithFirstTruthyTime sets the FirstTruthyTime field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the FirstTruthyTime field is set to the value of the last call. -func (b *IntegrationConditionApplyConfiguration) WithFirstTruthyTime(value metav1.Time) *IntegrationConditionApplyConfiguration { - b.FirstTruthyTime = &value - return b -} - -// WithReason sets the Reason field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Reason field is set to the value of the last call. -func (b *IntegrationConditionApplyConfiguration) WithReason(value string) *IntegrationConditionApplyConfiguration { - b.Reason = &value - return b -} - -// WithMessage sets the Message field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Message field is set to the value of the last call. -func (b *IntegrationConditionApplyConfiguration) WithMessage(value string) *IntegrationConditionApplyConfiguration { - b.Message = &value - return b -} - -// WithDeprecatedPods adds the given value to the DeprecatedPods field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the DeprecatedPods field. -func (b *IntegrationConditionApplyConfiguration) WithDeprecatedPods(values ...*PodConditionApplyConfiguration) *IntegrationConditionApplyConfiguration { - for i := range values { - if values[i] == nil { - panic("nil value passed to WithDeprecatedPods") - } - b.DeprecatedPods = append(b.DeprecatedPods, *values[i]) - } - return b -} diff --git a/pkg/client/camel/applyconfiguration/camel/v1/integrationkitcondition.go b/pkg/client/camel/applyconfiguration/camel/v1/integrationkitcondition.go deleted file mode 100644 index 6ef229bfc0..0000000000 --- a/pkg/client/camel/applyconfiguration/camel/v1/integrationkitcondition.go +++ /dev/null @@ -1,99 +0,0 @@ -/* -Licensed to the Apache Software Foundation (ASF) under one or more -contributor license agreements. See the NOTICE file distributed with -this work for additional information regarding copyright ownership. -The ASF licenses this file to You under the Apache License, Version 2.0 -(the "License"); you may not use this file except in compliance with -the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1 - -import ( - camelv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// IntegrationKitConditionApplyConfiguration represents a declarative configuration of the IntegrationKitCondition type for use -// with apply. -// -// IntegrationKitCondition describes the state of a resource at a certain point. -type IntegrationKitConditionApplyConfiguration struct { - // Type of integration condition. - Type *camelv1.IntegrationKitConditionType `json:"type,omitempty"` - // Status of the condition, one of True, False, Unknown. - Status *corev1.ConditionStatus `json:"status,omitempty"` - // The last time this condition was updated. - LastUpdateTime *metav1.Time `json:"lastUpdateTime,omitempty"` - // Last time the condition transitioned from one status to another. - LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"` - // The reason for the condition's last transition. - Reason *string `json:"reason,omitempty"` - // A human-readable message indicating details about the transition. - Message *string `json:"message,omitempty"` -} - -// IntegrationKitConditionApplyConfiguration constructs a declarative configuration of the IntegrationKitCondition type for use with -// apply. -func IntegrationKitCondition() *IntegrationKitConditionApplyConfiguration { - return &IntegrationKitConditionApplyConfiguration{} -} - -// WithType sets the Type field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Type field is set to the value of the last call. -func (b *IntegrationKitConditionApplyConfiguration) WithType(value camelv1.IntegrationKitConditionType) *IntegrationKitConditionApplyConfiguration { - b.Type = &value - return b -} - -// WithStatus sets the Status field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Status field is set to the value of the last call. -func (b *IntegrationKitConditionApplyConfiguration) WithStatus(value corev1.ConditionStatus) *IntegrationKitConditionApplyConfiguration { - b.Status = &value - return b -} - -// WithLastUpdateTime sets the LastUpdateTime field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the LastUpdateTime field is set to the value of the last call. -func (b *IntegrationKitConditionApplyConfiguration) WithLastUpdateTime(value metav1.Time) *IntegrationKitConditionApplyConfiguration { - b.LastUpdateTime = &value - return b -} - -// WithLastTransitionTime sets the LastTransitionTime field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the LastTransitionTime field is set to the value of the last call. -func (b *IntegrationKitConditionApplyConfiguration) WithLastTransitionTime(value metav1.Time) *IntegrationKitConditionApplyConfiguration { - b.LastTransitionTime = &value - return b -} - -// WithReason sets the Reason field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Reason field is set to the value of the last call. -func (b *IntegrationKitConditionApplyConfiguration) WithReason(value string) *IntegrationKitConditionApplyConfiguration { - b.Reason = &value - return b -} - -// WithMessage sets the Message field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Message field is set to the value of the last call. -func (b *IntegrationKitConditionApplyConfiguration) WithMessage(value string) *IntegrationKitConditionApplyConfiguration { - b.Message = &value - return b -} diff --git a/pkg/client/camel/applyconfiguration/camel/v1/integrationkitstatus.go b/pkg/client/camel/applyconfiguration/camel/v1/integrationkitstatus.go index f8ad3c57e0..f953fa4a77 100644 --- a/pkg/client/camel/applyconfiguration/camel/v1/integrationkitstatus.go +++ b/pkg/client/camel/applyconfiguration/camel/v1/integrationkitstatus.go @@ -21,6 +21,7 @@ package v1 import ( camelv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" + applyconfigurationsmetav1 "k8s.io/client-go/applyconfigurations/meta/v1" ) // IntegrationKitStatusApplyConfiguration represents a declarative configuration of the IntegrationKitStatus type for use @@ -55,7 +56,7 @@ type IntegrationKitStatusApplyConfiguration struct { // the Camel K operator version for which this kit was configured Version *string `json:"version,omitempty"` // a list of conditions which happened for the events related the kit - Conditions []IntegrationKitConditionApplyConfiguration `json:"conditions,omitempty"` + Conditions []applyconfigurationsmetav1.ConditionApplyConfiguration `json:"conditions,omitempty"` } // IntegrationKitStatusApplyConfiguration constructs a declarative configuration of the IntegrationKitStatus type for use with @@ -176,7 +177,7 @@ func (b *IntegrationKitStatusApplyConfiguration) WithVersion(value string) *Inte // WithConditions adds the given value to the Conditions field in the declarative configuration // and returns the receiver, so that objects can be build by chaining "With" function invocations. // If called multiple times, values provided by each call will be appended to the Conditions field. -func (b *IntegrationKitStatusApplyConfiguration) WithConditions(values ...*IntegrationKitConditionApplyConfiguration) *IntegrationKitStatusApplyConfiguration { +func (b *IntegrationKitStatusApplyConfiguration) WithConditions(values ...*applyconfigurationsmetav1.ConditionApplyConfiguration) *IntegrationKitStatusApplyConfiguration { for i := range values { if values[i] == nil { panic("nil value passed to WithConditions") diff --git a/pkg/client/camel/applyconfiguration/camel/v1/integrationplatformcondition.go b/pkg/client/camel/applyconfiguration/camel/v1/integrationplatformcondition.go deleted file mode 100644 index 008ca596fa..0000000000 --- a/pkg/client/camel/applyconfiguration/camel/v1/integrationplatformcondition.go +++ /dev/null @@ -1,99 +0,0 @@ -/* -Licensed to the Apache Software Foundation (ASF) under one or more -contributor license agreements. See the NOTICE file distributed with -this work for additional information regarding copyright ownership. -The ASF licenses this file to You under the Apache License, Version 2.0 -(the "License"); you may not use this file except in compliance with -the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1 - -import ( - camelv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// IntegrationPlatformConditionApplyConfiguration represents a declarative configuration of the IntegrationPlatformCondition type for use -// with apply. -// -// IntegrationPlatformCondition describes the state of a resource at a certain point. -type IntegrationPlatformConditionApplyConfiguration struct { - // Type of integration condition. - Type *camelv1.IntegrationPlatformConditionType `json:"type,omitempty"` - // Status of the condition, one of True, False, Unknown. - Status *corev1.ConditionStatus `json:"status,omitempty"` - // The last time this condition was updated. - LastUpdateTime *metav1.Time `json:"lastUpdateTime,omitempty"` - // Last time the condition transitioned from one status to another. - LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"` - // The reason for the condition's last transition. - Reason *string `json:"reason,omitempty"` - // A human-readable message indicating details about the transition. - Message *string `json:"message,omitempty"` -} - -// IntegrationPlatformConditionApplyConfiguration constructs a declarative configuration of the IntegrationPlatformCondition type for use with -// apply. -func IntegrationPlatformCondition() *IntegrationPlatformConditionApplyConfiguration { - return &IntegrationPlatformConditionApplyConfiguration{} -} - -// WithType sets the Type field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Type field is set to the value of the last call. -func (b *IntegrationPlatformConditionApplyConfiguration) WithType(value camelv1.IntegrationPlatformConditionType) *IntegrationPlatformConditionApplyConfiguration { - b.Type = &value - return b -} - -// WithStatus sets the Status field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Status field is set to the value of the last call. -func (b *IntegrationPlatformConditionApplyConfiguration) WithStatus(value corev1.ConditionStatus) *IntegrationPlatformConditionApplyConfiguration { - b.Status = &value - return b -} - -// WithLastUpdateTime sets the LastUpdateTime field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the LastUpdateTime field is set to the value of the last call. -func (b *IntegrationPlatformConditionApplyConfiguration) WithLastUpdateTime(value metav1.Time) *IntegrationPlatformConditionApplyConfiguration { - b.LastUpdateTime = &value - return b -} - -// WithLastTransitionTime sets the LastTransitionTime field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the LastTransitionTime field is set to the value of the last call. -func (b *IntegrationPlatformConditionApplyConfiguration) WithLastTransitionTime(value metav1.Time) *IntegrationPlatformConditionApplyConfiguration { - b.LastTransitionTime = &value - return b -} - -// WithReason sets the Reason field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Reason field is set to the value of the last call. -func (b *IntegrationPlatformConditionApplyConfiguration) WithReason(value string) *IntegrationPlatformConditionApplyConfiguration { - b.Reason = &value - return b -} - -// WithMessage sets the Message field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Message field is set to the value of the last call. -func (b *IntegrationPlatformConditionApplyConfiguration) WithMessage(value string) *IntegrationPlatformConditionApplyConfiguration { - b.Message = &value - return b -} diff --git a/pkg/client/camel/applyconfiguration/camel/v1/integrationplatformstatus.go b/pkg/client/camel/applyconfiguration/camel/v1/integrationplatformstatus.go index b68a040746..aa52068373 100644 --- a/pkg/client/camel/applyconfiguration/camel/v1/integrationplatformstatus.go +++ b/pkg/client/camel/applyconfiguration/camel/v1/integrationplatformstatus.go @@ -21,6 +21,7 @@ package v1 import ( camelv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" + applyconfigurationsmetav1 "k8s.io/client-go/applyconfigurations/meta/v1" ) // IntegrationPlatformStatusApplyConfiguration represents a declarative configuration of the IntegrationPlatformStatus type for use @@ -34,7 +35,7 @@ type IntegrationPlatformStatusApplyConfiguration struct { // defines in what phase the IntegrationPlatform is found Phase *camelv1.IntegrationPlatformPhase `json:"phase,omitempty"` // which are the conditions met (particularly useful when in ERROR phase) - Conditions []IntegrationPlatformConditionApplyConfiguration `json:"conditions,omitempty"` + Conditions []applyconfigurationsmetav1.ConditionApplyConfiguration `json:"conditions,omitempty"` // the Camel K operator version controlling this IntegrationPlatform Version *string `json:"version,omitempty"` // generic information related to the build of Camel K operator software @@ -119,7 +120,7 @@ func (b *IntegrationPlatformStatusApplyConfiguration) WithPhase(value camelv1.In // WithConditions adds the given value to the Conditions field in the declarative configuration // and returns the receiver, so that objects can be build by chaining "With" function invocations. // If called multiple times, values provided by each call will be appended to the Conditions field. -func (b *IntegrationPlatformStatusApplyConfiguration) WithConditions(values ...*IntegrationPlatformConditionApplyConfiguration) *IntegrationPlatformStatusApplyConfiguration { +func (b *IntegrationPlatformStatusApplyConfiguration) WithConditions(values ...*applyconfigurationsmetav1.ConditionApplyConfiguration) *IntegrationPlatformStatusApplyConfiguration { for i := range values { if values[i] == nil { panic("nil value passed to WithConditions") diff --git a/pkg/client/camel/applyconfiguration/camel/v1/integrationstatus.go b/pkg/client/camel/applyconfiguration/camel/v1/integrationstatus.go index 0763277883..68fd81ed40 100644 --- a/pkg/client/camel/applyconfiguration/camel/v1/integrationstatus.go +++ b/pkg/client/camel/applyconfiguration/camel/v1/integrationstatus.go @@ -23,6 +23,7 @@ import ( camelv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + applyconfigurationsmetav1 "k8s.io/client-go/applyconfigurations/meta/v1" ) // IntegrationStatusApplyConfiguration represents a declarative configuration of the IntegrationStatus type for use @@ -65,7 +66,7 @@ type IntegrationStatusApplyConfiguration struct { // Deprecated: use properties instead. Configuration []ConfigurationSpecApplyConfiguration `json:"configuration,omitempty"` // a list of events happened for the Integration - Conditions []IntegrationConditionApplyConfiguration `json:"conditions,omitempty"` + Conditions []applyconfigurationsmetav1.ConditionApplyConfiguration `json:"conditions,omitempty"` // the operator version Version *string `json:"version,omitempty"` // the number of replicas @@ -80,6 +81,27 @@ type IntegrationStatusApplyConfiguration struct { DeploymentTimestamp *metav1.Time `json:"lastDeploymentTimestamp,omitempty"` // the timestamp representing the last time when this integration was built. BuildTimestamp *metav1.Time `json:"lastBuildTimestamp,omitempty"` + // the timestamp representing the first time the Ready condition became true. + FirstReadyTimestamp *metav1.Time `json:"firstReadyTimestamp,omitempty"` + // DeprecatedPods collect health and conditions information from the owned PODs. + DeprecatedPods []PodConditionApplyConfiguration `json:"pods,omitempty"` +} + +// WithFirstReadyTimestamp sets the FirstReadyTimestamp field in the declarative configuration. +func (b *IntegrationStatusApplyConfiguration) WithFirstReadyTimestamp(value metav1.Time) *IntegrationStatusApplyConfiguration { + b.FirstReadyTimestamp = &value + return b +} + +// WithDeprecatedPods adds the given values to the DeprecatedPods field. +func (b *IntegrationStatusApplyConfiguration) WithDeprecatedPods(values ...*PodConditionApplyConfiguration) *IntegrationStatusApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithDeprecatedPods") + } + b.DeprecatedPods = append(b.DeprecatedPods, *values[i]) + } + return b } // IntegrationStatusApplyConfiguration constructs a declarative configuration of the IntegrationStatus type for use with @@ -223,7 +245,7 @@ func (b *IntegrationStatusApplyConfiguration) WithConfiguration(values ...*Confi // WithConditions adds the given value to the Conditions field in the declarative configuration // and returns the receiver, so that objects can be build by chaining "With" function invocations. // If called multiple times, values provided by each call will be appended to the Conditions field. -func (b *IntegrationStatusApplyConfiguration) WithConditions(values ...*IntegrationConditionApplyConfiguration) *IntegrationStatusApplyConfiguration { +func (b *IntegrationStatusApplyConfiguration) WithConditions(values ...*applyconfigurationsmetav1.ConditionApplyConfiguration) *IntegrationStatusApplyConfiguration { for i := range values { if values[i] == nil { panic("nil value passed to WithConditions") diff --git a/pkg/client/camel/applyconfiguration/camel/v1/kameletcondition.go b/pkg/client/camel/applyconfiguration/camel/v1/kameletcondition.go deleted file mode 100644 index 6783c3c193..0000000000 --- a/pkg/client/camel/applyconfiguration/camel/v1/kameletcondition.go +++ /dev/null @@ -1,99 +0,0 @@ -/* -Licensed to the Apache Software Foundation (ASF) under one or more -contributor license agreements. See the NOTICE file distributed with -this work for additional information regarding copyright ownership. -The ASF licenses this file to You under the Apache License, Version 2.0 -(the "License"); you may not use this file except in compliance with -the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1 - -import ( - camelv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// KameletConditionApplyConfiguration represents a declarative configuration of the KameletCondition type for use -// with apply. -// -// KameletCondition describes the state of a resource at a certain point. -type KameletConditionApplyConfiguration struct { - // Type of kamelet condition. - Type *camelv1.KameletConditionType `json:"type,omitempty"` - // Status of the condition, one of True, False, Unknown. - Status *corev1.ConditionStatus `json:"status,omitempty"` - // The last time this condition was updated. - LastUpdateTime *metav1.Time `json:"lastUpdateTime,omitempty"` - // Last time the condition transitioned from one status to another. - LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"` - // The reason for the condition's last transition. - Reason *string `json:"reason,omitempty"` - // A human-readable message indicating details about the transition. - Message *string `json:"message,omitempty"` -} - -// KameletConditionApplyConfiguration constructs a declarative configuration of the KameletCondition type for use with -// apply. -func KameletCondition() *KameletConditionApplyConfiguration { - return &KameletConditionApplyConfiguration{} -} - -// WithType sets the Type field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Type field is set to the value of the last call. -func (b *KameletConditionApplyConfiguration) WithType(value camelv1.KameletConditionType) *KameletConditionApplyConfiguration { - b.Type = &value - return b -} - -// WithStatus sets the Status field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Status field is set to the value of the last call. -func (b *KameletConditionApplyConfiguration) WithStatus(value corev1.ConditionStatus) *KameletConditionApplyConfiguration { - b.Status = &value - return b -} - -// WithLastUpdateTime sets the LastUpdateTime field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the LastUpdateTime field is set to the value of the last call. -func (b *KameletConditionApplyConfiguration) WithLastUpdateTime(value metav1.Time) *KameletConditionApplyConfiguration { - b.LastUpdateTime = &value - return b -} - -// WithLastTransitionTime sets the LastTransitionTime field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the LastTransitionTime field is set to the value of the last call. -func (b *KameletConditionApplyConfiguration) WithLastTransitionTime(value metav1.Time) *KameletConditionApplyConfiguration { - b.LastTransitionTime = &value - return b -} - -// WithReason sets the Reason field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Reason field is set to the value of the last call. -func (b *KameletConditionApplyConfiguration) WithReason(value string) *KameletConditionApplyConfiguration { - b.Reason = &value - return b -} - -// WithMessage sets the Message field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Message field is set to the value of the last call. -func (b *KameletConditionApplyConfiguration) WithMessage(value string) *KameletConditionApplyConfiguration { - b.Message = &value - return b -} diff --git a/pkg/client/camel/applyconfiguration/camel/v1/kameletstatus.go b/pkg/client/camel/applyconfiguration/camel/v1/kameletstatus.go index bb7faae493..b78298e95b 100644 --- a/pkg/client/camel/applyconfiguration/camel/v1/kameletstatus.go +++ b/pkg/client/camel/applyconfiguration/camel/v1/kameletstatus.go @@ -21,6 +21,7 @@ package v1 import ( camelv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" + applyconfigurationsmetav1 "k8s.io/client-go/applyconfigurations/meta/v1" ) // KameletStatusApplyConfiguration represents a declarative configuration of the KameletStatus type for use @@ -33,7 +34,7 @@ type KameletStatusApplyConfiguration struct { // Phase -- Phase *camelv1.KameletPhase `json:"phase,omitempty"` // Conditions -- - Conditions []KameletConditionApplyConfiguration `json:"conditions,omitempty"` + Conditions []applyconfigurationsmetav1.ConditionApplyConfiguration `json:"conditions,omitempty"` // Properties -- Properties []KameletPropertyApplyConfiguration `json:"properties,omitempty"` } @@ -63,7 +64,7 @@ func (b *KameletStatusApplyConfiguration) WithPhase(value camelv1.KameletPhase) // WithConditions adds the given value to the Conditions field in the declarative configuration // and returns the receiver, so that objects can be build by chaining "With" function invocations. // If called multiple times, values provided by each call will be appended to the Conditions field. -func (b *KameletStatusApplyConfiguration) WithConditions(values ...*KameletConditionApplyConfiguration) *KameletStatusApplyConfiguration { +func (b *KameletStatusApplyConfiguration) WithConditions(values ...*applyconfigurationsmetav1.ConditionApplyConfiguration) *KameletStatusApplyConfiguration { for i := range values { if values[i] == nil { panic("nil value passed to WithConditions") diff --git a/pkg/client/camel/applyconfiguration/camel/v1/pipecondition.go b/pkg/client/camel/applyconfiguration/camel/v1/pipecondition.go deleted file mode 100644 index 3ec794519c..0000000000 --- a/pkg/client/camel/applyconfiguration/camel/v1/pipecondition.go +++ /dev/null @@ -1,116 +0,0 @@ -/* -Licensed to the Apache Software Foundation (ASF) under one or more -contributor license agreements. See the NOTICE file distributed with -this work for additional information regarding copyright ownership. -The ASF licenses this file to You under the Apache License, Version 2.0 -(the "License"); you may not use this file except in compliance with -the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by applyconfiguration-gen. DO NOT EDIT. - -package v1 - -import ( - camelv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// PipeConditionApplyConfiguration represents a declarative configuration of the PipeCondition type for use -// with apply. -// -// PipeCondition describes the state of a resource at a certain point. -type PipeConditionApplyConfiguration struct { - // Type of pipe condition. - Type *camelv1.PipeConditionType `json:"type,omitempty"` - // Status of the condition, one of True, False, Unknown. - Status *corev1.ConditionStatus `json:"status,omitempty"` - // The last time this condition was updated. - LastUpdateTime *metav1.Time `json:"lastUpdateTime,omitempty"` - // Last time the condition transitioned from one status to another. - LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"` - // The reason for the condition's last transition. - Reason *string `json:"reason,omitempty"` - // A human readable message indicating details about the transition. - Message *string `json:"message,omitempty"` - // DeprecatedPods collect health and conditions information from the owned PODs - // - // Deprecated: may be removed in future releases. - DeprecatedPods []PodConditionApplyConfiguration `json:"pods,omitempty"` -} - -// PipeConditionApplyConfiguration constructs a declarative configuration of the PipeCondition type for use with -// apply. -func PipeCondition() *PipeConditionApplyConfiguration { - return &PipeConditionApplyConfiguration{} -} - -// WithType sets the Type field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Type field is set to the value of the last call. -func (b *PipeConditionApplyConfiguration) WithType(value camelv1.PipeConditionType) *PipeConditionApplyConfiguration { - b.Type = &value - return b -} - -// WithStatus sets the Status field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Status field is set to the value of the last call. -func (b *PipeConditionApplyConfiguration) WithStatus(value corev1.ConditionStatus) *PipeConditionApplyConfiguration { - b.Status = &value - return b -} - -// WithLastUpdateTime sets the LastUpdateTime field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the LastUpdateTime field is set to the value of the last call. -func (b *PipeConditionApplyConfiguration) WithLastUpdateTime(value metav1.Time) *PipeConditionApplyConfiguration { - b.LastUpdateTime = &value - return b -} - -// WithLastTransitionTime sets the LastTransitionTime field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the LastTransitionTime field is set to the value of the last call. -func (b *PipeConditionApplyConfiguration) WithLastTransitionTime(value metav1.Time) *PipeConditionApplyConfiguration { - b.LastTransitionTime = &value - return b -} - -// WithReason sets the Reason field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Reason field is set to the value of the last call. -func (b *PipeConditionApplyConfiguration) WithReason(value string) *PipeConditionApplyConfiguration { - b.Reason = &value - return b -} - -// WithMessage sets the Message field in the declarative configuration to the given value -// and returns the receiver, so that objects can be built by chaining "With" function invocations. -// If called multiple times, the Message field is set to the value of the last call. -func (b *PipeConditionApplyConfiguration) WithMessage(value string) *PipeConditionApplyConfiguration { - b.Message = &value - return b -} - -// WithDeprecatedPods adds the given value to the DeprecatedPods field in the declarative configuration -// and returns the receiver, so that objects can be build by chaining "With" function invocations. -// If called multiple times, values provided by each call will be appended to the DeprecatedPods field. -func (b *PipeConditionApplyConfiguration) WithDeprecatedPods(values ...*PodConditionApplyConfiguration) *PipeConditionApplyConfiguration { - for i := range values { - if values[i] == nil { - panic("nil value passed to WithDeprecatedPods") - } - b.DeprecatedPods = append(b.DeprecatedPods, *values[i]) - } - return b -} diff --git a/pkg/client/camel/applyconfiguration/camel/v1/pipestatus.go b/pkg/client/camel/applyconfiguration/camel/v1/pipestatus.go index 1b9a3756f1..7f745a13cf 100644 --- a/pkg/client/camel/applyconfiguration/camel/v1/pipestatus.go +++ b/pkg/client/camel/applyconfiguration/camel/v1/pipestatus.go @@ -21,6 +21,7 @@ package v1 import ( camelv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" + applyconfigurationsmetav1 "k8s.io/client-go/applyconfigurations/meta/v1" ) // PipeStatusApplyConfiguration represents a declarative configuration of the PipeStatus type for use @@ -33,13 +34,25 @@ type PipeStatusApplyConfiguration struct { // Phase -- Phase *camelv1.PipePhase `json:"phase,omitempty"` // Conditions -- - Conditions []PipeConditionApplyConfiguration `json:"conditions,omitempty"` + Conditions []applyconfigurationsmetav1.ConditionApplyConfiguration `json:"conditions,omitempty"` + DeprecatedPods []PodConditionApplyConfiguration `json:"pods,omitempty"` // Replicas is the number of actual replicas of the pipe Replicas *int32 `json:"replicas,omitempty"` // Selector allows to identify pods belonging to the pipe Selector *string `json:"selector,omitempty"` } +// WithDeprecatedPods adds the given values to the DeprecatedPods field. +func (b *PipeStatusApplyConfiguration) WithDeprecatedPods(values ...*PodConditionApplyConfiguration) *PipeStatusApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithDeprecatedPods") + } + b.DeprecatedPods = append(b.DeprecatedPods, *values[i]) + } + return b +} + // PipeStatusApplyConfiguration constructs a declarative configuration of the PipeStatus type for use with // apply. func PipeStatus() *PipeStatusApplyConfiguration { @@ -65,7 +78,7 @@ func (b *PipeStatusApplyConfiguration) WithPhase(value camelv1.PipePhase) *PipeS // WithConditions adds the given value to the Conditions field in the declarative configuration // and returns the receiver, so that objects can be build by chaining "With" function invocations. // If called multiple times, values provided by each call will be appended to the Conditions field. -func (b *PipeStatusApplyConfiguration) WithConditions(values ...*PipeConditionApplyConfiguration) *PipeStatusApplyConfiguration { +func (b *PipeStatusApplyConfiguration) WithConditions(values ...*applyconfigurationsmetav1.ConditionApplyConfiguration) *PipeStatusApplyConfiguration { for i := range values { if values[i] == nil { panic("nil value passed to WithConditions") diff --git a/pkg/client/camel/applyconfiguration/utils.go b/pkg/client/camel/applyconfiguration/utils.go index c48f05ab80..cc2b75feab 100644 --- a/pkg/client/camel/applyconfiguration/utils.go +++ b/pkg/client/camel/applyconfiguration/utils.go @@ -43,8 +43,6 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &camelv1.BuildApplyConfiguration{} case v1.SchemeGroupVersion.WithKind("BuildahTask"): return &camelv1.BuildahTaskApplyConfiguration{} - case v1.SchemeGroupVersion.WithKind("BuildCondition"): - return &camelv1.BuildConditionApplyConfiguration{} case v1.SchemeGroupVersion.WithKind("BuildConfiguration"): return &camelv1.BuildConfigurationApplyConfiguration{} case v1.SchemeGroupVersion.WithKind("BuilderTask"): @@ -61,8 +59,6 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &camelv1.CamelArtifactExclusionApplyConfiguration{} case v1.SchemeGroupVersion.WithKind("CamelCatalog"): return &camelv1.CamelCatalogApplyConfiguration{} - case v1.SchemeGroupVersion.WithKind("CamelCatalogCondition"): - return &camelv1.CamelCatalogConditionApplyConfiguration{} case v1.SchemeGroupVersion.WithKind("CamelCatalogSpec"): return &camelv1.CamelCatalogSpecApplyConfiguration{} case v1.SchemeGroupVersion.WithKind("CamelCatalogStatus"): @@ -117,12 +113,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &camelv1.HealthCheckResponseApplyConfiguration{} case v1.SchemeGroupVersion.WithKind("Integration"): return &camelv1.IntegrationApplyConfiguration{} - case v1.SchemeGroupVersion.WithKind("IntegrationCondition"): - return &camelv1.IntegrationConditionApplyConfiguration{} case v1.SchemeGroupVersion.WithKind("IntegrationKit"): return &camelv1.IntegrationKitApplyConfiguration{} - case v1.SchemeGroupVersion.WithKind("IntegrationKitCondition"): - return &camelv1.IntegrationKitConditionApplyConfiguration{} case v1.SchemeGroupVersion.WithKind("IntegrationKitSpec"): return &camelv1.IntegrationKitSpecApplyConfiguration{} case v1.SchemeGroupVersion.WithKind("IntegrationKitStatus"): @@ -133,8 +125,6 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &camelv1.IntegrationPlatformApplyConfiguration{} case v1.SchemeGroupVersion.WithKind("IntegrationPlatformBuildSpec"): return &camelv1.IntegrationPlatformBuildSpecApplyConfiguration{} - case v1.SchemeGroupVersion.WithKind("IntegrationPlatformCondition"): - return &camelv1.IntegrationPlatformConditionApplyConfiguration{} case v1.SchemeGroupVersion.WithKind("IntegrationPlatformKameletSpec"): return &camelv1.IntegrationPlatformKameletSpecApplyConfiguration{} case v1.SchemeGroupVersion.WithKind("IntegrationPlatformSpec"): @@ -163,8 +153,6 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &camelv1.JSONSchemaPropsApplyConfiguration{} case v1.SchemeGroupVersion.WithKind("Kamelet"): return &camelv1.KameletApplyConfiguration{} - case v1.SchemeGroupVersion.WithKind("KameletCondition"): - return &camelv1.KameletConditionApplyConfiguration{} case v1.SchemeGroupVersion.WithKind("KameletProperty"): return &camelv1.KameletPropertyApplyConfiguration{} case v1.SchemeGroupVersion.WithKind("KameletRepositorySpec"): @@ -187,8 +175,6 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &camelv1.MavenSpecApplyConfiguration{} case v1.SchemeGroupVersion.WithKind("Pipe"): return &camelv1.PipeApplyConfiguration{} - case v1.SchemeGroupVersion.WithKind("PipeCondition"): - return &camelv1.PipeConditionApplyConfiguration{} case v1.SchemeGroupVersion.WithKind("PipeSpec"): return &camelv1.PipeSpecApplyConfiguration{} case v1.SchemeGroupVersion.WithKind("PipeStatus"): diff --git a/pkg/controller/build/build_monitor.go b/pkg/controller/build/build_monitor.go index 7166f6a093..5802321a11 100644 --- a/pkg/controller/build/build_monitor.go +++ b/pkg/controller/build/build_monitor.go @@ -23,6 +23,7 @@ import ( "sync" corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/selection" "k8s.io/apimachinery/pkg/types" @@ -41,7 +42,7 @@ type Monitor struct { buildOrderStrategy v1.BuildOrderStrategy } -func (bm *Monitor) canSchedule(ctx context.Context, c ctrl.Reader, build *v1.Build) (bool, *v1.BuildCondition, error) { +func (bm *Monitor) canSchedule(ctx context.Context, c ctrl.Reader, build *v1.Build) (bool, *metav1.Condition, error) { var runningBuildsTotal int32 runningBuilds.Range(func(_, v any) bool { runningBuildsTotal++ @@ -139,14 +140,14 @@ func monitorFinishedBuild(build *v1.Build) { runningBuilds.Delete(types.NamespacedName{Namespace: build.Namespace, Name: build.Name}.String()) } -func scheduledReadyBuildcondition(buildName string) *v1.BuildCondition { +func scheduledReadyBuildcondition(buildName string) *metav1.Condition { return scheduledBuildcondition(corev1.ConditionTrue, v1.BuildConditionReadyReason, fmt.Sprintf( "the build (%s) is scheduled", buildName, )) } -func scheduledWaitingBuildcondition(buildName string, reason string) *v1.BuildCondition { +func scheduledWaitingBuildcondition(buildName string, reason string) *metav1.Condition { return scheduledBuildcondition(corev1.ConditionFalse, v1.BuildConditionWaitingReason, fmt.Sprintf( enqueuedMsg, reason, @@ -154,10 +155,10 @@ func scheduledWaitingBuildcondition(buildName string, reason string) *v1.BuildCo )) } -func scheduledBuildcondition(status corev1.ConditionStatus, reason string, msg string) *v1.BuildCondition { - return &v1.BuildCondition{ - Type: v1.BuildConditionScheduled, - Status: status, +func scheduledBuildcondition(status corev1.ConditionStatus, reason string, msg string) *metav1.Condition { + return &metav1.Condition{ + Type: string(v1.BuildConditionScheduled), + Status: metav1.ConditionStatus(status), Reason: reason, Message: msg, } diff --git a/pkg/controller/build/build_monitor_test.go b/pkg/controller/build/build_monitor_test.go index 08955c41f7..3b2e3378e3 100644 --- a/pkg/controller/build/build_monitor_test.go +++ b/pkg/controller/build/build_monitor_test.go @@ -39,7 +39,7 @@ func TestMonitorSequentialBuilds(t *testing.T) { finished []*v1.Build build *v1.Build allowed bool - condition *v1.BuildCondition + condition *metav1.Condition }{ { name: "allowNewBuild", @@ -203,7 +203,7 @@ func TestAllowBuildRequeue(t *testing.T) { require.NoError(t, err) assert.False(t, allowed) - assert.Equal(t, corev1.ConditionFalse, condition.Status) + assert.Equal(t, metav1.ConditionFalse, condition.Status) monitorFinishedBuild(runningBuild) @@ -211,7 +211,7 @@ func TestAllowBuildRequeue(t *testing.T) { require.NoError(t, err) assert.True(t, allowed) - assert.Equal(t, corev1.ConditionTrue, condition.Status) + assert.Equal(t, metav1.ConditionTrue, condition.Status) } func TestMonitorFIFOBuilds(t *testing.T) { @@ -221,7 +221,7 @@ func TestMonitorFIFOBuilds(t *testing.T) { builds []*v1.Build build *v1.Build allowed bool - condition *v1.BuildCondition + condition *metav1.Condition }{ { name: "allowNewBuild", @@ -402,7 +402,7 @@ func TestMonitorDependencyMatchingBuilds(t *testing.T) { builds []*v1.Build build *v1.Build allowed bool - condition *v1.BuildCondition + condition *metav1.Condition }{ { name: "allowNewBuild", @@ -640,10 +640,10 @@ func cleanRunningBuildsMonitor() { }) } -func newCondition(status corev1.ConditionStatus, reason string, msg string) *v1.BuildCondition { - return &v1.BuildCondition{ - Type: v1.BuildConditionScheduled, - Status: status, +func newCondition(status corev1.ConditionStatus, reason string, msg string) *metav1.Condition { + return &metav1.Condition{ + Type: string(v1.BuildConditionScheduled), + Status: metav1.ConditionStatus(status), Reason: reason, Message: msg, } diff --git a/pkg/controller/build/schedule.go b/pkg/controller/build/schedule.go index aa21ab32c9..93493748e0 100644 --- a/pkg/controller/build/schedule.go +++ b/pkg/controller/build/schedule.go @@ -76,7 +76,7 @@ func (action *scheduleAction) Handle(ctx context.Context, build *v1.Build) (*v1. return nil, action.toUpdatedStatus(ctx, build, schedulingCondition, v1.BuildPhasePending) } -func (action *scheduleAction) toUpdatedCondition(ctx context.Context, build *v1.Build, condition *v1.BuildCondition) error { +func (action *scheduleAction) toUpdatedCondition(ctx context.Context, build *v1.Build, condition *metav1.Condition) error { return action.patchBuildStatus(ctx, build, func(b *v1.Build) { b.Status = v1.BuildStatus{ Phase: b.Status.Phase, @@ -88,7 +88,7 @@ func (action *scheduleAction) toUpdatedCondition(ctx context.Context, build *v1. }) } -func (action *scheduleAction) toUpdatedStatus(ctx context.Context, build *v1.Build, condition *v1.BuildCondition, phase v1.BuildPhase) error { +func (action *scheduleAction) toUpdatedStatus(ctx context.Context, build *v1.Build, condition *metav1.Condition, phase v1.BuildPhase) error { err := action.patchBuildStatus(ctx, build, func(b *v1.Build) { now := metav1.Now() b.Status = v1.BuildStatus{ diff --git a/pkg/controller/integration/build_test.go b/pkg/controller/integration/build_test.go index 682edd41dc..8521b7303e 100644 --- a/pkg/controller/integration/build_test.go +++ b/pkg/controller/integration/build_test.go @@ -28,7 +28,6 @@ import ( "github.com/apache/camel-k/v2/pkg/util/log" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ctrl "sigs.k8s.io/controller-runtime/pkg/client" ) @@ -238,7 +237,7 @@ func TestIntegrationBuildRunningBuildError(t *testing.T) { require.NoError(t, err) require.NotNil(t, handledIt) assert.Equal(t, v1.IntegrationPhaseError, handledIt.Status.Phase) - assert.Equal(t, corev1.ConditionFalse, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) + assert.Equal(t, metav1.ConditionFalse, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) assert.Equal(t, "BuildError", handledIt.Status.GetCondition(v1.IntegrationConditionReady).Reason) assert.Equal(t, "build failed", handledIt.Status.GetCondition(v1.IntegrationConditionReady).Message) } diff --git a/pkg/controller/integration/initialize.go b/pkg/controller/integration/initialize.go index a86b7ba0d8..c6d009fbf6 100644 --- a/pkg/controller/integration/initialize.go +++ b/pkg/controller/integration/initialize.go @@ -134,58 +134,58 @@ func (action *initializeAction) importFromExternalApp(integration *v1.Integratio return integration, nil } -func getCamelAppImportingCondition(kind, message string) []v1.IntegrationCondition { +func getCamelAppImportingCondition(kind, message string) []metav1.Condition { switch kind { case "Deployment": - return []v1.IntegrationCondition{ + return []metav1.Condition{ { - Type: v1.IntegrationConditionDeploymentAvailable, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionDeploymentAvailable), + Status: metav1.ConditionTrue, Reason: v1.IntegrationConditionDeploymentAvailableReason, Message: message, }, { - Type: v1.IntegrationConditionReady, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionReady), + Status: metav1.ConditionTrue, Reason: v1.IntegrationConditionDeploymentReadyReason, Message: message, }, } case "CronJob": - return []v1.IntegrationCondition{ + return []metav1.Condition{ { - Type: v1.IntegrationConditionCronJobAvailable, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionCronJobAvailable), + Status: metav1.ConditionTrue, Reason: v1.IntegrationConditionCronJobCreatedReason, Message: message, }, { - Type: v1.IntegrationConditionReady, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionReady), + Status: metav1.ConditionTrue, Reason: v1.IntegrationConditionDeploymentReadyReason, Message: message, }, } case "KnativeService": - return []v1.IntegrationCondition{ + return []metav1.Condition{ { - Type: v1.IntegrationConditionKnativeServiceAvailable, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionKnativeServiceAvailable), + Status: metav1.ConditionTrue, Reason: v1.IntegrationConditionKnativeServiceAvailableReason, Message: message, }, { - Type: v1.IntegrationConditionReady, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionReady), + Status: metav1.ConditionTrue, Reason: v1.IntegrationConditionKnativeServiceReadyReason, Message: message, }, } default: - return []v1.IntegrationCondition{ + return []metav1.Condition{ { - Type: v1.IntegrationConditionReady, - Status: corev1.ConditionFalse, + Type: string(v1.IntegrationConditionReady), + Status: metav1.ConditionFalse, Reason: v1.IntegrationConditionImportingKindAvailableReason, Message: fmt.Sprintf("Unsupported %s import kind", kind), }, diff --git a/pkg/controller/integration/initialize_test.go b/pkg/controller/integration/initialize_test.go index e956ae447b..277600d720 100644 --- a/pkg/controller/integration/initialize_test.go +++ b/pkg/controller/integration/initialize_test.go @@ -21,7 +21,6 @@ import ( "context" "testing" - corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" @@ -64,11 +63,11 @@ func TestCamelImportDeployment(t *testing.T) { require.NoError(t, err) assert.Equal(t, v1.IntegrationPhaseRunning, handledIt.Status.Phase) // Ready condition - assert.Equal(t, corev1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) + assert.Equal(t, metav1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) assert.Equal(t, v1.IntegrationConditionDeploymentReadyReason, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Reason) assert.Equal(t, "imported from my-deploy Deployment", handledIt.Status.GetCondition(v1.IntegrationConditionReady).Message) // Deployment condition - assert.Equal(t, corev1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionDeploymentAvailable).Status) + assert.Equal(t, metav1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionDeploymentAvailable).Status) assert.Equal(t, v1.IntegrationConditionDeploymentAvailableReason, handledIt.Status.GetCondition(v1.IntegrationConditionDeploymentAvailable).Reason) assert.Equal(t, "imported from my-deploy Deployment", handledIt.Status.GetCondition(v1.IntegrationConditionDeploymentAvailable).Message) } @@ -104,11 +103,11 @@ func TestCamelImportCronJob(t *testing.T) { require.NoError(t, err) assert.Equal(t, v1.IntegrationPhaseRunning, handledIt.Status.Phase) // Ready condition - assert.Equal(t, corev1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) + assert.Equal(t, metav1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) assert.Equal(t, v1.IntegrationConditionDeploymentReadyReason, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Reason) assert.Equal(t, "imported from my-cron CronJob", handledIt.Status.GetCondition(v1.IntegrationConditionReady).Message) // CronJob condition - assert.Equal(t, corev1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionCronJobAvailable).Status) + assert.Equal(t, metav1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionCronJobAvailable).Status) assert.Equal(t, v1.IntegrationConditionCronJobCreatedReason, handledIt.Status.GetCondition(v1.IntegrationConditionCronJobAvailable).Reason) assert.Equal(t, "imported from my-cron CronJob", handledIt.Status.GetCondition(v1.IntegrationConditionCronJobAvailable).Message) } @@ -144,11 +143,11 @@ func TestCamelImportKnativeService(t *testing.T) { require.NoError(t, err) assert.Equal(t, v1.IntegrationPhaseRunning, handledIt.Status.Phase) // Ready condition - assert.Equal(t, corev1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) + assert.Equal(t, metav1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) assert.Equal(t, v1.IntegrationConditionKnativeServiceReadyReason, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Reason) assert.Equal(t, "imported from my-ksvc KnativeService", handledIt.Status.GetCondition(v1.IntegrationConditionReady).Message) // Knative Service condition - assert.Equal(t, corev1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionKnativeServiceAvailable).Status) + assert.Equal(t, metav1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionKnativeServiceAvailable).Status) assert.Equal(t, v1.IntegrationConditionKnativeServiceAvailableReason, handledIt.Status.GetCondition(v1.IntegrationConditionKnativeServiceAvailable).Reason) assert.Equal(t, "imported from my-ksvc KnativeService", handledIt.Status.GetCondition(v1.IntegrationConditionKnativeServiceAvailable).Message) } @@ -184,7 +183,7 @@ func TestCamelImportUnsupportedKind(t *testing.T) { require.NoError(t, err) assert.Equal(t, v1.IntegrationPhaseError, handledIt.Status.Phase) // Ready condition - assert.Equal(t, corev1.ConditionFalse, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) + assert.Equal(t, metav1.ConditionFalse, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) assert.Equal(t, v1.IntegrationConditionImportingKindAvailableReason, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Reason) assert.Equal(t, "Unsupported SomeKind import kind", handledIt.Status.GetCondition(v1.IntegrationConditionReady).Message) } diff --git a/pkg/controller/integration/integration_controller.go b/pkg/controller/integration/integration_controller.go index 387502ba13..568a456b3f 100644 --- a/pkg/controller/integration/integration_controller.go +++ b/pkg/controller/integration/integration_controller.go @@ -27,6 +27,7 @@ import ( batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" @@ -98,13 +99,13 @@ func integrationUpdateFunc(c client.Client, old *v1.Integration, it *v1.Integrat // Observe the time to first readiness metric previous := old.Status.GetCondition(v1.IntegrationConditionReady) next := it.Status.GetCondition(v1.IntegrationConditionReady) - if isIntegrationUpdated(it, previous, next) { + if isIntegrationUpdated(it, previous, next) && it.Status.FirstReadyTimestamp != nil && !it.Status.FirstReadyTimestamp.IsZero() { // Use DeploymentTimestamp if available (for dry-build), else use InitializationTimestamp startTime := it.Status.InitializationTimestamp.Time if it.Status.DeploymentTimestamp != nil && !it.Status.DeploymentTimestamp.IsZero() { startTime = it.Status.DeploymentTimestamp.Time } - duration := next.FirstTruthyTime.Sub(startTime) + duration := it.Status.FirstReadyTimestamp.Sub(startTime) Log.WithValues("request-namespace", it.Namespace, "request-name", it.Name, "ready-after", duration.Seconds()). ForIntegration(it).Infof("First readiness after %s", duration) timeToFirstReadiness.Observe(duration.Seconds()) @@ -130,14 +131,15 @@ func integrationUpdateFunc(c client.Client, old *v1.Integration, it *v1.Integrat old.Status.Phase != it.Status.Phase } -func isIntegrationUpdated(it *v1.Integration, previous, next *v1.IntegrationCondition) bool { - if previous == nil || previous.Status != corev1.ConditionTrue && (previous.FirstTruthyTime == nil || previous.FirstTruthyTime.IsZero()) { - if next != nil && next.Status == corev1.ConditionTrue && next.FirstTruthyTime != nil && !next.FirstTruthyTime.IsZero() { - return it.Status.InitializationTimestamp != nil - } +func isIntegrationUpdated(it *v1.Integration, previous, next *metav1.Condition) bool { + if it.Status.InitializationTimestamp == nil { + return false } - return false + wasReady := previous != nil && previous.Status == metav1.ConditionTrue + isReady := next != nil && next.Status == metav1.ConditionTrue + + return !wasReady && isReady } func integrationKitEnqueueRequestsFromMapFunc(ctx context.Context, c client.Client, kit *v1.IntegrationKit) []reconcile.Request { @@ -560,11 +562,11 @@ func (r *reconcileIntegration) update(ctx context.Context, base *v1.Integration, ) if target.Status.Phase == v1.IntegrationPhaseError { - if cond := target.Status.GetCondition(v1.IntegrationConditionReady); cond != nil && cond.Status == corev1.ConditionFalse { + if cond := target.Status.GetCondition(v1.IntegrationConditionReady); cond != nil && cond.Status == metav1.ConditionFalse { log.Info( "Integration error", - "reason", cond.GetReason(), - "error-message", cond.GetMessage()) + "reason", cond.Reason, + "error-message", cond.Message) } } } diff --git a/pkg/controller/integration/integration_controller_test.go b/pkg/controller/integration/integration_controller_test.go index 307c31f6ef..798bb977d9 100644 --- a/pkg/controller/integration/integration_controller_test.go +++ b/pkg/controller/integration/integration_controller_test.go @@ -23,7 +23,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" @@ -73,8 +72,8 @@ func TestIsIntegrationUpdated(t *testing.T) { tests := []struct { name string it *v1.Integration - previous *v1.IntegrationCondition - next *v1.IntegrationCondition + previous *metav1.Condition + next *metav1.Condition expected bool }{ { @@ -85,9 +84,8 @@ func TestIsIntegrationUpdated(t *testing.T) { }, }, previous: nil, - next: &v1.IntegrationCondition{ - Status: corev1.ConditionTrue, - FirstTruthyTime: &now, + next: &metav1.Condition{ + Status: metav1.ConditionTrue, }, expected: true, }, @@ -97,9 +95,8 @@ func TestIsIntegrationUpdated(t *testing.T) { Status: v1.IntegrationStatus{}, }, previous: nil, - next: &v1.IntegrationCondition{ - Status: corev1.ConditionTrue, - FirstTruthyTime: &now, + next: &metav1.Condition{ + Status: metav1.ConditionTrue, }, expected: false, }, @@ -110,13 +107,11 @@ func TestIsIntegrationUpdated(t *testing.T) { InitializationTimestamp: &now, }, }, - previous: &v1.IntegrationCondition{ - Status: corev1.ConditionTrue, - FirstTruthyTime: &now, + previous: &metav1.Condition{ + Status: metav1.ConditionTrue, }, - next: &v1.IntegrationCondition{ - Status: corev1.ConditionTrue, - FirstTruthyTime: &now, + next: &metav1.Condition{ + Status: metav1.ConditionTrue, }, expected: false, }, diff --git a/pkg/controller/integration/monitor.go b/pkg/controller/integration/monitor.go index e7f56661d0..83ad7a5ffd 100644 --- a/pkg/controller/integration/monitor.go +++ b/pkg/controller/integration/monitor.go @@ -180,9 +180,9 @@ func (action *monitorAction) monitorPods(ctx context.Context, environment *trait // This is happening when the Deployment, CronJob, etc resources // miss the Integration label, required to identify sibling Pods. integration.Status.SetConditions( - v1.IntegrationCondition{ - Type: v1.IntegrationConditionReady, - Status: corev1.ConditionFalse, + metav1.Condition{ + Type: string(v1.IntegrationConditionReady), + Status: metav1.ConditionFalse, Reason: v1.IntegrationConditionMonitoringPodsAvailableReason, Message: fmt.Sprintf( "Could not find `camel.apache.org/integration: %s` label in the %s template. "+ @@ -250,7 +250,7 @@ func isInInitializationFailed(status v1.IntegrationStatus) bool { return false } if cond := status.GetCondition(v1.IntegrationConditionReady); cond != nil { - if cond.Status == corev1.ConditionFalse && + if cond.Status == metav1.ConditionFalse && cond.Reason == v1.IntegrationConditionInitializationFailedReason { return true } @@ -261,7 +261,7 @@ func isInInitializationFailed(status v1.IntegrationStatus) bool { func isInIntegrationKitFailed(status v1.IntegrationStatus) bool { if cond := status.GetCondition(v1.IntegrationConditionKitAvailable); cond != nil { - if cond.Status == corev1.ConditionFalse && + if cond.Status == metav1.ConditionFalse && status.Phase != v1.IntegrationPhaseError { return true } @@ -509,10 +509,10 @@ func arePodsFailingStatuses(integration *v1.Integration, pendingPods []corev1.Po //nolint:staticcheck func (action *monitorAction) probeReadiness(ctx context.Context, environment *trait.Environment, integration *v1.Integration, pods []corev1.Pod) (int32, bool, error) { // as a default we assume the Integration is Ready - readyCondition := v1.IntegrationCondition{ - Type: v1.IntegrationConditionReady, - Status: corev1.ConditionTrue, - DeprecatedPods: make([]v1.PodCondition, len(pods)), + integration.Status.DeprecatedPods = make([]v1.PodCondition, len(pods)) + readyCondition := metav1.Condition{ + Type: string(v1.IntegrationConditionReady), + Status: metav1.ConditionTrue, } readyPods := int32(0) @@ -524,10 +524,10 @@ func (action *monitorAction) probeReadiness(ctx context.Context, environment *tr for i := range pods { pod := &pods[i] - readyCondition.DeprecatedPods[i].Name = pod.Name + integration.Status.DeprecatedPods[i].Name = pod.Name for p := range pod.Status.Conditions { if pod.Status.Conditions[p].Type == corev1.PodReady { - readyCondition.DeprecatedPods[i].Condition = pod.Status.Conditions[p] + integration.Status.DeprecatedPods[i].Condition = pod.Status.Conditions[p] break } @@ -592,13 +592,13 @@ func (action *monitorAction) probeReadiness(ctx context.Context, environment *tr } if errors.Is(err, context.DeadlineExceeded) { - readyCondition.DeprecatedPods[i].Condition.Message = fmt.Sprintf("readiness probe timed out for Pod %s/%s", pod.Namespace, pod.Name) + integration.Status.DeprecatedPods[i].Condition.Message = fmt.Sprintf("readiness probe timed out for Pod %s/%s", pod.Namespace, pod.Name) runtimeReady = false continue } if !k8serrors.IsServiceUnavailable(err) { - readyCondition.DeprecatedPods[i].Condition.Message = fmt.Sprintf("readiness probe failed for Pod %s/%s: %s", pod.Namespace, pod.Name, err.Error()) + integration.Status.DeprecatedPods[i].Condition.Message = fmt.Sprintf("readiness probe failed for Pod %s/%s: %s", pod.Namespace, pod.Name, err.Error()) runtimeReady = false continue @@ -616,7 +616,7 @@ func (action *monitorAction) probeReadiness(ctx context.Context, environment *tr runtimeReady = false runtimeFailed = true - readyCondition.DeprecatedPods[i].Health = append(readyCondition.DeprecatedPods[i].Health, check) + integration.Status.DeprecatedPods[i].Health = append(integration.Status.DeprecatedPods[i].Health, check) } } } @@ -624,14 +624,14 @@ func (action *monitorAction) probeReadiness(ctx context.Context, environment *tr if runtimeFailed { probeReadinessOk = false readyCondition.Reason = v1.IntegrationConditionErrorReason - readyCondition.Status = corev1.ConditionFalse + readyCondition.Status = metav1.ConditionFalse readyCondition.Message = fmt.Sprintf("%d/%d pods are not ready", unreadyPods, unreadyPods+readyPods) integration.Status.SetConditions(readyCondition) } if !runtimeReady { probeReadinessOk = false readyCondition.Reason = v1.IntegrationConditionRuntimeNotReadyReason - readyCondition.Status = corev1.ConditionFalse + readyCondition.Status = metav1.ConditionFalse readyCondition.Message = fmt.Sprintf("%d/%d pods are not ready", unreadyPods, unreadyPods+readyPods) integration.Status.SetConditions(readyCondition) } diff --git a/pkg/controller/integration/monitor_synthetic_test.go b/pkg/controller/integration/monitor_synthetic_test.go index 7eaa6d88a2..1ffe9239da 100644 --- a/pkg/controller/integration/monitor_synthetic_test.go +++ b/pkg/controller/integration/monitor_synthetic_test.go @@ -79,7 +79,7 @@ func TestMonitorSyntheticIntegrationImportingKindUnavailable(t *testing.T) { handledIt, err := a.Handle(context.TODO(), importedIt) require.Error(t, err) assert.Equal(t, v1.IntegrationPhaseError, handledIt.Status.Phase) - assert.Equal(t, corev1.ConditionFalse, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) + assert.Equal(t, metav1.ConditionFalse, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) assert.Equal(t, v1.IntegrationConditionImportingKindAvailableReason, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Reason) assert.Equal(t, "cannot create a synthetic environment for SomeKind kind", handledIt.Status.GetCondition(v1.IntegrationConditionReady).Message) } @@ -110,14 +110,14 @@ func TestMonitorSyntheticIntegrationCannotMonitorPods(t *testing.T) { }, Status: v1.IntegrationStatus{ Phase: v1.IntegrationPhaseRunning, - Conditions: []v1.IntegrationCondition{ + Conditions: []metav1.Condition{ { - Type: v1.IntegrationConditionDeploymentAvailable, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionDeploymentAvailable), + Status: metav1.ConditionTrue, }, { - Type: v1.IntegrationConditionReady, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionReady), + Status: metav1.ConditionTrue, }, }, }, @@ -145,7 +145,7 @@ func TestMonitorSyntheticIntegrationCannotMonitorPods(t *testing.T) { assert.True(t, a.CanHandle(importedIt)) handledIt, err := a.Handle(context.TODO(), importedIt) require.NoError(t, err) - assert.Equal(t, corev1.ConditionFalse, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) + assert.Equal(t, metav1.ConditionFalse, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) // Check monitoring pods condition assert.Equal(t, v1.IntegrationConditionMonitoringPodsAvailableReason, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Reason) assert.Equal(t, "Could not find `camel.apache.org/integration: my-imported-it` label in the Deployment/my-deploy template. Make sure to include this label in the template for Pod monitoring purposes.", handledIt.Status.GetCondition(v1.IntegrationConditionReady).Message) @@ -180,14 +180,14 @@ func TestMonitorSyntheticIntegrationDeployment(t *testing.T) { }, Status: v1.IntegrationStatus{ Phase: v1.IntegrationPhaseRunning, - Conditions: []v1.IntegrationCondition{ + Conditions: []metav1.Condition{ { - Type: v1.IntegrationConditionDeploymentAvailable, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionDeploymentAvailable), + Status: metav1.ConditionTrue, }, { - Type: v1.IntegrationConditionReady, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionReady), + Status: metav1.ConditionTrue, }, }, }, @@ -265,7 +265,7 @@ func TestMonitorSyntheticIntegrationDeployment(t *testing.T) { assert.Equal(t, v1.IntegrationPhaseRunning, handledIt.Status.Phase) assert.Equal(t, int32(1), *handledIt.Status.Replicas) // Ready condition - assert.Equal(t, corev1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) + assert.Equal(t, metav1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) assert.Equal(t, v1.IntegrationConditionDeploymentReadyReason, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Reason) assert.Equal(t, "1/1 ready replicas", handledIt.Status.GetCondition(v1.IntegrationConditionReady).Message) @@ -305,14 +305,14 @@ func TestMonitorSyntheticIntegrationCronJob(t *testing.T) { }, Status: v1.IntegrationStatus{ Phase: v1.IntegrationPhaseRunning, - Conditions: []v1.IntegrationCondition{ + Conditions: []metav1.Condition{ { - Type: v1.IntegrationConditionCronJobAvailable, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionCronJobAvailable), + Status: metav1.ConditionTrue, }, { - Type: v1.IntegrationConditionReady, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionReady), + Status: metav1.ConditionTrue, }, }, }, @@ -394,7 +394,7 @@ func TestMonitorSyntheticIntegrationCronJob(t *testing.T) { assert.Equal(t, v1.IntegrationPhaseRunning, handledIt.Status.Phase) assert.Equal(t, int32(1), *handledIt.Status.Replicas) // Ready condition - assert.Equal(t, corev1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) + assert.Equal(t, metav1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) assert.Equal(t, v1.IntegrationConditionCronJobCreatedReason, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Reason) assert.Equal(t, "cronjob created", handledIt.Status.GetCondition(v1.IntegrationConditionReady).Message) } @@ -425,14 +425,14 @@ func TestMonitorSyntheticIntegrationKnativeService(t *testing.T) { }, Status: v1.IntegrationStatus{ Phase: v1.IntegrationPhaseRunning, - Conditions: []v1.IntegrationCondition{ + Conditions: []metav1.Condition{ { - Type: v1.IntegrationConditionKnativeServiceAvailable, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionKnativeServiceAvailable), + Status: metav1.ConditionTrue, }, { - Type: v1.IntegrationConditionReady, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionReady), + Status: metav1.ConditionTrue, }, }, }, @@ -524,6 +524,6 @@ func TestMonitorSyntheticIntegrationKnativeService(t *testing.T) { assert.Equal(t, v1.IntegrationPhaseRunning, handledIt.Status.Phase) assert.Equal(t, int32(1), *handledIt.Status.Replicas) // Ready condition - assert.Equal(t, corev1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) + assert.Equal(t, metav1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) assert.Equal(t, v1.IntegrationConditionKnativeServiceReadyReason, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Reason) } diff --git a/pkg/controller/integration/monitor_test.go b/pkg/controller/integration/monitor_test.go index 2062e4db80..b3f9573969 100644 --- a/pkg/controller/integration/monitor_test.go +++ b/pkg/controller/integration/monitor_test.go @@ -113,7 +113,7 @@ func TestMonitorIntegration(t *testing.T) { assert.Equal(t, v1.IntegrationPhaseRunning, handledIt.Status.Phase) assert.Equal(t, int32(1), *handledIt.Status.Replicas) // Ready condition - assert.Equal(t, corev1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) + assert.Equal(t, metav1.ConditionTrue, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) assert.Equal(t, v1.IntegrationConditionDeploymentReadyReason, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Reason) } @@ -134,7 +134,7 @@ func TestMonitorFailureIntegration(t *testing.T) { require.Error(t, err) assert.Equal(t, v1.IntegrationPhaseError, handledIt.Status.Phase) // Ready condition - assert.Equal(t, corev1.ConditionFalse, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) + assert.Equal(t, metav1.ConditionFalse, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Status) assert.Equal(t, v1.IntegrationConditionInitializationFailedReason, handledIt.Status.GetCondition(v1.IntegrationConditionReady).Reason) } @@ -186,14 +186,14 @@ func nominalEnvironment() (client.Client, *v1.Integration, error) { Kind: kit.Kind, APIVersion: kit.APIVersion, }, - Conditions: []v1.IntegrationCondition{ + Conditions: []metav1.Condition{ { - Type: v1.IntegrationConditionDeploymentAvailable, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionDeploymentAvailable), + Status: metav1.ConditionTrue, }, { - Type: v1.IntegrationConditionReady, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionReady), + Status: metav1.ConditionTrue, }, }, }, diff --git a/pkg/controller/integrationplatform/create_test.go b/pkg/controller/integrationplatform/create_test.go index c697412c56..50cbef3526 100644 --- a/pkg/controller/integrationplatform/create_test.go +++ b/pkg/controller/integrationplatform/create_test.go @@ -35,7 +35,6 @@ import ( "github.com/apache/camel-k/v2/pkg/util/maven" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" k8stesting "k8s.io/client-go/testing" @@ -70,7 +69,7 @@ func TestCreate(t *testing.T) { assert.Equal(t, defaults.CamelKRuntimeCatalogVersion, answer.Status.Build.RuntimeVersion) assert.Equal(t, v1.RuntimeProviderQuarkus, answer.Status.Build.RuntimeProvider) assert.NotEqual(t, "", answer.Status.Build.RuntimeCoreVersion) - assert.Equal(t, corev1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionCamelCatalogAvailable).Status) + assert.Equal(t, metav1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionCamelCatalogAvailable).Status) list := v1.NewCamelCatalogList() err = c.List(context.TODO(), &list, k8sclient.InNamespace(ip.Namespace)) @@ -114,7 +113,7 @@ func TestCatalogAlreadyPresent(t *testing.T) { assert.Equal(t, v1.IntegrationPlatformPhaseReady, answer.Status.Phase) assert.Equal(t, "4.4.0", answer.Status.Build.RuntimeCoreVersion) - assert.Equal(t, corev1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionCamelCatalogAvailable).Status) + assert.Equal(t, metav1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionCamelCatalogAvailable).Status) } func TestCreateNewCatalog(t *testing.T) { @@ -182,10 +181,10 @@ func TestCreateNewCatalog(t *testing.T) { assert.NotNil(t, answer) assert.Equal(t, v1.IntegrationPlatformPhaseReady, answer.Status.Phase) - assert.Equal(t, corev1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionCamelCatalogAvailable).Status) + assert.Equal(t, metav1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionCamelCatalogAvailable).Status) // We don't know exactly which is the core version, it is enough to check is not empty in the test assert.NotEqual(t, "", answer.Status.Build.RuntimeCoreVersion) - assert.Equal(t, corev1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionKameletCatalogAvailable).Status) + assert.Equal(t, metav1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionKameletCatalogAvailable).Status) assert.Contains(t, answer.Status.GetCondition(v1.IntegrationPlatformConditionKameletCatalogAvailable).Message, fmt.Sprintf("successfully installed Kamelet catalog version %s", answer.Status.Build.RuntimeCoreVersion), "failed 0 Kamelets") @@ -220,8 +219,8 @@ func TestCreateNewCatalog(t *testing.T) { assert.NotNil(t, answer) assert.Equal(t, v1.IntegrationPlatformPhaseReady, answer.Status.Phase) - assert.Equal(t, corev1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionCamelCatalogAvailable).Status) - assert.Equal(t, corev1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionKameletCatalogAvailable).Status) + assert.Equal(t, metav1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionCamelCatalogAvailable).Status) + assert.Equal(t, metav1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionKameletCatalogAvailable).Status) } func TestCreateCatalogError(t *testing.T) { @@ -261,7 +260,7 @@ func TestCreateCatalogError(t *testing.T) { assert.NotNil(t, answer) assert.Equal(t, v1.IntegrationPlatformPhaseError, answer.Status.Phase) - assert.Equal(t, corev1.ConditionFalse, answer.Status.GetCondition(v1.IntegrationPlatformConditionCamelCatalogAvailable).Status) + assert.Equal(t, metav1.ConditionFalse, answer.Status.GetCondition(v1.IntegrationPlatformConditionCamelCatalogAvailable).Status) assert.Equal(t, v1.IntegrationPlatformConditionCamelCatalogAvailableReason, answer.Status.GetCondition(v1.IntegrationPlatformConditionCamelCatalogAvailable).Reason) assert.Contains(t, answer.Status.GetCondition(v1.IntegrationPlatformConditionCamelCatalogAvailable).Message, "camel catalog 0.0.0 not available, please review given runtime version. Error:") } diff --git a/pkg/controller/integrationplatform/monitor_test.go b/pkg/controller/integrationplatform/monitor_test.go index c71e89487b..6e7de9ec0b 100644 --- a/pkg/controller/integrationplatform/monitor_test.go +++ b/pkg/controller/integrationplatform/monitor_test.go @@ -31,6 +31,7 @@ import ( "github.com/stretchr/testify/require" corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) func TestCanHandlePhaseReadyOrError(t *testing.T) { @@ -90,10 +91,10 @@ func TestMonitorReady(t *testing.T) { assert.NotNil(t, answer) assert.Equal(t, v1.IntegrationPlatformPhaseReady, answer.Status.Phase) - assert.Equal(t, corev1.ConditionTrue, + assert.Equal(t, metav1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionTypeRegistryAvailable).Status) assert.Nil(t, answer.Status.GetCondition(v1.IntegrationPlatformConditionType("InsecureRegistryWarning"))) - assert.Equal(t, corev1.ConditionTrue, + assert.Equal(t, metav1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionMavenSettingsAvailable).Status) assert.Equal(t, "3.2.1", answer.Status.Build.RuntimeCoreVersion) } @@ -149,7 +150,7 @@ func TestMonitorDriftDefault(t *testing.T) { assert.NotNil(t, answer) assert.Equal(t, v1.IntegrationPlatformPhaseReady, answer.Status.Phase) - assert.Equal(t, corev1.ConditionFalse, + assert.Equal(t, metav1.ConditionFalse, answer.Status.GetCondition(v1.IntegrationPlatformConditionMavenSettingsAvailable).Status) assert.Equal(t, "3.2.1", answer.Status.Build.RuntimeCoreVersion) } @@ -233,7 +234,7 @@ func TestMonitorMissingRegistryError(t *testing.T) { assert.NotNil(t, answer) assert.Equal(t, v1.IntegrationPlatformPhaseError, answer.Status.Phase) - assert.Equal(t, corev1.ConditionFalse, answer.Status.GetCondition(v1.IntegrationPlatformConditionTypeRegistryAvailable).Status) + assert.Equal(t, metav1.ConditionFalse, answer.Status.GetCondition(v1.IntegrationPlatformConditionTypeRegistryAvailable).Status) assert.Equal(t, v1.IntegrationPlatformConditionTypeRegistryAvailableReason, answer.Status.GetCondition(v1.IntegrationPlatformConditionTypeRegistryAvailable).Reason) @@ -250,7 +251,7 @@ func TestMonitorMissingRegistryError(t *testing.T) { assert.NotNil(t, answer) assert.Equal(t, v1.IntegrationPlatformPhaseReady, answer.Status.Phase) - assert.Equal(t, corev1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionTypeRegistryAvailable).Status) + assert.Equal(t, metav1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionTypeRegistryAvailable).Status) assert.Equal(t, v1.IntegrationPlatformConditionTypeRegistryAvailableReason, answer.Status.GetCondition(v1.IntegrationPlatformConditionTypeRegistryAvailable).Reason) @@ -277,7 +278,7 @@ func TestMonitorMissingCatalogError(t *testing.T) { assert.NotNil(t, answer) assert.Equal(t, v1.IntegrationPlatformPhaseError, answer.Status.Phase) - assert.Equal(t, corev1.ConditionFalse, answer.Status.GetCondition(v1.IntegrationPlatformConditionCamelCatalogAvailable).Status) + assert.Equal(t, metav1.ConditionFalse, answer.Status.GetCondition(v1.IntegrationPlatformConditionCamelCatalogAvailable).Status) assert.Equal(t, v1.IntegrationPlatformConditionCamelCatalogAvailableReason, answer.Status.GetCondition( v1.IntegrationPlatformConditionCamelCatalogAvailable).Reason) assert.Equal(t, fmt.Sprintf("camel catalog %s not available, please review given runtime version", @@ -316,8 +317,8 @@ func TestMonitorWarningInsecureRegistry(t *testing.T) { assert.NotNil(t, answer) assert.Equal(t, v1.IntegrationPlatformPhaseReady, answer.Status.Phase) - assert.Equal(t, corev1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionTypeRegistryAvailable).Status) - assert.Equal(t, corev1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionType("InsecureRegistryWarning")).Status) + assert.Equal(t, metav1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionTypeRegistryAvailable).Status) + assert.Equal(t, metav1.ConditionTrue, answer.Status.GetCondition(v1.IntegrationPlatformConditionType("InsecureRegistryWarning")).Status) assert.Equal(t, "Registry is insecure. This setup should not be used in a production environment.", answer.Status.GetCondition( v1.IntegrationPlatformConditionType("InsecureRegistryWarning")).Message) diff --git a/pkg/controller/pipe/initialize_test.go b/pkg/controller/pipe/initialize_test.go index 29b092880c..06411e6052 100644 --- a/pkg/controller/pipe/initialize_test.go +++ b/pkg/controller/pipe/initialize_test.go @@ -62,7 +62,7 @@ func TestNewPipeError(t *testing.T) { assert.Equal(t, v1.PipePhaseError, handledPipe.Status.Phase) cond := handledPipe.Status.GetCondition(v1.PipeConditionReady) assert.NotNil(t, cond) - assert.Equal(t, corev1.ConditionFalse, cond.Status) + assert.Equal(t, metav1.ConditionFalse, cond.Status) assert.Equal(t, "IntegrationError", cond.Reason) assert.Equal(t, "no ref or URI specified in endpoint", cond.Message) } @@ -266,7 +266,7 @@ func TestNewPipeUnsupportedRef(t *testing.T) { assert.Equal(t, v1.PipePhaseError, handledPipe.Status.Phase) cond := handledPipe.Status.GetCondition(v1.PipeConditionReady) assert.NotNil(t, cond) - assert.Equal(t, corev1.ConditionFalse, cond.Status) + assert.Equal(t, metav1.ConditionFalse, cond.Status) assert.Equal(t, "IntegrationError", cond.Reason) assert.Equal(t, "could not find any suitable binding provider for my-api-version/my-kind my-kind-name in namespace ns. "+ "Bindings available: [\"kamelet\" \"knative-uri\" \"strimzi\" \"service-ref\" \"camel-uri\" \"knative-ref\"]", cond.Message) diff --git a/pkg/controller/pipe/monitor.go b/pkg/controller/pipe/monitor.go index 26e513826a..4f1f22f4d2 100644 --- a/pkg/controller/pipe/monitor.go +++ b/pkg/controller/pipe/monitor.go @@ -25,6 +25,7 @@ import ( corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/equality" k8serrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/controller-runtime/pkg/client" @@ -128,9 +129,9 @@ func (action *monitorAction) Handle(ctx context.Context, pipe *v1.Pipe) (*v1.Pip case v1.IntegrationPhaseBuildComplete: target.Status.Phase = v1.PipePhaseBuildComplete - c := v1.PipeCondition{ - Type: v1.PipeConditionReady, - Status: corev1.ConditionFalse, + c := metav1.Condition{ + Type: string(v1.PipeConditionReady), + Status: metav1.ConditionFalse, Reason: "BuildComplete", Message: fmt.Sprintf("Integration %q build completed successfully", it.GetName()), } @@ -139,20 +140,14 @@ func (action *monitorAction) Handle(ctx context.Context, pipe *v1.Pipe) (*v1.Pip default: target.Status.Phase = v1.PipePhaseCreating - c := v1.PipeCondition{ - Type: v1.PipeConditionReady, - Status: corev1.ConditionFalse, + c := metav1.Condition{ + Type: string(v1.PipeConditionReady), + Status: metav1.ConditionFalse, Reason: string(target.Status.Phase), Message: fmt.Sprintf("Integration %q is in %q phase", it.GetName(), target.Status.Phase), } - //nolint:staticcheck - if condition := it.Status.GetCondition(v1.IntegrationConditionReady); condition != nil { - if condition.DeprecatedPods != nil { - c.DeprecatedPods = make([]v1.PodCondition, 0, len(condition.DeprecatedPods)) - c.DeprecatedPods = append(c.DeprecatedPods, condition.DeprecatedPods...) - } - } + target.Status.DeprecatedPods = append([]v1.PodCondition(nil), it.Status.DeprecatedPods...) target.Status.SetConditions(c) } @@ -173,18 +168,14 @@ func setPipeReadyCondition(kb *v1.Pipe, it *v1.Integration) { message = fmt.Sprintf("Integration %q readiness condition is %q", it.GetName(), condition.Status) } - c := v1.PipeCondition{ - Type: v1.PipeConditionReady, + c := metav1.Condition{ + Type: string(v1.PipeConditionReady), Status: condition.Status, Reason: condition.Reason, Message: message, } - //nolint:staticcheck - if condition.DeprecatedPods != nil { - c.DeprecatedPods = make([]v1.PodCondition, 0, len(condition.DeprecatedPods)) - c.DeprecatedPods = append(c.DeprecatedPods, condition.DeprecatedPods...) - } + kb.Status.DeprecatedPods = append([]v1.PodCondition(nil), it.Status.DeprecatedPods...) kb.Status.SetConditions(c) } else { diff --git a/pkg/controller/pipe/monitor_test.go b/pkg/controller/pipe/monitor_test.go index ba2269b2b9..20f3ec7ce2 100644 --- a/pkg/controller/pipe/monitor_test.go +++ b/pkg/controller/pipe/monitor_test.go @@ -80,7 +80,7 @@ func TestPipeIntegrationSpecChanged(t *testing.T) { handledPipe, err := a.Handle(context.TODO(), pipe) require.NoError(t, err) assert.Equal(t, v1.PipePhaseNone, handledPipe.Status.Phase) - assert.Equal(t, corev1.ConditionFalse, handledPipe.Status.GetCondition(v1.PipeConditionReady).Status) + assert.Equal(t, metav1.ConditionFalse, handledPipe.Status.GetCondition(v1.PipeConditionReady).Status) } func TestPipeIntegrationReady(t *testing.T) { @@ -125,7 +125,7 @@ func TestPipeIntegrationReady(t *testing.T) { handledPipe, err := a.Handle(context.TODO(), pipe) require.NoError(t, err) assert.Equal(t, v1.PipePhaseReady, handledPipe.Status.Phase) - assert.Equal(t, corev1.ConditionTrue, handledPipe.Status.GetCondition(v1.PipeConditionReady).Status) + assert.Equal(t, metav1.ConditionTrue, handledPipe.Status.GetCondition(v1.PipeConditionReady).Status) } func TestPipeIntegrationUnknown(t *testing.T) { @@ -169,7 +169,7 @@ func TestPipeIntegrationUnknown(t *testing.T) { handledPipe, err := a.Handle(context.TODO(), pipe) require.NoError(t, err) assert.Equal(t, v1.PipePhaseReady, handledPipe.Status.Phase) - assert.Equal(t, corev1.ConditionUnknown, handledPipe.Status.GetCondition(v1.PipeConditionReady).Status) + assert.Equal(t, metav1.ConditionUnknown, handledPipe.Status.GetCondition(v1.PipeConditionReady).Status) } func TestPipeIntegrationError(t *testing.T) { @@ -214,7 +214,7 @@ func TestPipeIntegrationError(t *testing.T) { handledPipe, err := a.Handle(context.TODO(), pipe) require.NoError(t, err) assert.Equal(t, v1.PipePhaseError, handledPipe.Status.Phase) - assert.Equal(t, corev1.ConditionFalse, handledPipe.Status.GetCondition(v1.PipeConditionReady).Status) + assert.Equal(t, metav1.ConditionFalse, handledPipe.Status.GetCondition(v1.PipeConditionReady).Status) assert.Equal(t, "Error message", handledPipe.Status.GetCondition(v1.PipeConditionReady).Message) } @@ -244,7 +244,7 @@ func TestPipeIntegrationErrorFromPipeErrorPhase(t *testing.T) { handledPipe, err := a.Handle(context.TODO(), pipe) require.Error(t, err) assert.Equal(t, v1.PipePhaseError, handledPipe.Status.Phase) - assert.Equal(t, corev1.ConditionFalse, handledPipe.Status.GetCondition(v1.PipeConditionReady).Status) + assert.Equal(t, metav1.ConditionFalse, handledPipe.Status.GetCondition(v1.PipeConditionReady).Status) assert.Equal(t, "no ref or URI specified in endpoint", handledPipe.Status.GetCondition(v1.PipeConditionReady).Message) } @@ -325,7 +325,7 @@ func TestPipeIntegrationCreatingFromPipeCreatingPhase(t *testing.T) { handledPipe, err := a.Handle(context.TODO(), pipe) require.NoError(t, err) assert.Equal(t, v1.PipePhaseCreating, handledPipe.Status.Phase) - assert.Equal(t, corev1.ConditionFalse, handledPipe.Status.GetCondition(v1.PipeConditionReady).Status) + assert.Equal(t, metav1.ConditionFalse, handledPipe.Status.GetCondition(v1.PipeConditionReady).Status) assert.Equal(t, "Integration \"my-pipe\" is in \"Creating\" phase", handledPipe.Status.GetCondition(v1.PipeConditionReady).Message) } @@ -373,7 +373,7 @@ func TestPipeIntegrationPipeTraitAnnotations(t *testing.T) { handledPipe, err := a.Handle(context.TODO(), pipe) require.NoError(t, err) assert.Equal(t, v1.PipePhaseCreating, handledPipe.Status.Phase) - assert.Equal(t, corev1.ConditionFalse, handledPipe.Status.GetCondition(v1.PipeConditionReady).Status) + assert.Equal(t, metav1.ConditionFalse, handledPipe.Status.GetCondition(v1.PipeConditionReady).Status) assert.Equal(t, "Integration \"my-pipe\" is in \"Creating\" phase", handledPipe.Status.GetCondition(v1.PipeConditionReady).Message) } @@ -416,7 +416,7 @@ func TestPipeIntegrationBuildComplete(t *testing.T) { handledPipe, err := a.Handle(context.TODO(), pipe) require.NoError(t, err) assert.Equal(t, v1.PipePhaseBuildComplete, handledPipe.Status.Phase) - assert.Equal(t, corev1.ConditionFalse, handledPipe.Status.GetCondition(v1.PipeConditionReady).Status) + assert.Equal(t, metav1.ConditionFalse, handledPipe.Status.GetCondition(v1.PipeConditionReady).Status) assert.Equal(t, "BuildComplete", handledPipe.Status.GetCondition(v1.PipeConditionReady).Reason) assert.Equal(t, "Integration \"my-pipe\" build completed successfully", handledPipe.Status.GetCondition(v1.PipeConditionReady).Message) } diff --git a/pkg/resources/config/crd/bases/camel.apache.org_builds.yaml b/pkg/resources/config/crd/bases/camel.apache.org_builds.yaml index b39efba7fb..62568d86ba 100644 --- a/pkg/resources/config/crd/bases/camel.apache.org_builds.yaml +++ b/pkg/resources/config/crd/bases/camel.apache.org_builds.yaml @@ -2089,21 +2089,14 @@ spec: conditions: description: a list of conditions occurred during the build items: - description: BuildCondition describes the state of a resource at - a certain point. + description: Condition contains details for one aspect of the current state of a resource. properties: lastTransitionTime: - description: Last time the condition transitioned from one status - to another. - format: date-time - type: string - lastUpdateTime: - description: The last time this condition was updated. + description: Last time the condition transitioned from one status to another. format: date-time type: string message: - description: A human-readable message indicating details about - the transition. + description: A human-readable message indicating details about the transition. type: string reason: description: The reason for the condition's last transition. @@ -2112,13 +2105,18 @@ spec: description: Status of the condition, one of True, False, Unknown. type: string type: - description: Type of integration condition. + description: Type of condition. type: string required: + - lastTransitionTime + - message + - reason - status - type - type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map digest: description: the digest from image type: string diff --git a/pkg/resources/config/crd/bases/camel.apache.org_camelcatalogs.yaml b/pkg/resources/config/crd/bases/camel.apache.org_camelcatalogs.yaml index 50ba8fbb15..fc52e3eb0d 100644 --- a/pkg/resources/config/crd/bases/camel.apache.org_camelcatalogs.yaml +++ b/pkg/resources/config/crd/bases/camel.apache.org_camelcatalogs.yaml @@ -494,21 +494,14 @@ spec: conditions: description: a list of events happened for the CamelCatalog items: - description: CamelCatalogCondition describes the state of a resource - at a certain point. + description: Condition contains details for one aspect of the current state of a resource. properties: lastTransitionTime: - description: Last time the condition transitioned from one status - to another. - format: date-time - type: string - lastUpdateTime: - description: The last time this condition was updated. + description: Last time the condition transitioned from one status to another. format: date-time type: string message: - description: A human-readable message indicating details about - the transition. + description: A human-readable message indicating details about the transition. type: string reason: description: The reason for the condition's last transition. @@ -517,13 +510,18 @@ spec: description: Status of the condition, one of True, False, Unknown. type: string type: - description: Type of CamelCatalog condition. + description: Type of condition. type: string required: + - lastTransitionTime + - message + - reason - status - type - type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map image: description: the container image available for building an application with this catalog diff --git a/pkg/resources/config/crd/bases/camel.apache.org_integrationkits.yaml b/pkg/resources/config/crd/bases/camel.apache.org_integrationkits.yaml index 4ea0a0ee36..9508726b5f 100644 --- a/pkg/resources/config/crd/bases/camel.apache.org_integrationkits.yaml +++ b/pkg/resources/config/crd/bases/camel.apache.org_integrationkits.yaml @@ -505,23 +505,15 @@ spec: type: object conditions: description: a list of conditions which happened for the events related - the kit items: - description: IntegrationKitCondition describes the state of a resource - at a certain point. + description: Condition contains details for one aspect of the current state of a resource. properties: lastTransitionTime: - description: Last time the condition transitioned from one status - to another. - format: date-time - type: string - lastUpdateTime: - description: The last time this condition was updated. + description: Last time the condition transitioned from one status to another. format: date-time type: string message: - description: A human-readable message indicating details about - the transition. + description: A human-readable message indicating details about the transition. type: string reason: description: The reason for the condition's last transition. @@ -530,13 +522,18 @@ spec: description: Status of the condition, one of True, False, Unknown. type: string type: - description: Type of integration condition. + description: Type of condition. type: string required: + - lastTransitionTime + - message + - reason - status - type - type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map digest: description: actual image digest of the kit type: string diff --git a/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml b/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml index 79fd1c7c1c..1cf5709cb9 100644 --- a/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml +++ b/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml @@ -2955,23 +2955,15 @@ spec: type: string conditions: description: which are the conditions met (particularly useful when - in ERROR phase) items: - description: IntegrationPlatformCondition describes the state of - a resource at a certain point. + description: Condition contains details for one aspect of the current state of a resource. properties: lastTransitionTime: - description: Last time the condition transitioned from one status - to another. - format: date-time - type: string - lastUpdateTime: - description: The last time this condition was updated. + description: Last time the condition transitioned from one status to another. format: date-time type: string message: - description: A human-readable message indicating details about - the transition. + description: A human-readable message indicating details about the transition. type: string reason: description: The reason for the condition's last transition. @@ -2980,13 +2972,18 @@ spec: description: Status of the condition, one of True, False, Unknown. type: string type: - description: Type of integration condition. + description: Type of condition. type: string required: + - lastTransitionTime + - message + - reason - status - type - type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map configuration: description: |- Deprecated: diff --git a/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml b/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml index ff26a0d6db..2ed1a5a382 100644 --- a/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml +++ b/pkg/resources/config/crd/bases/camel.apache.org_integrations.yaml @@ -9308,97 +9308,15 @@ spec: conditions: description: a list of events happened for the Integration items: - description: IntegrationCondition describes the state of a resource - at a certain point. + description: Condition contains details for one aspect of the current state of a resource. properties: - firstTruthyTime: - description: First time the condition status transitioned to - True. - format: date-time - type: string lastTransitionTime: - description: Last time the condition transitioned from one status - to another. - format: date-time - type: string - lastUpdateTime: - description: The last time this condition was updated. + description: Last time the condition transitioned from one status to another. format: date-time type: string message: - description: A human-readable message indicating details about - the transition. + description: A human-readable message indicating details about the transition. type: string - pods: - description: |- - DeprecatedPods collect health and conditions information from the owned PODs - - Deprecated: may be removed in future releases. - items: - description: 'Deprecated: may be removed in future releases.' - properties: - condition: - description: PodCondition contains details for the current - condition of this pod. - properties: - lastProbeTime: - description: Last time we probed the condition. - format: date-time - type: string - lastTransitionTime: - description: Last time the condition transitioned - from one status to another. - format: date-time - type: string - message: - description: Human-readable message indicating details - about last transition. - type: string - observedGeneration: - description: If set, this represents the .metadata.generation - that the pod condition was set based upon. - format: int64 - type: integer - reason: - description: Unique, one-word, CamelCase reason for - the condition's last transition. - type: string - status: - description: |- - Status is the status of the condition. - Can be True, False, Unknown. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions - type: string - type: - description: |- - Type is the type of the condition. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions - type: string - required: - - status - - type - type: object - health: - items: - properties: - data: - description: |- - RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can - be used to delay JSON decoding or precompute a JSON encoding. - x-kubernetes-preserve-unknown-fields: true - name: - type: string - status: - type: string - type: object - type: array - name: - type: string - required: - - condition - type: object - type: array reason: description: The reason for the condition's last transition. type: string @@ -9406,13 +9324,18 @@ spec: description: Status of the condition, one of True, False, Unknown. type: string type: - description: Type of integration condition. + description: Type of condition. type: string required: + - lastTransitionTime + - message + - reason - status - type - type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map configuration: description: |- a list of configuration specification. @@ -9443,6 +9366,10 @@ spec: digest: description: the digest calculated for this Integration type: string + firstReadyTimestamp: + description: the timestamp representing the first time the Ready condition became true. + format: date-time + type: string generatedSources: description: a list of sources generated for this Integration items: @@ -9583,6 +9510,76 @@ spec: platform: description: The IntegrationPlatform watching this Integration type: string + pods: + description: |- + DeprecatedPods collect health and conditions information from the owned PODs + + Deprecated: may be removed in future releases. + items: + description: 'Deprecated: may be removed in future releases.' + properties: + condition: + description: PodCondition contains details for the current + condition of this pod. + properties: + lastProbeTime: + description: Last time we probed the condition. + format: date-time + type: string + lastTransitionTime: + description: Last time the condition transitioned + from one status to another. + format: date-time + type: string + message: + description: Human-readable message indicating details + about last transition. + type: string + observedGeneration: + description: If set, this represents the .metadata.generation + that the pod condition was set based upon. + format: int64 + type: integer + reason: + description: Unique, one-word, CamelCase reason for + the condition's last transition. + type: string + status: + description: |- + Status is the status of the condition. + Can be True, False, Unknown. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions + type: string + type: + description: |- + Type is the type of the condition. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions + type: string + required: + - status + - type + type: object + health: + items: + properties: + data: + description: |- + RawMessage is a raw encoded JSON value. + It implements Marshaler and Unmarshaler and can + be used to delay JSON decoding or precompute a JSON encoding. + x-kubernetes-preserve-unknown-fields: true + name: + type: string + status: + type: string + type: object + type: array + name: + type: string + required: + - condition + type: object + type: array profile: description: |- the profile needed to run this Integration diff --git a/pkg/resources/config/crd/bases/camel.apache.org_kamelets.yaml b/pkg/resources/config/crd/bases/camel.apache.org_kamelets.yaml index 04dd819206..2de134a6f8 100644 --- a/pkg/resources/config/crd/bases/camel.apache.org_kamelets.yaml +++ b/pkg/resources/config/crd/bases/camel.apache.org_kamelets.yaml @@ -1256,21 +1256,14 @@ spec: conditions: description: Conditions -- items: - description: KameletCondition describes the state of a resource - at a certain point. + description: Condition contains details for one aspect of the current state of a resource. properties: lastTransitionTime: - description: Last time the condition transitioned from one status - to another. - format: date-time - type: string - lastUpdateTime: - description: The last time this condition was updated. + description: Last time the condition transitioned from one status to another. format: date-time type: string message: - description: A human-readable message indicating details about - the transition. + description: A human-readable message indicating details about the transition. type: string reason: description: The reason for the condition's last transition. @@ -1279,13 +1272,18 @@ spec: description: Status of the condition, one of True, False, Unknown. type: string type: - description: Type of kamelet condition. + description: Type of condition. type: string required: + - lastTransitionTime + - message + - reason - status - type - type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map observedGeneration: description: ObservedGeneration is the most recent generation observed for this Kamelet. diff --git a/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml b/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml index e3758a6745..58cdfcf385 100644 --- a/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml +++ b/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml @@ -11653,92 +11653,15 @@ spec: conditions: description: Conditions -- items: - description: PipeCondition describes the state of a resource at - a certain point. + description: Condition contains details for one aspect of the current state of a resource. properties: lastTransitionTime: - description: Last time the condition transitioned from one status - to another. - format: date-time - type: string - lastUpdateTime: - description: The last time this condition was updated. + description: Last time the condition transitioned from one status to another. format: date-time type: string message: - description: A human readable message indicating details about - the transition. + description: A human-readable message indicating details about the transition. type: string - pods: - description: |- - DeprecatedPods collect health and conditions information from the owned PODs - - Deprecated: may be removed in future releases. - items: - description: 'Deprecated: may be removed in future releases.' - properties: - condition: - description: PodCondition contains details for the current - condition of this pod. - properties: - lastProbeTime: - description: Last time we probed the condition. - format: date-time - type: string - lastTransitionTime: - description: Last time the condition transitioned - from one status to another. - format: date-time - type: string - message: - description: Human-readable message indicating details - about last transition. - type: string - observedGeneration: - description: If set, this represents the .metadata.generation - that the pod condition was set based upon. - format: int64 - type: integer - reason: - description: Unique, one-word, CamelCase reason for - the condition's last transition. - type: string - status: - description: |- - Status is the status of the condition. - Can be True, False, Unknown. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions - type: string - type: - description: |- - Type is the type of the condition. - More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions - type: string - required: - - status - - type - type: object - health: - items: - properties: - data: - description: |- - RawMessage is a raw encoded JSON value. - It implements Marshaler and Unmarshaler and can - be used to delay JSON decoding or precompute a JSON encoding. - x-kubernetes-preserve-unknown-fields: true - name: - type: string - status: - type: string - type: object - type: array - name: - type: string - required: - - condition - type: object - type: array reason: description: The reason for the condition's last transition. type: string @@ -11746,13 +11669,18 @@ spec: description: Status of the condition, one of True, False, Unknown. type: string type: - description: Type of pipe condition. + description: Type of condition. type: string required: + - lastTransitionTime + - message + - reason - status - type - type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map observedGeneration: description: ObservedGeneration is the most recent generation observed for this Pipe. @@ -11761,6 +11689,76 @@ spec: phase: description: Phase -- type: string + pods: + description: |- + DeprecatedPods collect health and conditions information from the owned PODs + + Deprecated: may be removed in future releases. + items: + description: 'Deprecated: may be removed in future releases.' + properties: + condition: + description: PodCondition contains details for the current + condition of this pod. + properties: + lastProbeTime: + description: Last time we probed the condition. + format: date-time + type: string + lastTransitionTime: + description: Last time the condition transitioned + from one status to another. + format: date-time + type: string + message: + description: Human-readable message indicating details + about last transition. + type: string + observedGeneration: + description: If set, this represents the .metadata.generation + that the pod condition was set based upon. + format: int64 + type: integer + reason: + description: Unique, one-word, CamelCase reason for + the condition's last transition. + type: string + status: + description: |- + Status is the status of the condition. + Can be True, False, Unknown. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions + type: string + type: + description: |- + Type is the type of the condition. + More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions + type: string + required: + - status + - type + type: object + health: + items: + properties: + data: + description: |- + RawMessage is a raw encoded JSON value. + It implements Marshaler and Unmarshaler and can + be used to delay JSON decoding or precompute a JSON encoding. + x-kubernetes-preserve-unknown-fields: true + name: + type: string + status: + type: string + type: object + type: array + name: + type: string + required: + - condition + type: object + type: array replicas: description: Replicas is the number of actual replicas of the pipe format: int32 diff --git a/pkg/trait/builder_test.go b/pkg/trait/builder_test.go index 71c02cd77b..5109542ca2 100644 --- a/pkg/trait/builder_test.go +++ b/pkg/trait/builder_test.go @@ -199,8 +199,8 @@ func TestCustomTaskBuilderTraitInvalidStrategy(t *testing.T) { // The error will be reported to IntegrationKits require.NoError(t, err) assert.Equal(t, v1.IntegrationKitPhaseError, env.IntegrationKit.Status.Phase) - assert.Equal(t, corev1.ConditionFalse, env.IntegrationKit.Status.Conditions[0].Status) - assert.Equal(t, env.IntegrationKit.Status.Conditions[0].Type, v1.IntegrationKitConditionType("IntegrationKitTasksValid")) + assert.Equal(t, metav1.ConditionFalse, env.IntegrationKit.Status.Conditions[0].Status) + assert.Equal(t, string(v1.IntegrationKitConditionType("IntegrationKitTasksValid")), env.IntegrationKit.Status.Conditions[0].Type) require.NotNil(t, env.IntegrationKit.Status.Failure) assert.Equal(t, "Pipeline tasks unavailable when using `routine` platform build strategy: use `pod` instead.", env.IntegrationKit.Status.Failure.Reason) } @@ -217,8 +217,8 @@ func TestCustomTaskBuilderTraitInvalidStrategyOverride(t *testing.T) { // The error will be reported to IntegrationKits require.NoError(t, err) assert.Equal(t, v1.IntegrationKitPhaseError, env.IntegrationKit.Status.Phase) - assert.Equal(t, corev1.ConditionFalse, env.IntegrationKit.Status.Conditions[0].Status) - assert.Equal(t, env.IntegrationKit.Status.Conditions[0].Type, v1.IntegrationKitConditionType("IntegrationKitTasksValid")) + assert.Equal(t, metav1.ConditionFalse, env.IntegrationKit.Status.Conditions[0].Status) + assert.Equal(t, string(v1.IntegrationKitConditionType("IntegrationKitTasksValid")), env.IntegrationKit.Status.Conditions[0].Type) require.NotNil(t, env.IntegrationKit.Status.Failure) assert.Equal(t, "Pipeline tasks unavailable when using `routine` platform build strategy: use `pod` instead.", env.IntegrationKit.Status.Failure.Reason) } diff --git a/pkg/trait/deployment.go b/pkg/trait/deployment.go index c4920f7639..3c9a8efcb4 100644 --- a/pkg/trait/deployment.go +++ b/pkg/trait/deployment.go @@ -60,7 +60,7 @@ func (t *deploymentTrait) Configure(e *Environment) (bool, *TraitCondition, erro if e.IntegrationInPhase(v1.IntegrationPhaseRunning, v1.IntegrationPhaseError) { condition := e.Integration.Status.GetCondition(v1.IntegrationConditionDeploymentAvailable) - return condition != nil && condition.Status == corev1.ConditionTrue, nil, nil + return condition != nil && condition.Status == metav1.ConditionTrue, nil, nil } // Don't deploy when a different strategy is needed (e.g. Knative, Cron) diff --git a/pkg/trait/deployment_test.go b/pkg/trait/deployment_test.go index cb05deb439..ccaf24b1a4 100644 --- a/pkg/trait/deployment_test.go +++ b/pkg/trait/deployment_test.go @@ -101,7 +101,7 @@ func TestApplyDeploymentTraitWhileDeployingIntegrationDoesSucceed(t *testing.T) conditions := environment.Integration.Status.Conditions assert.Len(t, conditions, 1) - assert.Equal(t, v1.IntegrationConditionDeploymentAvailable, conditions[0].Type) + assert.Equal(t, string(v1.IntegrationConditionDeploymentAvailable), conditions[0].Type) assert.Equal(t, "deployment name is integration-name", conditions[0].Message) } diff --git a/pkg/trait/gateway_test.go b/pkg/trait/gateway_test.go index 50da8dfc7c..6380b8644b 100644 --- a/pkg/trait/gateway_test.go +++ b/pkg/trait/gateway_test.go @@ -90,7 +90,7 @@ func TestConfigureGatewayTraitDoesSucceed(t *testing.T) { // Verify Integration condition as well assert.NotNil(t, environment.Integration.Status.GetCondition(v1.IntegrationConditionExposureAvailable)) - assert.Equal(t, corev1.ConditionTrue, environment.Integration.Status.GetCondition(v1.IntegrationConditionExposureAvailable).Status) + assert.Equal(t, metav1.ConditionTrue, environment.Integration.Status.GetCondition(v1.IntegrationConditionExposureAvailable).Status) assert.Equal(t, "Service is exposed via a Gateway and HTTPRoute named integration-name", environment.Integration.Status.GetCondition(v1.IntegrationConditionExposureAvailable).Message) } diff --git a/pkg/trait/kamelets_test.go b/pkg/trait/kamelets_test.go index 9c0944b4c9..3e64e55436 100644 --- a/pkg/trait/kamelets_test.go +++ b/pkg/trait/kamelets_test.go @@ -503,7 +503,7 @@ func TestKameletConditionFalse(t *testing.T) { assert.Len(t, environment.Integration.Status.Conditions, 1) cond := environment.Integration.Status.GetCondition(v1.IntegrationConditionKameletsAvailable) - assert.Equal(t, corev1.ConditionUnknown, cond.Status) + assert.Equal(t, metav1.ConditionUnknown, cond.Status) assert.Equal(t, v1.IntegrationConditionKameletsAvailableReason, cond.Reason) assert.Contains(t, cond.Message, "Kamelets [none] not found") } @@ -558,7 +558,7 @@ func TestKameletConditionTrue(t *testing.T) { assert.Len(t, environment.Integration.Status.Conditions, 1) cond := environment.Integration.Status.GetCondition(v1.IntegrationConditionKameletsAvailable) - assert.Equal(t, corev1.ConditionTrue, cond.Status) + assert.Equal(t, metav1.ConditionTrue, cond.Status) assert.Equal(t, v1.IntegrationConditionKameletsAvailableReason, cond.Reason) assert.Contains(t, cond.Message, "[none,timer] found") @@ -649,7 +649,7 @@ func TestKameletSyntheticKitConditionTrue(t *testing.T) { cond := environment.Integration.Status.GetCondition(v1.IntegrationConditionKameletsAvailable) assert.NotNil(t, cond) - assert.Equal(t, corev1.ConditionTrue, cond.Status) + assert.Equal(t, metav1.ConditionTrue, cond.Status) assert.Equal(t, v1.IntegrationConditionKameletsAvailableReason, cond.Reason) assert.Contains(t, cond.Message, "[timer-source] found") @@ -843,7 +843,7 @@ func TestKameletMultiNamespace(t *testing.T) { require.NoError(t, err) assert.Equal(t, "extra?kameletNamespace=ns1,timer", trait.List) assert.Equal(t, - corev1.ConditionTrue, + metav1.ConditionTrue, environment.Integration.Status.GetCondition(v1.IntegrationConditionKameletsAvailable).Status) assert.Contains(t, environment.Integration.Status.GetCondition(v1.IntegrationConditionKameletsAvailable).Message, @@ -902,7 +902,7 @@ func TestKameletMultiNamespaceMissing(t *testing.T) { err = trait.Apply(environment) require.NoError(t, err) assert.Equal(t, - corev1.ConditionUnknown, + metav1.ConditionUnknown, environment.Integration.Status.GetCondition(v1.IntegrationConditionKameletsAvailable).Status) assert.Contains(t, environment.Integration.Status.GetCondition(v1.IntegrationConditionKameletsAvailable).Message, diff --git a/pkg/trait/knative_service.go b/pkg/trait/knative_service.go index 666bdcd7a8..972759f2f9 100644 --- a/pkg/trait/knative_service.go +++ b/pkg/trait/knative_service.go @@ -111,7 +111,7 @@ func (t *knativeServiceTrait) Configure(e *Environment) (bool, *TraitCondition, t.Enabled = new(true) } else if e.IntegrationInPhase(v1.IntegrationPhaseRunning, v1.IntegrationPhaseError) { condition := e.Integration.Status.GetCondition(v1.IntegrationConditionKnativeServiceAvailable) - t.Enabled = new(condition != nil && condition.Status == corev1.ConditionTrue) + t.Enabled = new(condition != nil && condition.Status == metav1.ConditionTrue) } return ptr.Deref(t.Enabled, false), nil, nil diff --git a/pkg/trait/prometheus.go b/pkg/trait/prometheus.go index 5ae98deaf7..162623fe6f 100644 --- a/pkg/trait/prometheus.go +++ b/pkg/trait/prometheus.go @@ -95,9 +95,9 @@ func (t *prometheusTrait) Apply(e *Environment) error { return nil } - condition := v1.IntegrationCondition{ - Type: v1.IntegrationConditionPrometheusAvailable, - Status: corev1.ConditionTrue, + condition := metav1.Condition{ + Type: string(v1.IntegrationConditionPrometheusAvailable), + Status: metav1.ConditionTrue, Reason: v1.IntegrationConditionPrometheusAvailableReason, } diff --git a/pkg/trait/prometheus_test.go b/pkg/trait/prometheus_test.go index 234c357db4..553ab30a7e 100644 --- a/pkg/trait/prometheus_test.go +++ b/pkg/trait/prometheus_test.go @@ -78,8 +78,8 @@ func TestApplyNominalPrometheusTraitDoesSucceed(t *testing.T) { assert.Len(t, environment.Integration.Status.Conditions, 1) condition := environment.Integration.Status.Conditions[0] - assert.Equal(t, v1.IntegrationConditionPrometheusAvailable, condition.Type) - assert.Equal(t, corev1.ConditionTrue, condition.Status) + assert.Equal(t, string(v1.IntegrationConditionPrometheusAvailable), condition.Type) + assert.Equal(t, metav1.ConditionTrue, condition.Status) } func TestApplyPrometheusTraitWithoutContainerDoesNotSucceed(t *testing.T) { @@ -93,8 +93,8 @@ func TestApplyPrometheusTraitWithoutContainerDoesNotSucceed(t *testing.T) { assert.Len(t, environment.Integration.Status.Conditions, 1) condition := environment.Integration.Status.Conditions[0] - assert.Equal(t, v1.IntegrationConditionPrometheusAvailable, condition.Type) - assert.Equal(t, corev1.ConditionFalse, condition.Status) + assert.Equal(t, string(v1.IntegrationConditionPrometheusAvailable), condition.Type) + assert.Equal(t, metav1.ConditionFalse, condition.Status) } func TestPrometheusTraitGetPodMonitor(t *testing.T) { diff --git a/pkg/trait/security_context.go b/pkg/trait/security_context.go index 7b6f8d351c..d959b6e4a6 100644 --- a/pkg/trait/security_context.go +++ b/pkg/trait/security_context.go @@ -21,6 +21,7 @@ import ( "fmt" corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" traitv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1/trait" @@ -62,7 +63,7 @@ func (t *securityContextTrait) Configure(e *Environment) (bool, *TraitCondition, // https://knative.dev/docs/serving/configuration/feature-flags/#kubernetes-security-context // The user should instead use container security context. condition := e.Integration.Status.GetCondition(v1.IntegrationConditionKnativeServiceAvailable) - if condition != nil && condition.Status == corev1.ConditionTrue { + if condition != nil && condition.Status == metav1.ConditionTrue { return false, NewIntegrationConditionPlatformDisabledWithMessage( "SecurityContext", "pod security context is disabled for Knative Service. "+ diff --git a/pkg/trait/trait_catalog_test.go b/pkg/trait/trait_catalog_test.go index ec3d89f231..74bfed2efe 100644 --- a/pkg/trait/trait_catalog_test.go +++ b/pkg/trait/trait_catalog_test.go @@ -23,7 +23,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" @@ -56,10 +55,10 @@ func TestIntegrationExecutedTrait(t *testing.T) { }, Status: v1.IntegrationStatus{ Phase: v1.IntegrationPhaseRunning, - Conditions: []v1.IntegrationCondition{ + Conditions: []metav1.Condition{ { - Type: v1.IntegrationConditionDeploymentAvailable, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionDeploymentAvailable), + Status: metav1.ConditionTrue, }, }, }, diff --git a/pkg/trait/trait_test.go b/pkg/trait/trait_test.go index 67605e3816..1db6f953d5 100644 --- a/pkg/trait/trait_test.go +++ b/pkg/trait/trait_test.go @@ -293,10 +293,10 @@ func testDefaultIntegrationPhaseTraitsSetting(t *testing.T, phase v1.Integration }, Status: v1.IntegrationStatus{ Phase: phase, - Conditions: []v1.IntegrationCondition{ + Conditions: []metav1.Condition{ { - Type: v1.IntegrationConditionDeploymentAvailable, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionDeploymentAvailable), + Status: metav1.ConditionTrue, }, }, }, @@ -366,10 +366,10 @@ func TestAutoInferredServiceTraitsDoNotLeakIntoStatus(t *testing.T) { }, Status: v1.IntegrationStatus{ Phase: v1.IntegrationPhaseRunning, - Conditions: []v1.IntegrationCondition{ + Conditions: []metav1.Condition{ { - Type: v1.IntegrationConditionDeploymentAvailable, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionDeploymentAvailable), + Status: metav1.ConditionTrue, }, }, }, @@ -416,10 +416,10 @@ func TestUserSpecifiedTraitValuesStillAppearInStatus(t *testing.T) { }, Status: v1.IntegrationStatus{ Phase: v1.IntegrationPhaseRunning, - Conditions: []v1.IntegrationCondition{ + Conditions: []metav1.Condition{ { - Type: v1.IntegrationConditionDeploymentAvailable, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionDeploymentAvailable), + Status: metav1.ConditionTrue, }, }, }, @@ -479,10 +479,10 @@ func TestIntegrationTraitsSetting(t *testing.T) { }, Status: v1.IntegrationStatus{ Phase: v1.IntegrationPhaseRunning, - Conditions: []v1.IntegrationCondition{ + Conditions: []metav1.Condition{ { - Type: v1.IntegrationConditionDeploymentAvailable, - Status: corev1.ConditionTrue, + Type: string(v1.IntegrationConditionDeploymentAvailable), + Status: metav1.ConditionTrue, }, }, },