func()

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
}