switch on err type not string

pull/7390/head
Megan Marsh 7 years ago
parent a62db1a0c6
commit 86c3c44afe

@ -3,7 +3,8 @@ package packer
import (
"fmt"
"sort"
"strings"
ttmp "text/template"
multierror "github.com/hashicorp/go-multierror"
version "github.com/hashicorp/go-version"
@ -346,25 +347,29 @@ func (c *Core) init() error {
// Interpolate the default
def, err := interpolate.Render(v.Default, ctx)
if err != nil {
if strings.Contains(err.Error(), "error calling user") {
shouldRetry = true
tryCount++
failedInterpolation = fmt.Sprintf(`"%s": "%s"`, k, v.Default)
continue
} else {
return fmt.Errorf(
// unexpected interpolation error: abort the run
"error interpolating default value for '%s': %s",
k, err)
}
}
switch err.(type) {
case nil:
// We only get here if interpolation has succeeded, so something is
// different in this loop than in the last one.
changed = true
c.variables[k] = def
ctx.UserVariables = c.variables
case ttmp.ExecError:
shouldRetry = true
tryCount++
failedInterpolation = fmt.Sprintf(`"%s": "%s"`, k, v.Default)
continue
// We only get here if interpolation has succeeded, so something is
// different in this loop than in the last one.
changed = true
c.variables[k] = def
ctx.UserVariables = c.variables
return fmt.Errorf(
// unexpected interpolation error: abort the run
"error interpolating default value for '%s': %s",
k, err)
default:
return fmt.Errorf(
// unexpected interpolation error: abort the run
"error interpolating default value for '%s': %s",
k, err)
}
}
if tryCount >= 100 {
break

Loading…
Cancel
Save