internal/utils/controller/requirement_helper.go (47 lines of code) (raw):

package controller import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/Azure/operation-cache-controller/api/v1alpha1" ) type RequirementHelper struct{} func NewRequirementHelper() RequirementHelper { return RequirementHelper{} } func (rh RequirementHelper) ClearConditions(r *v1alpha1.Requirement) { if r.Status.Conditions == nil { r.Status.Conditions = []metav1.Condition{} } } func (rh RequirementHelper) getCondition(r *v1alpha1.Requirement, conditionType string) (int, *metav1.Condition) { for i, condition := range r.Status.Conditions { if condition.Type == conditionType { return i, &condition } } return -1, nil } func (rh RequirementHelper) IsCacheMissed(r *v1alpha1.Requirement) bool { _, condition := rh.getCondition(r, v1alpha1.RequirementConditionCachedOperationAcquired) return condition == nil || condition.Status == metav1.ConditionFalse } func (rh RequirementHelper) UpdateCondition(r *v1alpha1.Requirement, conditionType string, conditionStatus metav1.ConditionStatus, reason, message string) bool { condition := &metav1.Condition{ Type: conditionType, Status: conditionStatus, LastTransitionTime: metav1.Now(), Reason: reason, Message: message, } // Try to find this pod condition. idx, oldCondition := rh.getCondition(r, condition.Type) if oldCondition == nil { // We are adding new pod condition. r.Status.Conditions = append(r.Status.Conditions, *condition) return true } // We are updating an existing condition, so we need to check if it has changed. if condition.Status == oldCondition.Status { condition.LastTransitionTime = oldCondition.LastTransitionTime } isEqual := condition.Status == oldCondition.Status && condition.Reason == oldCondition.Reason && condition.Message == oldCondition.Message && condition.LastTransitionTime.Equal(&oldCondition.LastTransitionTime) r.Status.Conditions[idx] = *condition // Return true if one of the fields have changed. return !isEqual }