in internal/controllers/watch/kind.go [168:220]
func (k *KindWatchController) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
logger := logr.FromContextOrDiscard(ctx).WithValues("group", k.gvk.Group, "version", k.gvk.Version, "kind", k.gvk.Kind)
meta := &metav1.PartialObjectMetadata{}
meta.SetGroupVersionKind(k.gvk)
err := k.client.Get(ctx, req.NamespacedName, meta)
if err != nil {
return ctrl.Result{}, client.IgnoreNotFound(err)
}
list := &apiv1.SynthesizerList{}
err = k.client.List(ctx, list, client.MatchingFields{
manager.IdxSynthesizersByRef: path.Join(k.gvk.Group, k.gvk.Version, k.gvk.Kind),
})
if err != nil {
return ctrl.Result{}, fmt.Errorf("listing synthesizers: %w", err)
}
rand.Shuffle(len(list.Items), func(i, j int) { list.Items[i], list.Items[j] = list.Items[j], list.Items[i] })
for _, synth := range list.Items {
for _, ref := range synth.Spec.Refs {
if ref.Resource.Name != meta.GetName() || ref.Resource.Namespace != meta.GetNamespace() || ref.Resource.Group != k.gvk.Group || ref.Resource.Kind != k.gvk.Kind || ref.Resource.Version != k.gvk.Version {
continue
}
list := &apiv1.CompositionList{}
err = k.client.List(ctx, list, client.MatchingFields{
manager.IdxCompositionsBySynthesizer: synth.Name,
})
if err != nil {
return ctrl.Result{}, fmt.Errorf("listing compositions: %w", err)
}
modified, err := k.updateCompositions(ctx, logger, &synth, meta, list)
if modified || err != nil {
return ctrl.Result{}, err
}
}
list := &apiv1.CompositionList{}
err = k.client.List(ctx, list, client.MatchingFields{
manager.IdxCompositionsByBinding: path.Join(synth.Name, meta.Namespace, meta.Name),
})
if err != nil {
return ctrl.Result{}, fmt.Errorf("listing compositions: %w", err)
}
modified, err := k.updateCompositions(ctx, logger, &synth, meta, list)
if modified || err != nil {
return ctrl.Result{}, err
}
}
return ctrl.Result{}, nil
}