Commit 39095e48 authored by Mitchell Hashimoto's avatar Mitchell Hashimoto

post-processor/vagrant: make output contain build name by default

[GH-92]
parent 44e0a7de
......@@ -76,14 +76,14 @@ func ParseTemplate(data []byte) (t *Template, err error) {
newline := []byte{'\x0a'}
// Calculate the start/end position of the line where the error is
start := bytes.LastIndex(data[:syntaxErr.Offset], newline)+1
start := bytes.LastIndex(data[:syntaxErr.Offset], newline) + 1
end := len(data)
if idx := bytes.Index(data[start:], newline); idx >= 0 {
end = start + idx
}
// Count the line number we're on plus the offset in the line
line := bytes.Count(data[:start], newline)+1
line := bytes.Count(data[:start], newline) + 1
pos := int(syntaxErr.Offset) - start - 1
err = fmt.Errorf("Error in line %d, char %d: %s\n%s",
......@@ -244,24 +244,24 @@ func parsePostProvisioner(i int, rawV interface{}) (result []map[string]interfac
}
return
}
}
// BuildNames returns a slice of the available names of builds that
// this template represents.
func (t *Template) BuildNames() []string {
// BuildNames returns a slice of the available names of builds that
// this template represents.
func (t *Template) BuildNames() []string {
names := make([]string, 0, len(t.Builders))
for name, _ := range t.Builders {
names = append(names, name)
}
return names
}
}
// Build returns a Build for the given name.
//
// If the build does not exist as part of this template, an error is
// returned.
func (t *Template) Build(name string, components *ComponentFinder) (b Build, err error) {
// Build returns a Build for the given name.
//
// If the build does not exist as part of this template, an error is
// returned.
func (t *Template) Build(name string, components *ComponentFinder) (b Build, err error) {
// Setup the Builder
builderConfig, ok := t.Builders[name]
if !ok {
......@@ -377,4 +377,4 @@ func parsePostProvisioner(i int, rawV interface{}) (result []map[string]interfac
}
return
}
}
......@@ -14,6 +14,8 @@ import (
type AWSBoxConfig struct {
OutputPath string `mapstructure:"output"`
VagrantfileTemplate string `mapstructure:"vagrantfile_template"`
PackerBuildName string `mapstructure:"packer_build_name"`
}
type AWSVagrantfileTemplate struct {
......@@ -51,7 +53,8 @@ func (p *AWSBoxPostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifact
}
// Compile the output path
outputPath, err := ProcessOutputPath(p.config.OutputPath, "aws", artifact)
outputPath, err := ProcessOutputPath(p.config.OutputPath,
p.config.PackerBuildName, "aws", artifact)
if err != nil {
return nil, false, err
}
......
......@@ -19,6 +19,8 @@ var builtins = map[string]string{
type Config struct {
OutputPath string `mapstructure:"output"`
PackerBuildName string `mapstructure:"packer_build_name"`
}
type PostProcessor struct {
......@@ -35,7 +37,7 @@ func (p *PostProcessor) Configure(raws ...interface{}) error {
}
if p.config.OutputPath == "" {
p.config.OutputPath = "packer_{{.Provider}}.box"
p.config.OutputPath = "packer_{{ .BuildName }}_{{.Provider}}.box"
}
_, err := template.New("output").Parse(p.config.OutputPath)
......@@ -49,6 +51,10 @@ func (p *PostProcessor) Configure(raws ...interface{}) error {
return err
}
packerConfig := map[string]interface{}{
packer.BuildNameConfigKey: p.config.PackerBuildName,
}
p.premade = make(map[string]packer.PostProcessor)
errors := make([]error, 0)
for k, raw := range mapConfig {
......@@ -57,7 +63,7 @@ func (p *PostProcessor) Configure(raws ...interface{}) error {
continue
}
if err := pp.Configure(raw); err != nil {
if err := pp.Configure(raw, packerConfig); err != nil {
errors = append(errors, err)
}
......
......@@ -17,6 +17,7 @@ import (
// OutputPath variables.
type OutputPathTemplate struct {
ArtifactId string
BuildName string
Provider string
}
......@@ -83,11 +84,12 @@ func DirToBox(dst, dir string) error {
// ProcessOutputPath takes an output path template and executes it,
// replacing variables with their respective values.
func ProcessOutputPath(path string, provider string, artifact packer.Artifact) (string, error) {
func ProcessOutputPath(path string, buildName string, provider string, artifact packer.Artifact) (string, error) {
var buf bytes.Buffer
tplData := &OutputPathTemplate{
ArtifactId: artifact.Id(),
BuildName: buildName,
Provider: provider,
}
......
......@@ -18,6 +18,8 @@ import (
type VBoxBoxConfig struct {
OutputPath string `mapstructure:"output"`
VagrantfileTemplate string `mapstructure:"vagrantfile_template"`
PackerBuildName string `mapstructure:"packer_build_name"`
}
type VBoxVagrantfileTemplate struct {
......@@ -48,7 +50,8 @@ func (p *VBoxBoxPostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifac
}
// Compile the output path
outputPath, err := ProcessOutputPath(p.config.OutputPath, "virtualbox", artifact)
outputPath, err := ProcessOutputPath(p.config.OutputPath,
p.config.PackerBuildName, "virtualbox", artifact)
if err != nil {
return nil, false, err
}
......
......@@ -14,6 +14,8 @@ import (
type VMwareBoxConfig struct {
OutputPath string `mapstructure:"output"`
VagrantfileTemplate string `mapstructure:"vagrantfile_template"`
PackerBuildName string `mapstructure:"packer_build_name"`
}
type VMwareBoxPostProcessor struct {
......@@ -28,13 +30,13 @@ func (p *VMwareBoxPostProcessor) Configure(raws ...interface{}) error {
}
}
return nil
}
func (p *VMwareBoxPostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifact) (packer.Artifact, bool, error) {
// Compile the output path
outputPath, err := ProcessOutputPath(p.config.OutputPath, "vmware", artifact)
outputPath, err := ProcessOutputPath(p.config.OutputPath,
p.config.PackerBuildName, "vmware", artifact)
if err != nil {
return nil, false, err
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment