pkg/utils/eviction/eviction.go (30 lines of code) (raw):
/*
Copyright (c) Microsoft Corporation.
Licensed under the MIT license.
*/
package eviction
import (
"k8s.io/klog/v2"
placementv1beta1 "go.goms.io/fleet/apis/placement/v1beta1"
"go.goms.io/fleet/pkg/utils/condition"
)
// IsEvictionInTerminalState checks to see if eviction is in a terminal state.
func IsEvictionInTerminalState(eviction *placementv1beta1.ClusterResourcePlacementEviction) bool {
if validCondition := eviction.GetCondition(string(placementv1beta1.PlacementEvictionConditionTypeValid)); condition.IsConditionStatusFalse(validCondition, eviction.GetGeneration()) {
klog.V(2).InfoS("Invalid eviction, no need to reconcile", "clusterResourcePlacementEviction", eviction.Name)
return true
}
if executedCondition := eviction.GetCondition(string(placementv1beta1.PlacementEvictionConditionTypeExecuted)); executedCondition != nil {
klog.V(2).InfoS("Eviction has executed condition specified, no need to reconcile", "clusterResourcePlacementEviction", eviction.Name)
return true
}
return false
}
// IsPlacementPresent checks to see if placement on target cluster could be present.
func IsPlacementPresent(binding *placementv1beta1.ClusterResourceBinding) bool {
if binding.Spec.State == placementv1beta1.BindingStateBound {
return true
}
if binding.Spec.State == placementv1beta1.BindingStateUnscheduled {
currentAnnotation := binding.GetAnnotations()
previousState, exist := currentAnnotation[placementv1beta1.PreviousBindingStateAnnotation]
if exist && placementv1beta1.BindingState(previousState) == placementv1beta1.BindingStateBound {
return true
}
}
return false
}