builder/vmware: Verify VMware is ready
This commit is contained in:
parent
05e047a355
commit
09db84eb5e
|
@ -196,5 +196,10 @@ func (b *Builder) Cancel() {
|
||||||
|
|
||||||
func (b *Builder) newDriver() (Driver, error) {
|
func (b *Builder) newDriver() (Driver, error) {
|
||||||
fusionAppPath := "/Applications/VMware Fusion.app"
|
fusionAppPath := "/Applications/VMware Fusion.app"
|
||||||
return &Fusion5Driver{fusionAppPath}, nil
|
driver := &Fusion5Driver{fusionAppPath}
|
||||||
|
if err := driver.Verify(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return driver, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,8 @@ package vmware
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -20,6 +22,12 @@ type Driver interface {
|
||||||
|
|
||||||
// Stop stops a VM specified by the path to the VMX given.
|
// Stop stops a VM specified by the path to the VMX given.
|
||||||
Stop(string) error
|
Stop(string) error
|
||||||
|
|
||||||
|
// Verify checks to make sure that this driver should function
|
||||||
|
// properly. This should check that all the files it will use
|
||||||
|
// appear to exist and so on. If everything is okay, this doesn't
|
||||||
|
// return an error. Otherwise, this returns an error.
|
||||||
|
Verify() error
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fusion5Driver is a driver that can run VMWare Fusion 5.
|
// Fusion5Driver is a driver that can run VMWare Fusion 5.
|
||||||
|
@ -29,8 +37,7 @@ type Fusion5Driver struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Fusion5Driver) CreateDisk(output string, size string) error {
|
func (d *Fusion5Driver) CreateDisk(output string, size string) error {
|
||||||
vdiskPath := filepath.Join(d.AppPath, "Contents", "Library", "vmware-vdiskmanager")
|
cmd := exec.Command(d.vdiskManagerPath(), "-c", "-s", size, "-a", "lsilogic", "-t", "1", output)
|
||||||
cmd := exec.Command(vdiskPath, "-c", "-s", size, "-a", "lsilogic", "-t", "1", output)
|
|
||||||
if err := cmd.Run(); err != nil {
|
if err := cmd.Run(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -73,6 +80,38 @@ func (d *Fusion5Driver) Stop(vmxPath string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *Fusion5Driver) Verify() error {
|
||||||
|
if _, err := os.Stat(d.AppPath); err != nil {
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
return fmt.Errorf("Fusion application not found at path: %s", d.AppPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := os.Stat(d.vmrunPath()); err != nil {
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
return fmt.Errorf("Critical application 'vmrun' not found at path: %s", d.vmrunPath())
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := os.Stat(d.vdiskManagerPath()); err != nil {
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
return fmt.Errorf("Critical application vdisk manager not found at path: %s", d.vdiskManagerPath())
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *Fusion5Driver) vdiskManagerPath() string {
|
||||||
|
return filepath.Join(d.AppPath, "Contents", "Library", "vmware-vdiskmanager")
|
||||||
|
}
|
||||||
|
|
||||||
func (d *Fusion5Driver) vmrunPath() string {
|
func (d *Fusion5Driver) vmrunPath() string {
|
||||||
return filepath.Join(d.AppPath, "Contents", "Library", "vmrun")
|
return filepath.Join(d.AppPath, "Contents", "Library", "vmrun")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue