package shell import "fmt" func (p *Provisioner) ValidExitCode(code int) error { // Check exit code against allowed codes (likely just 0) validCodes := p.ValidExitCodes if len(validCodes) == 0 { validCodes = []int{0} } validExitCode := false for _, v := range validCodes { if code == v { validExitCode = true break } } if !validExitCode { return &ErrorInvalidExitCode{ Code: code, Allowed: validCodes, } } return nil } type ErrorInvalidExitCode struct { Code int Allowed []int } func (e *ErrorInvalidExitCode) Error() string { if e == nil { return "" } return fmt.Sprintf("Script exited with non-zero exit status: %d."+ "Allowed exit codes are: %v", e.Code, e.Allowed) }