diff --git a/post-processor/vagrant/post-processor.go b/post-processor/vagrant/post-processor.go index 9c8b9c75b..50b80f7cf 100644 --- a/post-processor/vagrant/post-processor.go +++ b/post-processor/vagrant/post-processor.go @@ -210,6 +210,13 @@ func (p *PostProcessor) configureSingle(config *Config, raws ...interface{}) err "vagrantfile_template": &config.VagrantfileTemplate, } + if config.VagrantfileTemplate != "" { + _, err := os.Stat(config.VagrantfileTemplate) + if err != nil { + errs = packer.MultiErrorAppend(errs, fmt.Errorf("vagrantfile_template '%s' does not exist", config.VagrantfileTemplate)) + } + } + for n, ptr := range validates { if err := config.tpl.Validate(*ptr); err != nil { errs = packer.MultiErrorAppend( diff --git a/post-processor/vagrant/post-processor_test.go b/post-processor/vagrant/post-processor_test.go index b035f39e0..9ca31bf9c 100644 --- a/post-processor/vagrant/post-processor_test.go +++ b/post-processor/vagrant/post-processor_test.go @@ -84,16 +84,22 @@ func TestPostProcessorPrepare_outputPath(t *testing.T) { func TestPostProcessorPrepare_subConfigs(t *testing.T) { var p PostProcessor + f, err := ioutil.TempFile("", "packer") + if err != nil { + t.Fatalf("err: %s", err) + } + defer os.Remove(f.Name()) + // Default c := testConfig() c["compression_level"] = 42 - c["vagrantfile_template"] = "foo" + c["vagrantfile_template"] = f.Name() c["override"] = map[string]interface{}{ "aws": map[string]interface{}{ "compression_level": 7, }, } - err := p.Configure(c) + err = p.Configure(c) if err != nil { t.Fatalf("err: %s", err) } @@ -102,7 +108,7 @@ func TestPostProcessorPrepare_subConfigs(t *testing.T) { t.Fatalf("bad: %#v", p.configs[""].CompressionLevel) } - if p.configs[""].VagrantfileTemplate != "foo" { + if p.configs[""].VagrantfileTemplate != f.Name() { t.Fatalf("bad: %#v", p.configs[""].VagrantfileTemplate) } @@ -110,11 +116,30 @@ func TestPostProcessorPrepare_subConfigs(t *testing.T) { t.Fatalf("bad: %#v", p.configs["aws"].CompressionLevel) } - if p.configs["aws"].VagrantfileTemplate != "foo" { + if p.configs["aws"].VagrantfileTemplate != f.Name() { t.Fatalf("bad: %#v", p.configs["aws"].VagrantfileTemplate) } } +func TestPostProcessorPrepare_vagrantfileTemplateExists(t *testing.T) { + var p PostProcessor + + f, err := ioutil.TempFile("", "packer") + if err != nil { + t.Fatalf("err: %s", err) + } + + c := testConfig() + c["vagrantfile_template"] = f.Name() + + os.Remove(f.Name()) + + err = p.Configure(c) + if err == nil { + t.Fatal("expected an error since vagrantfile_template does not exist") + } +} + func TestPostProcessorPostProcess_badId(t *testing.T) { artifact := &packer.MockArtifact{ BuilderIdValue: "invalid.packer",