in pkg/controllers/work/apply_controller.go [805:887]
func buildManifestCondition(err error, action ApplyAction, observedGeneration int64) []metav1.Condition {
applyCondition := metav1.Condition{
Type: fleetv1beta1.WorkConditionTypeApplied,
LastTransitionTime: metav1.Now(),
ObservedGeneration: observedGeneration,
}
availableCondition := metav1.Condition{
Type: fleetv1beta1.WorkConditionTypeAvailable,
LastTransitionTime: metav1.Now(),
ObservedGeneration: observedGeneration,
}
if err != nil {
applyCondition.Status = metav1.ConditionFalse
switch action {
case applyConflictBetweenPlacements:
applyCondition.Reason = ApplyConflictBetweenPlacementsReason
case manifestAlreadyOwnedByOthers:
applyCondition.Reason = ManifestsAlreadyOwnedByOthersReason
default:
applyCondition.Reason = ManifestApplyFailedReason
}
// TODO: handle the max length (32768) of the message field
applyCondition.Message = fmt.Sprintf("Failed to apply manifest: %v", err)
availableCondition.Status = metav1.ConditionUnknown
availableCondition.Reason = ManifestApplyFailedReason
availableCondition.Message = "Manifest is not applied yet"
} else {
applyCondition.Status = metav1.ConditionTrue
// the first three actions types means we did write to the cluster thus the availability is unknown
// the last three actions types means we start to track the resources
switch action {
case manifestCreatedAction:
applyCondition.Reason = string(manifestCreatedAction)
applyCondition.Message = "Manifest is created successfully"
availableCondition.Status = metav1.ConditionUnknown
availableCondition.Reason = ManifestNeedsUpdateReason
availableCondition.Message = manifestNeedsUpdateMessage
case manifestThreeWayMergePatchAction:
applyCondition.Reason = string(manifestThreeWayMergePatchAction)
applyCondition.Message = "Manifest is patched successfully"
availableCondition.Status = metav1.ConditionUnknown
availableCondition.Reason = ManifestNeedsUpdateReason
availableCondition.Message = manifestNeedsUpdateMessage
case manifestServerSideAppliedAction:
applyCondition.Reason = string(manifestServerSideAppliedAction)
applyCondition.Message = "Manifest is patched successfully"
availableCondition.Status = metav1.ConditionUnknown
availableCondition.Reason = ManifestNeedsUpdateReason
availableCondition.Message = manifestNeedsUpdateMessage
case manifestAvailableAction:
applyCondition.Reason = ManifestAlreadyUpToDateReason
applyCondition.Message = manifestAlreadyUpToDateMessage
availableCondition.Status = metav1.ConditionTrue
availableCondition.Reason = string(manifestAvailableAction)
availableCondition.Message = "Manifest is trackable and available now"
case manifestNotAvailableYetAction:
applyCondition.Reason = ManifestAlreadyUpToDateReason
applyCondition.Message = manifestAlreadyUpToDateMessage
availableCondition.Status = metav1.ConditionFalse
availableCondition.Reason = string(manifestNotAvailableYetAction)
availableCondition.Message = "Manifest is trackable but not available yet"
// we cannot stuck at unknown so we have to mark it as true
case manifestNotTrackableAction:
applyCondition.Reason = ManifestAlreadyUpToDateReason
applyCondition.Message = manifestAlreadyUpToDateMessage
availableCondition.Status = metav1.ConditionTrue
availableCondition.Reason = string(manifestNotTrackableAction)
availableCondition.Message = "Manifest is not trackable"
default:
klog.ErrorS(controller.ErrUnexpectedBehavior, "Unknown apply action result", "applyResult", action)
}
}
return []metav1.Condition{applyCondition, availableCondition}
}