]>
Commit | Line | Data |
---|---|---|
1 | package terraform | |
2 | ||
3 | import ( | |
4 | "github.com/hashicorp/terraform/tfdiags" | |
5 | ) | |
6 | ||
7 | // EvalSequence is an EvalNode that evaluates in sequence. | |
8 | type EvalSequence struct { | |
9 | Nodes []EvalNode | |
10 | } | |
11 | ||
12 | func (n *EvalSequence) Eval(ctx EvalContext) (interface{}, error) { | |
13 | var diags tfdiags.Diagnostics | |
14 | ||
15 | for _, n := range n.Nodes { | |
16 | if n == nil { | |
17 | continue | |
18 | } | |
19 | ||
20 | if _, err := EvalRaw(n, ctx); err != nil { | |
21 | if _, isEarlyExit := err.(EvalEarlyExitError); isEarlyExit { | |
22 | // In this path we abort early, losing any non-error | |
23 | // diagnostics we saw earlier. | |
24 | return nil, err | |
25 | } | |
26 | diags = diags.Append(err) | |
27 | if diags.HasErrors() { | |
28 | // Halt if we get some errors, but warnings are okay. | |
29 | break | |
30 | } | |
31 | } | |
32 | } | |
33 | ||
34 | return nil, diags.ErrWithWarnings() | |
35 | } | |
36 | ||
37 | // EvalNodeFilterable impl. | |
38 | func (n *EvalSequence) Filter(fn EvalNodeFilterFunc) { | |
39 | for i, node := range n.Nodes { | |
40 | n.Nodes[i] = fn(node) | |
41 | } | |
42 | } |