handle wrapped EvalEarlyExitErrors
This commit is contained in:
parent
477111e6b6
commit
fe9c93b9f9
|
@ -2,6 +2,7 @@ package terraform
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/zclconf/go-cty/cty"
|
"github.com/zclconf/go-cty/cty"
|
||||||
|
@ -145,16 +146,34 @@ func (w *ContextGraphWalker) Execute(ctx EvalContext, n GraphNodeExecutable) tfd
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, isEarlyExit := err.(EvalEarlyExitError); isEarlyExit {
|
var diags tfdiags.Diagnostics
|
||||||
|
|
||||||
|
// Handle a simple early exit error
|
||||||
|
if errors.Is(err, EvalEarlyExitError{}) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// we need to see if this wraps only EarlyExitErrors
|
||||||
|
if wrapper, ok := err.(interface{ WrappedErrors() []error }); ok {
|
||||||
|
//WrappedErrors only returns native error values, so we can't extract
|
||||||
|
//them from diagnostics. Just return the whole thing if we have a
|
||||||
|
//combination.
|
||||||
|
errs := wrapper.WrappedErrors()
|
||||||
|
earlyExit := true
|
||||||
|
for _, err := range errs {
|
||||||
|
if err != (EvalEarlyExitError{}) {
|
||||||
|
earlyExit = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(errs) > 0 && earlyExit {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Otherwise, we'll let our usual diagnostics machinery figure out how to
|
// Otherwise, we'll let our usual diagnostics machinery figure out how to
|
||||||
// unpack this as one or more diagnostic messages and return that. If we
|
// unpack this as one or more diagnostic messages and return that. If we
|
||||||
// get down here then the returned diagnostics will contain at least one
|
// get down here then the returned diagnostics will contain at least one
|
||||||
// error, causing the graph walk to halt.
|
// error, causing the graph walk to halt.
|
||||||
var diags tfdiags.Diagnostics
|
|
||||||
diags = diags.Append(err)
|
diags = diags.Append(err)
|
||||||
return diags
|
return diags
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue