diff --git a/post-processor/vagrant/post-processor.go b/post-processor/vagrant/post-processor.go index e43690e0c..9c8b9c75b 100644 --- a/post-processor/vagrant/post-processor.go +++ b/post-processor/vagrant/post-processor.go @@ -113,14 +113,8 @@ func (p *PostProcessor) PostProcessProvider(name string, provider Provider, ui p // Write our Vagrantfile var customVagrantfile string if config.VagrantfileTemplate != "" { - vagrantfilePath, err := config.tpl.Process(config.VagrantfileTemplate, nil) - if err != nil { - return nil, false, err - } - - ui.Message(fmt.Sprintf( - "Using custom Vagrantfile: %s", vagrantfilePath)) - customBytes, err := ioutil.ReadFile(vagrantfilePath) + ui.Message(fmt.Sprintf("Using custom Vagrantfile: %s", config.VagrantfileTemplate)) + customBytes, err := ioutil.ReadFile(config.VagrantfileTemplate) if err != nil { return nil, false, err } @@ -200,6 +194,17 @@ func (p *PostProcessor) configureSingle(config *Config, raws ...interface{}) err // Accumulate any errors errs := common.CheckUnusedConfig(md) + templates := map[string]*string{ + "vagrantfile_template": &config.VagrantfileTemplate, + } + + for key, ptr := range templates { + *ptr, err = config.tpl.Process(*ptr, nil) + if err != nil { + errs = packer.MultiErrorAppend(errs, fmt.Errorf("Error processing %s: %s", key, err)) + } + } + validates := map[string]*string{ "output": &config.OutputPath, "vagrantfile_template": &config.VagrantfileTemplate, diff --git a/post-processor/vagrant/post-processor_test.go b/post-processor/vagrant/post-processor_test.go index 0ef151ebe..b035f39e0 100644 --- a/post-processor/vagrant/post-processor_test.go +++ b/post-processor/vagrant/post-processor_test.go @@ -4,6 +4,8 @@ import ( "bytes" "compress/flate" "github.com/mitchellh/packer/packer" + "io/ioutil" + "os" "strings" "testing" ) @@ -124,6 +126,41 @@ func TestPostProcessorPostProcess_badId(t *testing.T) { } } +func TestPostProcessorPostProcess_vagrantfileUserVariable(t *testing.T) { + var p PostProcessor + + f, err := ioutil.TempFile("", "packer") + if err != nil { + t.Fatalf("err: %s", err) + } + defer os.Remove(f.Name()) + + c := map[string]interface{}{ + "packer_user_variables": map[string]string{ + "foo": f.Name(), + }, + + "vagrantfile_template": "{{user `foo`}}", + } + err = p.Configure(c) + if err != nil { + t.Fatalf("err: %s", err) + } + + a := &packer.MockArtifact{ + BuilderIdValue: "packer.parallels", + } + a2, _, err := p.PostProcess(testUi(), a) + if a2 != nil { + for _, fn := range a2.Files() { + defer os.Remove(fn) + } + } + if err != nil { + t.Fatalf("err: %s", err) + } +} + func TestProviderForName(t *testing.T) { if v, ok := providerForName("virtualbox").(*VBoxProvider); !ok { t.Fatalf("bad: %#v", v)