func buildManifestCondition()

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