pkg/k8s/pod_utils.go (44 lines of code) (raw):
package k8s
import (
"github.com/aws/aws-sdk-go/aws"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
const (
ConditionAWSCloudMapHealthy = "conditions.appmesh.k8s.aws/aws-cloudmap-healthy"
)
// GetPodCondition will get pointer to Pod's existing condition.
func GetPodCondition(pod *corev1.Pod, conditionType corev1.PodConditionType) *corev1.PodCondition {
for i := range pod.Status.Conditions {
if pod.Status.Conditions[i].Type == conditionType {
return &pod.Status.Conditions[i]
}
}
return nil
}
// UpdatePodCondition will update Pod's condition. returns whether it's updated.
func UpdatePodCondition(pod *corev1.Pod, conditionType corev1.PodConditionType, status corev1.ConditionStatus, reason *string, message *string) bool {
existingCondition := GetPodCondition(pod, conditionType)
if existingCondition == nil {
newCondition := corev1.PodCondition{
Type: conditionType,
Status: status,
LastProbeTime: metav1.Now(),
LastTransitionTime: metav1.Now(),
Reason: aws.StringValue(reason),
Message: aws.StringValue(message),
}
pod.Status.Conditions = append(pod.Status.Conditions, newCondition)
return true
}
if existingCondition.Status != status {
existingCondition.Status = status
existingCondition.LastTransitionTime = metav1.Now()
}
if existingCondition.Reason != aws.StringValue(reason) {
existingCondition.Reason = aws.StringValue(reason)
}
if existingCondition.Message != aws.StringValue(message) {
existingCondition.Message = aws.StringValue(message)
}
existingCondition.LastProbeTime = metav1.Now()
return true
}