in pkg/utils/overrider/overrider.go [163:228]
func PickFromResourceMatchedOverridesForTargetCluster(
ctx context.Context,
c client.Client,
targetCluster string,
croList []*placementv1alpha1.ClusterResourceOverrideSnapshot,
roList []*placementv1alpha1.ResourceOverrideSnapshot,
) ([]string, []placementv1beta1.NamespacedName, error) {
if len(croList) == 0 && len(roList) == 0 {
return nil, nil, nil
}
cluster := clusterv1beta1.MemberCluster{}
if err := c.Get(ctx, types.NamespacedName{Name: targetCluster}, &cluster); err != nil {
if apierrors.IsNotFound(err) {
klog.V(2).InfoS("MemberCluster has been deleted and we expect that scheduler will update the spec of binding to unscheduled", "memberCluster", targetCluster)
return nil, nil, controller.NewExpectedBehaviorError(err)
}
klog.ErrorS(err, "Failed to get the memberCluster", "memberCluster", targetCluster)
return nil, nil, controller.NewAPIServerError(true, err)
}
croFiltered := make([]*placementv1alpha1.ClusterResourceOverrideSnapshot, 0, len(croList))
for i, cro := range croList {
matched, err := isClusterMatched(&cluster, cro.Spec.OverrideSpec.Policy)
if err != nil {
klog.ErrorS(err, "Invalid clusterResourceOverride", "clusterResourceOverride", klog.KObj(cro))
return nil, nil, controller.NewUnexpectedBehaviorError(err)
}
if matched {
croFiltered = append(croFiltered, croList[i])
}
}
// There are no priority for now and sort the cro list by its name.
sort.SliceStable(croFiltered, func(i, j int) bool {
return croFiltered[i].Name < croFiltered[j].Name
})
roFiltered := make([]*placementv1alpha1.ResourceOverrideSnapshot, 0, len(roList))
for i, ro := range roList {
matched, err := isClusterMatched(&cluster, ro.Spec.OverrideSpec.Policy)
if err != nil {
klog.ErrorS(err, "Invalid resourceOverride", "resourceOverride", klog.KObj(ro))
return nil, nil, controller.NewUnexpectedBehaviorError(err)
}
if matched {
roFiltered = append(roFiltered, roList[i])
}
}
// There are no priority for now and sort the ro list by its namespace and then name.
sort.SliceStable(roFiltered, func(i, j int) bool {
if roFiltered[i].Namespace == roFiltered[j].Namespace {
return roFiltered[i].Name < roFiltered[j].Name
}
return roFiltered[i].Namespace < roFiltered[j].Namespace
})
croNames := make([]string, len(croFiltered))
for i, o := range croFiltered {
croNames[i] = o.Name
}
roNames := make([]placementv1beta1.NamespacedName, len(roFiltered))
for i, o := range roFiltered {
roNames[i] = placementv1beta1.NamespacedName{Name: o.Name, Namespace: o.Namespace}
}
klog.V(2).InfoS("Found matched overrides for the target cluster", "memberCluster", targetCluster, "matchedCROCount", len(croNames), "matchedROCount", len(roNames))
return croNames, roNames, nil
}