pkg/utils/pod_condition.go (48 lines of code) (raw):
package utils
import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"time"
)
func PodHasReadinessGate(pod *corev1.Pod, conditionType corev1.PodConditionType) bool {
if pod == nil {
return false
}
for _, gate := range pod.Spec.ReadinessGates {
if gate.ConditionType == conditionType {
return true
}
}
return false
}
// Copied from: k8s.io/apimachinery/pkg/apis/meta
func FindPodStatusCondition(conditions []corev1.PodCondition, conditionType corev1.PodConditionType) *corev1.PodCondition {
for i := range conditions {
if conditions[i].Type == conditionType {
return &conditions[i]
}
}
return nil
}
// Copied from: k8s.io/apimachinery/pkg/apis/meta
func SetPodStatusCondition(conditions *[]corev1.PodCondition, newCondition corev1.PodCondition) {
if conditions == nil {
return
}
existingCondition := FindPodStatusCondition(*conditions, newCondition.Type)
if existingCondition == nil {
if newCondition.LastTransitionTime.IsZero() {
newCondition.LastTransitionTime = metav1.NewTime(time.Now())
}
*conditions = append(*conditions, newCondition)
return
}
if existingCondition.Status != newCondition.Status {
existingCondition.Status = newCondition.Status
if !newCondition.LastTransitionTime.IsZero() {
existingCondition.LastTransitionTime = newCondition.LastTransitionTime
} else {
existingCondition.LastTransitionTime = metav1.NewTime(time.Now())
}
}
existingCondition.Reason = newCondition.Reason
existingCondition.Message = newCondition.Message
}