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
}