| package terraform |
| |
| import ( |
| "github.com/hashicorp/terraform/tfdiags" |
| ) |
| |
| // EvalSequence is an EvalNode that evaluates in sequence. |
| type EvalSequence struct { |
| Nodes []EvalNode |
| } |
| |
| func (n *EvalSequence) Eval(ctx EvalContext) (interface{}, error) { |
| var diags tfdiags.Diagnostics |
| |
| for _, n := range n.Nodes { |
| if n == nil { |
| continue |
| } |
| |
| if _, err := EvalRaw(n, ctx); err != nil { |
| if _, isEarlyExit := err.(EvalEarlyExitError); isEarlyExit { |
| // In this path we abort early, losing any non-error |
| // diagnostics we saw earlier. |
| return nil, err |
| } |
| diags = diags.Append(err) |
| if diags.HasErrors() { |
| // Halt if we get some errors, but warnings are okay. |
| break |
| } |
| } |
| } |
| |
| return nil, diags.ErrWithWarnings() |
| } |
| |
| // EvalNodeFilterable impl. |
| func (n *EvalSequence) Filter(fn EvalNodeFilterFunc) { |
| for i, node := range n.Nodes { |
| n.Nodes[i] = fn(node) |
| } |
| } |