post-processor/vagrant: compile the output path
This commit is contained in:
parent
faa7505151
commit
6f3d0f6bcd
|
@ -12,7 +12,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type AWSBoxConfig struct {
|
type AWSBoxConfig struct {
|
||||||
OutputPath string `mapstructure:"output"`
|
OutputPath string `mapstructure:"output"`
|
||||||
VagrantfileTemplate string `mapstructure:"vagrantfile_template"`
|
VagrantfileTemplate string `mapstructure:"vagrantfile_template"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,6 +48,12 @@ func (p *AWSBoxPostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifact
|
||||||
tplData.Images[parts[0]] = parts[1]
|
tplData.Images[parts[0]] = parts[1]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Compile the output path
|
||||||
|
outputPath, err := ProcessOutputPath(p.config.OutputPath, "aws", artifact)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
// Create a temporary directory for us to build the contents of the box in
|
// Create a temporary directory for us to build the contents of the box in
|
||||||
dir, err := ioutil.TempDir("", "packer")
|
dir, err := ioutil.TempDir("", "packer")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -89,11 +95,11 @@ func (p *AWSBoxPostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifact
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compress the directory to the given output path
|
// Compress the directory to the given output path
|
||||||
if err := DirToBox(p.config.OutputPath, dir); err != nil {
|
if err := DirToBox(outputPath, dir); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return NewArtifact("aws", p.config.OutputPath), nil
|
return NewArtifact("aws", outputPath), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var defaultAWSVagrantfile = `
|
var defaultAWSVagrantfile = `
|
||||||
|
|
|
@ -2,13 +2,23 @@ package vagrant
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"archive/tar"
|
"archive/tar"
|
||||||
|
"bytes"
|
||||||
"compress/gzip"
|
"compress/gzip"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"github.com/mitchellh/packer/packer"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"text/template"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// OutputPathTemplate is the structure that is availalable within the
|
||||||
|
// OutputPath variables.
|
||||||
|
type OutputPathTemplate struct {
|
||||||
|
ArtifactId string
|
||||||
|
Provider string
|
||||||
|
}
|
||||||
|
|
||||||
// DirToBox takes the directory and compresses it into a Vagrant-compatible
|
// DirToBox takes the directory and compresses it into a Vagrant-compatible
|
||||||
// box. This function does not perform checks to verify that dir is
|
// box. This function does not perform checks to verify that dir is
|
||||||
// actually a proper box. This is an expected precondition.
|
// actually a proper box. This is an expected precondition.
|
||||||
|
@ -62,6 +72,25 @@ func DirToBox(dst, dir string) error {
|
||||||
return filepath.Walk(dir, tarWalk)
|
return filepath.Walk(dir, tarWalk)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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) {
|
||||||
|
var buf bytes.Buffer
|
||||||
|
|
||||||
|
tplData := &OutputPathTemplate{
|
||||||
|
ArtifactId: artifact.Id(),
|
||||||
|
Provider: provider,
|
||||||
|
}
|
||||||
|
|
||||||
|
t, err := template.New("output").Parse(path)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = t.Execute(&buf, tplData)
|
||||||
|
return buf.String(), err
|
||||||
|
}
|
||||||
|
|
||||||
// WriteMetadata writes the "metadata.json" file for a Vagrant box.
|
// WriteMetadata writes the "metadata.json" file for a Vagrant box.
|
||||||
func WriteMetadata(dir string, contents interface{}) error {
|
func WriteMetadata(dir string, contents interface{}) error {
|
||||||
f, err := os.Create(filepath.Join(dir, "metadata.json"))
|
f, err := os.Create(filepath.Join(dir, "metadata.json"))
|
||||||
|
|
|
@ -37,6 +37,12 @@ func (p *VBoxBoxPostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifac
|
||||||
// TODO(mitchellh): Actually parse the base mac address
|
// TODO(mitchellh): Actually parse the base mac address
|
||||||
tplData := &VBoxVagrantfileTemplate{}
|
tplData := &VBoxVagrantfileTemplate{}
|
||||||
|
|
||||||
|
// Compile the output path
|
||||||
|
outputPath, err := ProcessOutputPath(p.config.OutputPath, "aws", artifact)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
// Create a temporary directory for us to build the contents of the box in
|
// Create a temporary directory for us to build the contents of the box in
|
||||||
dir, err := ioutil.TempDir("", "packer")
|
dir, err := ioutil.TempDir("", "packer")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -99,11 +105,11 @@ func (p *VBoxBoxPostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifac
|
||||||
|
|
||||||
// Compress the directory to the given output path
|
// Compress the directory to the given output path
|
||||||
ui.Message(fmt.Sprintf("Compressing box..."))
|
ui.Message(fmt.Sprintf("Compressing box..."))
|
||||||
if err := DirToBox(p.config.OutputPath, dir); err != nil {
|
if err := DirToBox(outputPath, dir); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return NewArtifact("virtualbox", p.config.OutputPath), nil
|
return NewArtifact("virtualbox", outputPath), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var defaultVBoxVagrantfile = `
|
var defaultVBoxVagrantfile = `
|
||||||
|
|
Loading…
Reference in New Issue