diff --git a/builder/virtualbox/common/artifact.go b/builder/virtualbox/common/artifact.go new file mode 100644 index 000000000..f4fc48100 --- /dev/null +++ b/builder/virtualbox/common/artifact.go @@ -0,0 +1,61 @@ +package common + +import ( + "fmt" + "os" + "path/filepath" + + "github.com/mitchellh/packer/packer" +) + +// This is the common builder ID to all of these artifacts. +const BuilderId = "mitchellh.virtualbox" + +// Artifact is the result of running the VirtualBox builder, namely a set +// of files associated with the resulting machine. +type artifact struct { + dir string + f []string +} + +// NewArtifact returns a VirtualBox artifact containing the files +// in the given directory. +func NewArtifact(dir string) (packer.Artifact, error) { + files := make([]string, 0, 5) + visit := func(path string, info os.FileInfo, err error) error { + if !info.IsDir() { + files = append(files, path) + } + + return err + } + + if err := filepath.Walk(dir, visit); err != nil { + return nil, err + } + + return &artifact{ + dir: dir, + f: files, + }, nil +} + +func (*artifact) BuilderId() string { + return BuilderId +} + +func (a *artifact) Files() []string { + return a.f +} + +func (*artifact) Id() string { + return "VM" +} + +func (a *artifact) String() string { + return fmt.Sprintf("VM files in directory: %s", a.dir) +} + +func (a *artifact) Destroy() error { + return os.RemoveAll(a.dir) +} diff --git a/builder/virtualbox/common/artifact_test.go b/builder/virtualbox/common/artifact_test.go new file mode 100644 index 000000000..f9ddc5dbf --- /dev/null +++ b/builder/virtualbox/common/artifact_test.go @@ -0,0 +1,43 @@ +package common + +import ( + "io/ioutil" + "os" + "path/filepath" + "testing" + + "github.com/mitchellh/packer/packer" +) + +func TestArtifact_impl(t *testing.T) { + var _ packer.Artifact = new(artifact) +} + +func TestNewArtifact(t *testing.T) { + td, err := ioutil.TempDir("", "packer") + if err != nil { + t.Fatalf("err: %s", err) + } + defer os.RemoveAll(td) + + err = ioutil.WriteFile(filepath.Join(td, "a"), []byte("foo"), 0644) + if err != nil { + t.Fatalf("err: %s", err) + } + + if err := os.Mkdir(filepath.Join(td, "b"), 0755); err != nil { + t.Fatalf("err: %s", err) + } + + a, err := NewArtifact(td) + if err != nil { + t.Fatalf("err: %s", err) + } + + if a.BuilderId() != BuilderId { + t.Fatalf("bad: %#v", a.BuilderId()) + } + if len(a.Files()) != 1 { + t.Fatalf("should length 1: %d", len(a.Files())) + } +} diff --git a/builder/virtualbox/iso/artifact.go b/builder/virtualbox/iso/artifact.go deleted file mode 100644 index afbdf584f..000000000 --- a/builder/virtualbox/iso/artifact.go +++ /dev/null @@ -1,33 +0,0 @@ -package iso - -import ( - "fmt" - "os" -) - -// Artifact is the result of running the VirtualBox builder, namely a set -// of files associated with the resulting machine. -type Artifact struct { - dir string - f []string -} - -func (*Artifact) BuilderId() string { - return BuilderId -} - -func (a *Artifact) Files() []string { - return a.f -} - -func (*Artifact) Id() string { - return "VM" -} - -func (a *Artifact) String() string { - return fmt.Sprintf("VM files in directory: %s", a.dir) -} - -func (a *Artifact) Destroy() error { - return os.RemoveAll(a.dir) -} diff --git a/builder/virtualbox/iso/builder.go b/builder/virtualbox/iso/builder.go index d89715d16..9cbc9dd92 100644 --- a/builder/virtualbox/iso/builder.go +++ b/builder/virtualbox/iso/builder.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "github.com/mitchellh/multistep" + vboxcommon "github.com/mitchellh/packer/builder/virtualbox/common" "github.com/mitchellh/packer/common" "github.com/mitchellh/packer/packer" "log" @@ -457,26 +458,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe return nil, errors.New("Build was halted.") } - // Compile the artifact list - files := make([]string, 0, 5) - visit := func(path string, info os.FileInfo, err error) error { - if !info.IsDir() { - files = append(files, path) - } - - return err - } - - if err := filepath.Walk(b.config.OutputDir, visit); err != nil { - return nil, err - } - - artifact := &Artifact{ - dir: b.config.OutputDir, - f: files, - } - - return artifact, nil + return vboxcommon.NewArtifact(b.config.OutputDir) } func (b *Builder) Cancel() {