github.com/cilium/cilium@v1.16.2/operator/pkg/gateway-api/status.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package gateway_api 5 6 import ( 7 "time" 8 9 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 10 ) 11 12 func newCondition(conditionType string, status metav1.ConditionStatus, reason, msg string, lastTransitionTime time.Time, observedGeneration int64) metav1.Condition { 13 return metav1.Condition{ 14 Type: conditionType, 15 Status: status, 16 Reason: reason, 17 Message: msg, 18 LastTransitionTime: metav1.NewTime(lastTransitionTime), 19 ObservedGeneration: observedGeneration, 20 } 21 } 22 23 // merge combines the provided conditions with the existing conditions. 24 func merge(existingConditions []metav1.Condition, updates ...metav1.Condition) []metav1.Condition { 25 var additions []metav1.Condition 26 for i, update := range updates { 27 found := false 28 for j, cond := range existingConditions { 29 if cond.Type == update.Type { 30 found = true 31 if conditionChanged(cond, update) { 32 existingConditions[j].Status = update.Status 33 existingConditions[j].Reason = update.Reason 34 existingConditions[j].Message = update.Message 35 existingConditions[j].ObservedGeneration = update.ObservedGeneration 36 existingConditions[j].LastTransitionTime = update.LastTransitionTime 37 } 38 break 39 } 40 } 41 if !found { 42 additions = append(additions, updates[i]) 43 } 44 } 45 existingConditions = append(existingConditions, additions...) 46 return existingConditions 47 } 48 49 func conditionChanged(a, b metav1.Condition) bool { 50 return a.Status != b.Status || 51 a.Reason != b.Reason || 52 a.Message != b.Message || 53 a.ObservedGeneration != b.ObservedGeneration 54 }