Skip to content

Commit 3960afa

Browse files
refactor: report actual observed status in CRD status field currentStatus and add defaultStatus field in CRD status
Signed-off-by: Anurag Pathak <contact@anuragthepathak.com>
1 parent 0baafad commit 3960afa

3 files changed

Lines changed: 34 additions & 4 deletions

File tree

api/v1alpha1/nodereadinessrule_types.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,14 @@ type ConditionEvaluationResult struct {
267267
// +required
268268
// +kubebuilder:validation:Enum=True;False;Unknown
269269
RequiredStatus corev1.ConditionStatus `json:"requiredStatus,omitempty"`
270+
271+
// defaultStatus is the status a condition is evaluated to if the condition
272+
// is not found in a node. Reflects the defaultStatus configured in the rule
273+
// spec.
274+
//
275+
// +optional
276+
// +kubebuilder:validation:Enum=True;False;Unknown
277+
DefaultStatus corev1.ConditionStatus `json:"defaultStatus,omitempty"`
270278
}
271279

272280
// DryRunResults provides a summary of the actions the controller would perform if DryRun mode is enabled.

config/crd/bases/readiness.node.x-k8s.io_nodereadinessrules.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,16 @@ spec:
377377
- "False"
378378
- Unknown
379379
type: string
380+
defaultStatus:
381+
description: |-
382+
defaultStatus is the status a condition is evaluated to if the condition
383+
is not found in a node. Reflects the defaultStatus configured in the rule
384+
spec.
385+
enum:
386+
- "True"
387+
- "False"
388+
- Unknown
389+
type: string
380390
requiredStatus:
381391
description: requiredStatus is the status value defined
382392
in the rule that must be matched, one of True, False,

internal/controller/nodereadinessrule_controller.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -298,21 +298,33 @@ func (r *RuleReadinessController) evaluateRuleForNode(ctx context.Context, rule
298298
conditionResults := make([]readinessv1alpha1.ConditionEvaluationResult, 0, len(rule.Spec.Conditions))
299299

300300
for _, condReq := range rule.Spec.Conditions {
301-
currentStatus, _ := r.getConditionStatus(node, condReq.Type, condReq.GetDefaultStatus())
302-
satisfied := currentStatus == condReq.RequiredStatus
301+
effectiveStatus, conditionFound := r.getConditionStatus(
302+
node,
303+
condReq.Type,
304+
condReq.GetDefaultStatus(),
305+
)
306+
satisfied := effectiveStatus == condReq.RequiredStatus
307+
308+
// observedStatus is the condition status of a node without applying the default
309+
// fallback in case the condition is not found.
310+
observedStatus := effectiveStatus
311+
if !conditionFound {
312+
observedStatus = corev1.ConditionUnknown
313+
}
303314

304315
if !satisfied {
305316
allConditionsSatisfied = false
306317
}
307318

308319
conditionResults = append(conditionResults, readinessv1alpha1.ConditionEvaluationResult{
309320
Type: condReq.Type,
310-
CurrentStatus: currentStatus,
321+
CurrentStatus: observedStatus,
311322
RequiredStatus: condReq.RequiredStatus,
323+
DefaultStatus: condReq.GetDefaultStatus(),
312324
})
313325

314326
log.V(1).Info("Condition evaluation", "node", node.Name, "rule", rule.Name,
315-
"conditionType", condReq.Type, "current", currentStatus, "required", condReq.RequiredStatus,
327+
"conditionType", condReq.Type, "current", observedStatus, "required", condReq.RequiredStatus,
316328
"satisfied", satisfied)
317329
}
318330

0 commit comments

Comments
 (0)