From 1de1350ee2a4da47a27af12d19acb43b112b1a60 Mon Sep 17 00:00:00 2001 From: Emil Hessman Date: Mon, 24 Nov 2014 23:45:49 +0100 Subject: [PATCH 1/2] post-processor/vagrant: test for user variables in vagrantfile_template [GH-1125] Previously fixed in a47610879fcd5e2871b3e088e40d368a2915455f Closes #1125 --- post-processor/vagrant/post-processor_test.go | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) 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) From 3a8e02110e0d7c15cea572a3da5acdeedb9faeec Mon Sep 17 00:00:00 2001 From: Emil Hessman Date: Tue, 25 Nov 2014 07:04:17 +0100 Subject: [PATCH 2/2] post-processor/vagrant: process templates in Configure --- post-processor/vagrant/post-processor.go | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) 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,