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  }