Commit 0b63f4f9 authored by Mitchell Hashimoto's avatar Mitchell Hashimoto

Merge pull request #1132 from rasa/1123-use-local-vboxguestadditions-iso

virtualbox: use local VBoxGuestAdditions.iso by default
parents 34834057 7736151a
......@@ -25,6 +25,9 @@ type Driver interface {
// Import a VM
Import(string, string, string) error
// The complete path to the Guest Additions ISO
Iso() (string, error)
// Checks if the VM with the given name is running.
IsRunning(string) (bool, error)
......
......@@ -40,6 +40,35 @@ func (d *VBox42Driver) Delete(name string) error {
return d.VBoxManage("unregistervm", name, "--delete")
}
func (d *VBox42Driver) Iso() (string, error) {
var stdout bytes.Buffer
cmd := exec.Command(d.VBoxManagePath, "list", "systemproperties")
cmd.Stdout = &stdout
if err := cmd.Run(); err != nil {
return "", err
}
DefaultGuestAdditionsRe := regexp.MustCompile("Default Guest Additions ISO:(.*)")
for _, line := range strings.Split(stdout.String(), "\n") {
// Need to trim off CR character when running in windows
line = strings.TrimRight(line, "\r")
matches := DefaultGuestAdditionsRe.FindStringSubmatch(line)
if matches == nil {
continue
}
isoname := strings.Trim(matches[1], " \r\n")
log.Printf("Found Default Guest Additions ISO: %s", isoname)
return isoname, nil
}
return "", fmt.Errorf("Cannot find \"Default Guest Additions ISO\" in vboxmanage output")
}
func (d *VBox42Driver) Import(name, path, opts string) error {
args := []string{
"import", path,
......
......@@ -19,6 +19,9 @@ type DriverMock struct {
ImportOpts string
ImportErr error
IsoCalled bool
IsoErr error
IsRunningName string
IsRunningReturn bool
IsRunningErr error
......@@ -60,6 +63,11 @@ func (d *DriverMock) Import(name, path, opts string) error {
return d.ImportErr
}
func (d *DriverMock) Iso() (string, error) {
d.IsoCalled = true
return "", d.IsoErr
}
func (d *DriverMock) IsRunning(name string) (bool, error) {
d.Lock()
defer d.Unlock()
......
......@@ -62,14 +62,7 @@ func (s *StepDownloadGuestAdditions) Run(state multistep.StateBag) multistep.Ste
// Use provided version or get it from virtualbox.org
var checksum string
if s.GuestAdditionsSHA256 != "" {
checksum = s.GuestAdditionsSHA256
} else {
checksum, action = s.downloadAdditionsSHA256(state, version, additionsName)
if action != multistep.ActionContinue {
return action
}
}
checksumType := "sha256"
// Use the provided source (URL or file path) or generate it
url := s.GuestAdditionsURL
......@@ -86,11 +79,29 @@ func (s *StepDownloadGuestAdditions) Run(state multistep.StateBag) multistep.Ste
return multistep.ActionHalt
}
} else {
url, err = driver.Iso()
if err == nil {
checksumType = "none"
} else {
ui.Error(err.Error())
url = fmt.Sprintf(
"http://download.virtualbox.org/virtualbox/%s/%s",
version,
additionsName)
}
}
if checksumType != "none" {
if s.GuestAdditionsSHA256 != "" {
checksum = s.GuestAdditionsSHA256
} else {
checksum, action = s.downloadAdditionsSHA256(state, version, additionsName)
if action != multistep.ActionContinue {
return action
}
}
}
url, err = common.DownloadableURL(url)
if err != nil {
......@@ -104,7 +115,7 @@ func (s *StepDownloadGuestAdditions) Run(state multistep.StateBag) multistep.Ste
downStep := &common.StepDownload{
Checksum: checksum,
ChecksumType: "sha256",
ChecksumType: checksumType,
Description: "Guest additions",
ResultKey: "guest_additions_path",
Url: []string{url},
......
......@@ -121,8 +121,9 @@ each category, the available options are alphabetized and described.
* `guest_additions_url` (string) - The URL to the guest additions ISO
to upload. This can also be a file URL if the ISO is at a local path.
By default the VirtualBox builder will go and download the proper
guest additions ISO from the internet.
By default, the VirtualBox builder will attempt to find the guest additions
ISO on the local file system. If it is not available locally, the builder
will download the proper guest additions ISO from the internet.
* `guest_os_type` (string) - The guest OS type being installed. By default
this is "other", but you can get _dramatic_ performance improvements by
......
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