From ac2a4807d43b1167f54b273f04bf5a3fa9a17e10 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 31 Aug 2013 17:36:43 -0700 Subject: [PATCH] packer: fix required var check to work properly --- packer/build.go | 23 ++++++++--------------- packer/build_test.go | 8 ++++++++ 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/packer/build.go b/packer/build.go index d116f8684..7e405c546 100644 --- a/packer/build.go +++ b/packer/build.go @@ -126,14 +126,19 @@ func (b *coreBuild) Prepare(userVars map[string]string) (err error) { b.prepareCalled = true // Compile the variables + varErrs := make([]error, 0) variables := make(map[string]string) for k, v := range b.variables { - if !v.Required { - variables[k] = v.Default + variables[k] = v.Default + + if v.Required { + if _, ok := userVars[k]; !ok { + varErrs = append(varErrs, + fmt.Errorf("Required user variable '%s' not set", k)) + } } } - varErrs := make([]error, 0) if userVars != nil { for k, v := range userVars { if _, ok := variables[k]; !ok { @@ -146,18 +151,6 @@ func (b *coreBuild) Prepare(userVars map[string]string) (err error) { } } - // Verify all required variables have been set. - for k, v := range b.variables { - if !v.Required { - continue - } - - if _, ok := variables[k]; !ok { - varErrs = append( - varErrs, fmt.Errorf("Required user variable '%s' not set", k)) - } - } - // If there were any problem with variables, return an error right // away because we can't be certain anything else will actually work. if len(varErrs) > 0 { diff --git a/packer/build_test.go b/packer/build_test.go index ed05e8df7..d88218513 100644 --- a/packer/build_test.go +++ b/packer/build_test.go @@ -175,6 +175,14 @@ func TestBuildPrepare_variablesRequired(t *testing.T) { if err == nil { t.Fatal("should have had error") } + + // Test with setting the value + build = testBuild() + build.variables["foo"] = coreBuildVariable{Required: true} + err = build.Prepare(map[string]string{"foo": ""}) + if err != nil { + t.Fatalf("should not have error: %s", err) + } } func TestBuild_Run(t *testing.T) {