68 lines
1.4 KiB
Go
68 lines
1.4 KiB
Go
package vagrant
|
|
|
|
import (
|
|
"fmt"
|
|
"os/exec"
|
|
"runtime"
|
|
)
|
|
|
|
// A driver is able to talk to Vagrant and perform certain
|
|
// operations with it.
|
|
|
|
type VagrantDriver interface {
|
|
// Calls "vagrant init"
|
|
Init([]string) error
|
|
|
|
// Calls "vagrant add"
|
|
Add([]string) error
|
|
|
|
// Calls "vagrant up"
|
|
Up([]string) (string, string, error)
|
|
|
|
// Calls "vagrant halt"
|
|
Halt(string) error
|
|
|
|
// Calls "vagrant suspend"
|
|
Suspend(string) error
|
|
|
|
SSHConfig(string) (*VagrantSSHConfig, error)
|
|
|
|
// Calls "vagrant destroy"
|
|
Destroy(string) error
|
|
|
|
// Calls "vagrant package"[
|
|
Package([]string) error
|
|
|
|
// Verify checks to make sure that this driver should function
|
|
// properly. If there is any indication the driver can't function,
|
|
// this will return an error.
|
|
Verify() error
|
|
|
|
// Version reads the version of VirtualBox that is installed.
|
|
Version() (string, error)
|
|
}
|
|
|
|
func NewDriver(outputDir string) (VagrantDriver, error) {
|
|
// Hardcode path for now while I'm developing. Obviously this path needs
|
|
// to be discovered based on OS.
|
|
vagrantBinary := "vagrant"
|
|
if runtime.GOOS == "windows" {
|
|
vagrantBinary = "vagrant.exe"
|
|
}
|
|
|
|
if _, err := exec.LookPath(vagrantBinary); err != nil {
|
|
return nil, fmt.Errorf("Error: Packer cannot find Vagrant in the path: %s", err.Error())
|
|
}
|
|
|
|
driver := &Vagrant_2_2_Driver{
|
|
vagrantBinary: vagrantBinary,
|
|
VagrantCWD: outputDir,
|
|
}
|
|
|
|
if err := driver.Verify(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return driver, nil
|
|
}
|