packer-cn/builder/vmware/driver.go

61 lines
1.5 KiB
Go
Raw Normal View History

2013-06-06 15:19:38 -04:00
package vmware
import (
2013-06-08 00:46:59 -04:00
"fmt"
"runtime"
2013-06-06 15:19:38 -04:00
)
// A driver is able to talk to VMware, control virtual machines, etc.
type Driver interface {
2013-07-01 22:25:33 -04:00
// CompactDisk compacts a virtual disk.
CompactDisk(string) error
2013-06-06 15:19:38 -04:00
// CreateDisk creates a virtual disk with the given size.
CreateDisk(string, string) error
// Checks if the VMX file at the given path is running.
IsRunning(string) (bool, error)
2013-06-06 15:19:38 -04:00
// Start starts a VM specified by the path to the VMX given.
2013-07-02 00:13:13 -04:00
Start(string, bool) error
2013-06-06 15:19:38 -04:00
// Stop stops a VM specified by the path to the VMX given.
Stop(string) error
2013-06-08 00:46:59 -04:00
// Get the path to the VMware ISO for the given flavor.
ToolsIsoPath(string) string
// Get the path to the DHCP leases file for the given device.
DhcpLeasesPath(string) string
2013-06-08 00:46:59 -04:00
// 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
2013-06-06 15:19:38 -04:00
}
// NewDriver returns a new driver implementation for this operating
// system, or an error if the driver couldn't be initialized.
func NewDriver() (Driver, error) {
var driver Driver
2013-06-08 00:46:59 -04:00
switch runtime.GOOS {
case "darwin":
driver = &Fusion5Driver{
AppPath: "/Applications/VMware Fusion.app",
2013-06-08 00:46:59 -04:00
}
case "linux":
case "windows":
driver = &Workstation9Driver{}
default:
return nil, fmt.Errorf("can't find driver for OS: %s", runtime.GOOS)
2013-06-08 00:46:59 -04:00
}
if err := driver.Verify(); err != nil {
return nil, err
2013-06-08 00:46:59 -04:00
}
return driver, nil
}