Files
kustomize/kyaml/inpututil/inpututil.go

66 lines
1.8 KiB
Go

// Copyright 2019 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0
package inpututil
import (
"sigs.k8s.io/kustomize/kyaml/errors"
"sigs.k8s.io/kustomize/kyaml/kio/kioutil"
"sigs.k8s.io/kustomize/kyaml/yaml"
)
type MapInputsEFn func(*yaml.RNode, yaml.ResourceMeta) error
// MapInputsE runs the function against each input Resource, providing the parsed metadata
func MapInputsE(inputs []*yaml.RNode, fn MapInputsEFn) error {
for i := range inputs {
meta, err := inputs[i].GetMeta()
if err != nil {
return errors.Wrap(err)
}
if err := fn(inputs[i], meta); err != nil {
return WrapErrorWithFile(err, meta)
}
}
return nil
}
type MapInputsFn func(*yaml.RNode, yaml.ResourceMeta) ([]*yaml.RNode, error)
// MapInputs runs the function against each input Resource, providing the parsed metadata
// and returning the aggregated result
func MapInputs(inputs []*yaml.RNode, fn MapInputsFn) ([]*yaml.RNode, error) {
var outputs []*yaml.RNode
for i := range inputs {
meta, err := inputs[i].GetMeta()
if err != nil {
return nil, errors.Wrap(err)
}
o, err := fn(inputs[i], meta)
if err != nil {
return nil, WrapErrorWithFile(err, meta)
}
outputs = append(outputs, o...)
}
return outputs, nil
}
// WrapErrorWithFile returns the original error wrapped with information about the file
// that the Resource was parsed from.
func WrapErrorWithFile(err error, meta yaml.ResourceMeta) error {
if err == nil {
return err
}
path := meta.Annotations[kioutil.PathAnnotation]
index := meta.Annotations[kioutil.IndexAnnotation]
if path == "" {
path = meta.Annotations[kioutil.LegacyPathAnnotation]
}
if index == "" {
index = meta.Annotations[kioutil.LegacyPathAnnotation]
}
return errors.WrapPrefixf(err, "%s [%s]",
meta.Annotations[path],
meta.Annotations[index])
}