func()

in internal/execution/executor.go [80:127]


func (e *Executor) buildPodInput(ctx context.Context, comp *apiv1.Composition, syn *apiv1.Synthesizer) (*krmv1.ResourceList, []apiv1.InputRevisions, error) {
	logger := logr.FromContextOrDiscard(ctx)
	bindings := map[string]*apiv1.Binding{}
	for _, b := range comp.Spec.Bindings {
		b := b
		bindings[b.Key] = &b
	}

	rl := &krmv1.ResourceList{
		Kind:       krmv1.ResourceListKind,
		APIVersion: krmv1.SchemeGroupVersion.String(),
	}
	revs := []apiv1.InputRevisions{}
	for _, r := range syn.Spec.Refs {
		key := r.Key

		// Get the resource
		start := time.Now()
		obj := &unstructured.Unstructured{}
		obj.SetGroupVersionKind(schema.GroupVersionKind{Group: r.Resource.Group, Version: r.Resource.Version, Kind: r.Resource.Kind})
		b, ok := bindings[key]
		if ok {
			obj.SetName(b.Resource.Name)
			obj.SetNamespace(b.Resource.Namespace)
		} else {
			obj.SetName(r.Resource.Name)
			obj.SetNamespace(r.Resource.Namespace)
		}

		err := e.Reader.Get(ctx, client.ObjectKeyFromObject(obj), obj)
		if err != nil {
			return nil, nil, fmt.Errorf("getting resource for ref %q: %w", key, err)
		}
		anno := obj.GetAnnotations()
		if anno == nil {
			anno = map[string]string{}
		}
		anno["eno.azure.io/input-key"] = key
		obj.SetAnnotations(anno)
		rl.Items = append(rl.Items, obj)
		logger.V(0).Info("retrieved input", "key", key, "latency", time.Since(start).Abs().Milliseconds())

		// Store the revision to be written to the synthesis status later
		revs = append(revs, *resource.NewInputRevisions(obj, key))
	}

	return rl, revs, nil
}