Commit bfba7d2d authored by Mitchell Hashimoto's avatar Mitchell Hashimoto

post-processor/vagrant: virtualbox output finds and sets up the mac addr

parent 42005959
package vagrant package vagrant
import ( import (
"errors"
"fmt" "fmt"
"github.com/mitchellh/mapstructure" "github.com/mitchellh/mapstructure"
"github.com/mitchellh/packer/packer" "github.com/mitchellh/packer/packer"
"io" "io"
"io/ioutil" "io/ioutil"
"log"
"os" "os"
"path/filepath" "path/filepath"
"regexp"
"strings"
"text/template" "text/template"
) )
...@@ -34,8 +38,12 @@ func (p *VBoxBoxPostProcessor) Configure(raw interface{}) error { ...@@ -34,8 +38,12 @@ func (p *VBoxBoxPostProcessor) Configure(raw interface{}) error {
} }
func (p *VBoxBoxPostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifact) (packer.Artifact, error) { func (p *VBoxBoxPostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifact) (packer.Artifact, error) {
// TODO(mitchellh): Actually parse the base mac address var err error
tplData := &VBoxVagrantfileTemplate{} tplData := &VBoxVagrantfileTemplate{}
tplData.BaseMacAddress, err = p.findBaseMacAddress(artifact)
if err != nil {
return nil, err
}
// Compile the output path // Compile the output path
outputPath, err := ProcessOutputPath(p.config.OutputPath, "virtualbox", artifact) outputPath, err := ProcessOutputPath(p.config.OutputPath, "virtualbox", artifact)
...@@ -112,10 +120,44 @@ func (p *VBoxBoxPostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifac ...@@ -112,10 +120,44 @@ func (p *VBoxBoxPostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifac
return NewArtifact("virtualbox", outputPath), nil return NewArtifact("virtualbox", outputPath), nil
} }
func (p *VBoxBoxPostProcessor) findBaseMacAddress(a packer.Artifact) (string, error) {
log.Println("Looking for OVF for base mac address...")
var ovf string
for _, f := range a.Files() {
if strings.HasSuffix(f, ".ovf") {
log.Printf("OVF found: %s", f)
ovf = f
break
}
}
if ovf == "" {
return "", errors.New("ovf file couldn't be found")
}
f, err := os.Open(ovf)
if err != nil {
return "", err
}
defer f.Close()
data, err := ioutil.ReadAll(f)
if err != nil {
return "", err
}
re := regexp.MustCompile(`<Adapter slot="0".+?MACAddress="(.+?)"`)
matches := re.FindSubmatch(data)
if matches == nil {
return "", errors.New("can't find base mac address in OVF")
}
log.Printf("Base mac address: %s", string(matches[1]))
return string(matches[1]), nil
}
var defaultVBoxVagrantfile = ` var defaultVBoxVagrantfile = `
Vagrant.configure("2") do |config| Vagrant.configure("2") do |config|
config.vm.provider "virtualbox" do |vb| config.vm.base_mac = "{{ .BaseMacAddress }}"
# TODO
end
end end
` `
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