in types.go [517:540]
func (r *refDynValue) getValue(
p *cfgPrimitive,
opts *options,
) (value, error) {
ref := (*reference)(r)
v, err := ref.resolveRef(p.ctx.getParent(), opts)
// If not found or we have a cyclic reference we try the environment resolvers
if v != nil || criticalResolveError(err) {
return v, err
}
previousErr := err
str, parseCfg, err := ref.resolveEnv(p.ctx.getParent(), opts)
if err != nil {
// TODO(ph): Not everything is an Error, will do some cleanup in another PR.
if v, ok := previousErr.(Error); ok {
if v.Reason() == ErrCyclicReference {
return nil, previousErr
}
}
return nil, err
}
return parseValue(p, opts, str, parseCfg)
}