in pkg/controllers/resourcechange/resourcechange_controller.go [266:302]
func collectAllAffectedPlacementsV1Alpha1(res *unstructured.Unstructured, crpList []runtime.Object) map[string]bool {
placements := make(map[string]bool)
for _, crp := range crpList {
match := false
var placement fleetv1alpha1.ClusterResourcePlacement
_ = runtime.DefaultUnstructuredConverter.FromUnstructured(crp.DeepCopyObject().(*unstructured.Unstructured).Object, &placement)
// find the placements selected this resource (before this change)
for _, selectedRes := range placement.Status.SelectedResources {
if selectedRes.Group == res.GroupVersionKind().Group && selectedRes.Version == res.GroupVersionKind().Version &&
selectedRes.Kind == res.GroupVersionKind().Kind && selectedRes.Name == res.GetName() {
placements[placement.Name] = true
match = true
break
}
}
if match {
continue
}
// check if object match any placement's resource selectors
for _, selector := range placement.Spec.ResourceSelectors {
if !matchSelectorGVKV1Alpha1(res.GetObjectKind().GroupVersionKind(), selector) {
continue
}
// if there is 1 selector match, it is a placement match, add only once
if selector.Name != "" {
if selector.Name == res.GetName() {
placements[placement.Name] = true
break
}
} else if matchSelectorLabelSelectorV1Alpha1(res.GetLabels(), selector) {
placements[placement.Name] = true
break
}
}
}
return placements
}