post-processor/vagrant: virtualbox output finds and sets up the mac addr
This commit is contained in:
parent
8d638aaa75
commit
c5790de3db
|
@ -1,13 +1,17 @@
|
||||||
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 {
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
||||||
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
|
||||||
`
|
`
|
||||||
|
|
Loading…
Reference in New Issue