From 3ea4aa1a5a9fd45d044b8b37607534ac70d9f003 Mon Sep 17 00:00:00 2001 From: Paul Myjavec Date: Fri, 21 Feb 2014 15:20:54 +1100 Subject: [PATCH] added workstation 10 driver for linux --- builder/vmware/common/driver.go | 5 ++ builder/vmware/common/driver_workstation10.go | 68 +++++++++++++++++++ .../vmware/common/driver_workstation_unix.go | 2 +- 3 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 builder/vmware/common/driver_workstation10.go diff --git a/builder/vmware/common/driver.go b/builder/vmware/common/driver.go index 79721599c..2cf130fb9 100644 --- a/builder/vmware/common/driver.go +++ b/builder/vmware/common/driver.go @@ -75,6 +75,11 @@ func NewDriver(dconfig *DriverConfig, config *SSHConfig) (Driver, error) { } case "linux": drivers = []Driver{ + &Workstation10Driver { + Workstation9Driver: Workstation9Driver { + SSHConfig: config, + }, + }, &Workstation9Driver{ SSHConfig: config, }, diff --git a/builder/vmware/common/driver_workstation10.go b/builder/vmware/common/driver_workstation10.go new file mode 100644 index 000000000..31bad72fa --- /dev/null +++ b/builder/vmware/common/driver_workstation10.go @@ -0,0 +1,68 @@ +package common + +import ( + "os/exec" + "bytes" + "regexp" + "fmt" + "log" + "strings" + "runtime" +) + +// Workstation10Driver is a driver that can run VMware Workstation 10 +// installations. Current only tested for UNIX + +type Workstation10Driver struct { + Workstation9Driver +} + +func (d *Workstation10Driver) Clone(dst, src string) error { + cmd := exec.Command(d.Workstation9Driver.VmrunPath, + "-T", "ws", + "clone", src, dst, + "full") + + if _, _, err := runAndLog(cmd); err != nil { + return err + } + + return nil +} + +func (d *Workstation10Driver) Verify() error { + if runtime.GOOS != "linux" { + return fmt.Errorf("can't used driver WS 10 not yet supported on: %s", runtime.GOOS) + } + + if err := d.Workstation9Driver.Verify(); err != nil { + return err + } + + + //TODO(pmyjavec) there is a better way to find this, how? + //the default will suffice for now. + vmxpath := "/usr/lib/vmware/bin/vmware-vmx" + + var stderr bytes.Buffer + cmd := exec.Command(vmxpath, "-v") + cmd.Stderr = &stderr + if err := cmd.Run(); err != nil { + return err + } + + versionRe := regexp.MustCompile(`(?i)VMware Workstation (\d+\.\d+\.\d+)\s`) + matches := versionRe.FindStringSubmatch(stderr.String()) + if matches == nil { + return fmt.Errorf( + "Couldn't find VMware WS version in output: %s", stderr.String()) + } + log.Printf("Detected VMware WS version: %s", matches[1]) + + if !strings.HasPrefix(matches[1], "10.") { + return fmt.Errorf( + "WS 10 not detected. Got version: %s", matches[1]) + } + + return nil +} diff --git a/builder/vmware/common/driver_workstation_unix.go b/builder/vmware/common/driver_workstation_unix.go index f90c326f4..4bfe8857a 100644 --- a/builder/vmware/common/driver_workstation_unix.go +++ b/builder/vmware/common/driver_workstation_unix.go @@ -1,5 +1,5 @@ // +build !windows - +// These functions are compatible with WS 9 and 10 on *NIX package common import (