]>
Commit | Line | Data |
---|---|---|
107c1cdb ND |
1 | package configs |
2 | ||
3 | import ( | |
4 | "github.com/hashicorp/hcl2/hcl" | |
5 | "github.com/zclconf/go-cty/cty" | |
6 | ) | |
7 | ||
8 | // LoadValuesFile reads the file at the given path and parses it as a "values | |
9 | // file", which is an HCL config file whose top-level attributes are treated | |
10 | // as arbitrary key.value pairs. | |
11 | // | |
12 | // If the file cannot be read -- for example, if it does not exist -- then | |
13 | // a nil map will be returned along with error diagnostics. Callers may wish | |
14 | // to disregard the returned diagnostics in this case and instead generate | |
15 | // their own error message(s) with additional context. | |
16 | // | |
17 | // If the returned diagnostics has errors when a non-nil map is returned | |
18 | // then the map may be incomplete but should be valid enough for careful | |
19 | // static analysis. | |
20 | // | |
21 | // This method wraps LoadHCLFile, and so it inherits the syntax selection | |
22 | // behaviors documented for that method. | |
23 | func (p *Parser) LoadValuesFile(path string) (map[string]cty.Value, hcl.Diagnostics) { | |
24 | body, diags := p.LoadHCLFile(path) | |
25 | if body == nil { | |
26 | return nil, diags | |
27 | } | |
28 | ||
29 | vals := make(map[string]cty.Value) | |
30 | attrs, attrDiags := body.JustAttributes() | |
31 | diags = append(diags, attrDiags...) | |
32 | if attrs == nil { | |
33 | return vals, diags | |
34 | } | |
35 | ||
36 | for name, attr := range attrs { | |
37 | val, valDiags := attr.Expr.Value(nil) | |
38 | diags = append(diags, valDiags...) | |
39 | vals[name] = val | |
40 | } | |
41 | ||
42 | return vals, diags | |
43 | } |