From ebbc45abeadde4eb893c048c8fbe2b964367b585 Mon Sep 17 00:00:00 2001 From: jclagache Date: Sun, 6 Sep 2015 00:34:57 +0200 Subject: [PATCH] 1434-Added homebrew cask support for VMware Fusion This aims to lookup for Vmware Fusion required binaries (vmrun and vmware-vdiskmanager) in the system path first before falling back in the default Vmware Fusion installing path. Thereby, the vmwarefusion docker-machine driver can now be used even if Vmware Fusion is not installed in its default location (with brew cask for example). Signed-off-by: Jean-Christophe Lagache --- drivers/vmwarefusion/vmrun_darwin.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/vmwarefusion/vmrun_darwin.go b/drivers/vmwarefusion/vmrun_darwin.go index 917c1347fd..415160c6e0 100644 --- a/drivers/vmwarefusion/vmrun_darwin.go +++ b/drivers/vmwarefusion/vmrun_darwin.go @@ -8,16 +8,16 @@ import ( "bytes" "errors" "fmt" + "github.com/docker/machine/log" "os" "os/exec" + "path/filepath" "strings" - - "github.com/docker/machine/log" ) var ( - vmrunbin = "/Applications/VMware Fusion.app/Contents/Library/vmrun" - vdiskmanbin = "/Applications/VMware Fusion.app/Contents/Library/vmware-vdiskmanager" + vmrunbin = setVmwareCmd("vmrun") + vdiskmanbin = setVmwareCmd("vmware-vdiskmanager") ) var ( @@ -26,6 +26,14 @@ var ( ErrVMRUNNotFound = errors.New("VMRUN not found") ) +// detect the vmrun and vmware-vdiskmanager cmds' path if needed +func setVmwareCmd(cmd string) string { + if path, err := exec.LookPath(cmd); err == nil { + return path + } + return filepath.Join("/Applications/VMware Fusion.app/Contents/Library/", cmd) +} + func vmrun(args ...string) (string, string, error) { cmd := exec.Command(vmrunbin, args...) if os.Getenv("DEBUG") != "" {