2024-02-08 03:48:59 -06:00
|
|
|
// Copyright (c) The OpenTofu Authors
|
|
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
// Copyright (c) 2023 HashiCorp, Inc.
|
2023-05-02 10:33:06 -05:00
|
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
|
2018-02-01 21:12:56 -06:00
|
|
|
package configs
|
|
|
|
|
|
|
|
import (
|
2019-09-09 17:58:44 -05:00
|
|
|
"github.com/hashicorp/hcl/v2"
|
2018-02-01 21:12:56 -06:00
|
|
|
"github.com/zclconf/go-cty/cty"
|
|
|
|
)
|
|
|
|
|
|
|
|
// LoadValuesFile reads the file at the given path and parses it as a "values
|
|
|
|
// file", which is an HCL config file whose top-level attributes are treated
|
|
|
|
// as arbitrary key.value pairs.
|
|
|
|
//
|
|
|
|
// If the file cannot be read -- for example, if it does not exist -- then
|
|
|
|
// a nil map will be returned along with error diagnostics. Callers may wish
|
|
|
|
// to disregard the returned diagnostics in this case and instead generate
|
|
|
|
// their own error message(s) with additional context.
|
|
|
|
//
|
|
|
|
// If the returned diagnostics has errors when a non-nil map is returned
|
|
|
|
// then the map may be incomplete but should be valid enough for careful
|
|
|
|
// static analysis.
|
|
|
|
//
|
|
|
|
// This method wraps LoadHCLFile, and so it inherits the syntax selection
|
|
|
|
// behaviors documented for that method.
|
|
|
|
func (p *Parser) LoadValuesFile(path string) (map[string]cty.Value, hcl.Diagnostics) {
|
|
|
|
body, diags := p.LoadHCLFile(path)
|
|
|
|
if body == nil {
|
|
|
|
return nil, diags
|
|
|
|
}
|
|
|
|
|
|
|
|
vals := make(map[string]cty.Value)
|
|
|
|
attrs, attrDiags := body.JustAttributes()
|
|
|
|
diags = append(diags, attrDiags...)
|
|
|
|
if attrs == nil {
|
|
|
|
return vals, diags
|
|
|
|
}
|
|
|
|
|
|
|
|
for name, attr := range attrs {
|
|
|
|
val, valDiags := attr.Expr.Value(nil)
|
|
|
|
diags = append(diags, valDiags...)
|
|
|
|
vals[name] = val
|
|
|
|
}
|
|
|
|
|
|
|
|
return vals, diags
|
|
|
|
}
|