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, }, }, },