From 2addec3cb42950f62e79ccc58107e3517eaf2ad1 Mon Sep 17 00:00:00 2001 From: Tao Liu Date: Tue, 20 Aug 2024 14:28:44 -0400 Subject: [PATCH] Add NodePool Provisioning Status Condition Constants Use a single condition type for tracking the NodePool provisioning status, with various condition reasons to represent different states in the provisioning process. This simplifies the condition handling by focusing on one type with multiple reasons for clarity and consistency. Signed-off-by: Tao Liu --- api/hardwaremanagement/v1alpha1/conditions.go | 19 +++++++ api/hardwaremanagement/v1alpha1/node_pools.go | 4 +- ...anagement.oran.openshift.io_nodepools.yaml | 2 +- .../controllers/clusterrequest_controller.go | 53 ++++++------------- .../hardwaremanagement/v1alpha1/conditions.go | 19 +++++++ .../hardwaremanagement/v1alpha1/node_pools.go | 4 +- 6 files changed, 58 insertions(+), 43 deletions(-) diff --git a/api/hardwaremanagement/v1alpha1/conditions.go b/api/hardwaremanagement/v1alpha1/conditions.go index 4377b36f..d6a371e6 100644 --- a/api/hardwaremanagement/v1alpha1/conditions.go +++ b/api/hardwaremanagement/v1alpha1/conditions.go @@ -23,3 +23,22 @@ const ( // fulfilled. FailedCondition = "Failed" ) + +type ConditionType string + +// The following constants define the different types of conditions that will be set +const ( + Provisioned ConditionType = "Provisioned" + Unknown ConditionType = "Unknown" // indicates the condition has not been evaluated +) + +type ConditionReason string + +// The following constants define the different reasons that conditions will be set for +const ( + InProgress ConditionReason = "InProgress" + Completed ConditionReason = "Completed" + Unprovisioned ConditionReason = "Unprovisioned" + Failed ConditionReason = "Failed" + NotInitialized ConditionReason = "NotInitialized" +) diff --git a/api/hardwaremanagement/v1alpha1/node_pools.go b/api/hardwaremanagement/v1alpha1/node_pools.go index 6c2850cd..80a2fc7a 100644 --- a/api/hardwaremanagement/v1alpha1/node_pools.go +++ b/api/hardwaremanagement/v1alpha1/node_pools.go @@ -55,8 +55,8 @@ type NodePoolStatus struct { Properties Properties `json:"properties,omitempty"` // Conditions represent the observations of the current state of the NodePool. Possible - // values of the condition type are `Provisioned`, `Unprovisioned`, `Updating` and `Failed`. - Conditions []metav1.Condition `json:"conditions,omitempty"` + // values of the condition type are `Provisioned` and `Unknown`. + Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"` } // NodePool is the schema for an allocation request of nodes diff --git a/config/crd/bases/hardwaremanagement.oran.openshift.io_nodepools.yaml b/config/crd/bases/hardwaremanagement.oran.openshift.io_nodepools.yaml index 1c087999..ff00c50b 100644 --- a/config/crd/bases/hardwaremanagement.oran.openshift.io_nodepools.yaml +++ b/config/crd/bases/hardwaremanagement.oran.openshift.io_nodepools.yaml @@ -79,7 +79,7 @@ spec: conditions: description: |- Conditions represent the observations of the current state of the NodePool. Possible - values of the condition type are `Provisioned`, `Unprovisioned`, `Updating` and `Failed`. + values of the condition type are `Provisioned` and `Unknown`. items: description: "Condition contains details for one aspect of the current state of this API Resource.\n---\nThis struct is intended for diff --git a/internal/controllers/clusterrequest_controller.go b/internal/controllers/clusterrequest_controller.go index 371597d2..2f0ac72d 100644 --- a/internal/controllers/clusterrequest_controller.go +++ b/internal/controllers/clusterrequest_controller.go @@ -764,7 +764,7 @@ func (t *clusterRequestReconcilerTask) updateClusterInstanceProcessedStatus(ci * func (t *clusterRequestReconcilerTask) updateClusterProvisionStatus(ci *siteconfig.ClusterInstance) { // Search for ClusterInstance Provisioned condition ciProvisionedCondition := meta.FindStatusCondition( - ci.Status.Conditions, "Provisioned") + ci.Status.Conditions, string(hwv1alpha1.Provisioned)) if ciProvisionedCondition == nil { crClusterInstanceProcessedCond := meta.FindStatusCondition( @@ -1335,7 +1335,7 @@ func (t *clusterRequestReconcilerTask) waitForNodePoolProvision(ctx context.Cont ) } // Check if provisioning is completed - provisionedCondition := meta.FindStatusCondition(nodePool.Status.Conditions, "Provisioned") + provisionedCondition := meta.FindStatusCondition(nodePool.Status.Conditions, string(hwv1alpha1.Provisioned)) if provisionedCondition != nil && provisionedCondition.Status == metav1.ConditionTrue { t.logger.InfoContext( ctx, @@ -1553,43 +1553,20 @@ func (t *clusterRequestReconcilerTask) updateHardwareProvisioningStatus( if len(nodePool.Status.Conditions) > 0 { provisionedCondition := meta.FindStatusCondition( - nodePool.Status.Conditions, "Provisioned") - if provisionedCondition != nil && provisionedCondition.Status == metav1.ConditionTrue { + nodePool.Status.Conditions, string(hwv1alpha1.Provisioned)) + if provisionedCondition != nil { utils.SetStatusCondition(&t.object.Status.Conditions, utils.CRconditionTypes.HardwareProvisioned, - utils.CRconditionReasons.Completed, - metav1.ConditionTrue, - "Hareware provisioning completed", - ) + utils.ConditionReason(provisionedCondition.Reason), + provisionedCondition.Status, + provisionedCondition.Message) } else { - provisioningCondition := meta.FindStatusCondition( - nodePool.Status.Conditions, "Provisioning") - if provisioningCondition != nil && provisioningCondition.Status == metav1.ConditionTrue { - utils.SetStatusCondition(&t.object.Status.Conditions, - utils.CRconditionTypes.HardwareProvisioned, - utils.CRconditionReasons.InProgress, - metav1.ConditionFalse, - "Hareware provisioning is in progress", - ) - } else { - failedCondition := meta.FindStatusCondition( - nodePool.Status.Conditions, "Failed") - if failedCondition != nil && failedCondition.Status == metav1.ConditionTrue { - utils.SetStatusCondition(&t.object.Status.Conditions, - utils.CRconditionTypes.HardwareProvisioned, - utils.CRconditionReasons.Failed, - metav1.ConditionFalse, - "Hareware provisioning failed", - ) - } else { - utils.SetStatusCondition(&t.object.Status.Conditions, - utils.CRconditionTypes.HardwareProvisioned, - utils.CRconditionReasons.Unknown, - metav1.ConditionUnknown, - "Unknown state of hardware provisioning", - ) - } - } + utils.SetStatusCondition(&t.object.Status.Conditions, + utils.CRconditionTypes.HardwareProvisioned, + utils.CRconditionReasons.Unknown, + metav1.ConditionUnknown, + "Unknown state of hardware provisioning", + ) } if err := utils.UpdateK8sCRStatus(ctx, t.client, t.object); err != nil { @@ -1605,9 +1582,9 @@ func (t *clusterRequestReconcilerTask) updateHardwareProvisioningStatus( meta.SetStatusCondition( &nodePool.Status.Conditions, metav1.Condition{ - Type: "Unknown", + Type: string(hwv1alpha1.Unknown), Status: metav1.ConditionUnknown, - Reason: "NotInitialized", + Reason: string(hwv1alpha1.NotInitialized), }, ) if err := utils.UpdateK8sCRStatus(ctx, t.client, nodePool); err != nil { diff --git a/vendor/github.com/openshift-kni/oran-o2ims/api/hardwaremanagement/v1alpha1/conditions.go b/vendor/github.com/openshift-kni/oran-o2ims/api/hardwaremanagement/v1alpha1/conditions.go index 4377b36f..d6a371e6 100644 --- a/vendor/github.com/openshift-kni/oran-o2ims/api/hardwaremanagement/v1alpha1/conditions.go +++ b/vendor/github.com/openshift-kni/oran-o2ims/api/hardwaremanagement/v1alpha1/conditions.go @@ -23,3 +23,22 @@ const ( // fulfilled. FailedCondition = "Failed" ) + +type ConditionType string + +// The following constants define the different types of conditions that will be set +const ( + Provisioned ConditionType = "Provisioned" + Unknown ConditionType = "Unknown" // indicates the condition has not been evaluated +) + +type ConditionReason string + +// The following constants define the different reasons that conditions will be set for +const ( + InProgress ConditionReason = "InProgress" + Completed ConditionReason = "Completed" + Unprovisioned ConditionReason = "Unprovisioned" + Failed ConditionReason = "Failed" + NotInitialized ConditionReason = "NotInitialized" +) diff --git a/vendor/github.com/openshift-kni/oran-o2ims/api/hardwaremanagement/v1alpha1/node_pools.go b/vendor/github.com/openshift-kni/oran-o2ims/api/hardwaremanagement/v1alpha1/node_pools.go index 6c2850cd..80a2fc7a 100644 --- a/vendor/github.com/openshift-kni/oran-o2ims/api/hardwaremanagement/v1alpha1/node_pools.go +++ b/vendor/github.com/openshift-kni/oran-o2ims/api/hardwaremanagement/v1alpha1/node_pools.go @@ -55,8 +55,8 @@ type NodePoolStatus struct { Properties Properties `json:"properties,omitempty"` // Conditions represent the observations of the current state of the NodePool. Possible - // values of the condition type are `Provisioned`, `Unprovisioned`, `Updating` and `Failed`. - Conditions []metav1.Condition `json:"conditions,omitempty"` + // values of the condition type are `Provisioned` and `Unknown`. + Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"` } // NodePool is the schema for an allocation request of nodes