]>
Commit | Line | Data |
---|---|---|
bae9f6d2 JC |
1 | package terraform |
2 | ||
107c1cdb ND |
3 | import ( |
4 | "github.com/hashicorp/terraform/tfdiags" | |
5 | ) | |
6 | ||
bae9f6d2 JC |
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) { | |
107c1cdb ND |
13 | var diags tfdiags.Diagnostics |
14 | ||
bae9f6d2 JC |
15 | for _, n := range n.Nodes { |
16 | if n == nil { | |
17 | continue | |
18 | } | |
19 | ||
20 | if _, err := EvalRaw(n, ctx); err != nil { | |
107c1cdb ND |
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 | } | |
bae9f6d2 JC |
31 | } |
32 | } | |
33 | ||
107c1cdb | 34 | return nil, diags.ErrWithWarnings() |
bae9f6d2 JC |
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 | } |