Skip to content

Commit

Permalink
Add NodePool Provisioning Status Condition Constants (#178)
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
tliu2021 authored Aug 21, 2024
1 parent 92e44a0 commit 0927fdd
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 43 deletions.
19 changes: 19 additions & 0 deletions api/hardwaremanagement/v1alpha1/conditions.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)
4 changes: 2 additions & 2 deletions api/hardwaremanagement/v1alpha1/node_pools.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
53 changes: 15 additions & 38 deletions internal/controllers/clusterrequest_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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 {
Expand All @@ -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 {
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 0927fdd

Please sign in to comment.