mirror of
https://github.com/kubevirt/containerized-data-importer.git
synced 2025-06-03 06:30:22 +00:00
83 lines
2.8 KiB
Go
83 lines
2.8 KiB
Go
package v1
|
|
|
|
import (
|
|
"time"
|
|
|
|
corev1 "k8s.io/api/core/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
)
|
|
|
|
// SetStatusCondition sets the corresponding condition in conditions to newCondition.
|
|
func SetStatusCondition(conditions *[]Condition, newCondition Condition) {
|
|
if conditions == nil {
|
|
conditions = &[]Condition{}
|
|
}
|
|
existingCondition := FindStatusCondition(*conditions, newCondition.Type)
|
|
if existingCondition == nil {
|
|
newCondition.LastTransitionTime = metav1.NewTime(time.Now())
|
|
newCondition.LastHeartbeatTime = metav1.NewTime(time.Now())
|
|
*conditions = append(*conditions, newCondition)
|
|
return
|
|
}
|
|
|
|
if existingCondition.Status != newCondition.Status {
|
|
existingCondition.Status = newCondition.Status
|
|
existingCondition.LastTransitionTime = metav1.NewTime(time.Now())
|
|
}
|
|
|
|
existingCondition.Reason = newCondition.Reason
|
|
existingCondition.Message = newCondition.Message
|
|
existingCondition.LastHeartbeatTime = metav1.NewTime(time.Now())
|
|
}
|
|
|
|
// RemoveStatusCondition removes the corresponding conditionType from conditions.
|
|
func RemoveStatusCondition(conditions *[]Condition, conditionType ConditionType) {
|
|
if conditions == nil {
|
|
return
|
|
}
|
|
newConditions := []Condition{}
|
|
for _, condition := range *conditions {
|
|
if condition.Type != conditionType {
|
|
newConditions = append(newConditions, condition)
|
|
}
|
|
}
|
|
|
|
*conditions = newConditions
|
|
}
|
|
|
|
// FindStatusCondition finds the conditionType in conditions.
|
|
func FindStatusCondition(conditions []Condition, conditionType ConditionType) *Condition {
|
|
for i := range conditions {
|
|
if conditions[i].Type == conditionType {
|
|
return &conditions[i]
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// IsStatusConditionTrue returns true when the conditionType is present and set to `corev1.ConditionTrue`
|
|
func IsStatusConditionTrue(conditions []Condition, conditionType ConditionType) bool {
|
|
return IsStatusConditionPresentAndEqual(conditions, conditionType, corev1.ConditionTrue)
|
|
}
|
|
|
|
// IsStatusConditionFalse returns true when the conditionType is present and set to `corev1.ConditionFalse`
|
|
func IsStatusConditionFalse(conditions []Condition, conditionType ConditionType) bool {
|
|
return IsStatusConditionPresentAndEqual(conditions, conditionType, corev1.ConditionFalse)
|
|
}
|
|
|
|
// IsStatusConditionUnknown returns true when the conditionType is present and set to `corev1.ConditionUnknown`
|
|
func IsStatusConditionUnknown(conditions []Condition, conditionType ConditionType) bool {
|
|
return IsStatusConditionPresentAndEqual(conditions, conditionType, corev1.ConditionUnknown)
|
|
}
|
|
|
|
// IsStatusConditionPresentAndEqual returns true when conditionType is present and equal to status.
|
|
func IsStatusConditionPresentAndEqual(conditions []Condition, conditionType ConditionType, status corev1.ConditionStatus) bool {
|
|
for _, condition := range conditions {
|
|
if condition.Type == conditionType {
|
|
return condition.Status == status
|
|
}
|
|
}
|
|
return false
|
|
}
|