@@ -4,21 +4,20 @@ import (
44 "fmt"
55 "os"
66 "path/filepath"
7- "strings"
87 "text/template"
98
109 "github.com/boot2docker/boot2docker-cli/driver"
1110 "github.com/ogier/pflag"
1211)
1312
1413var (
15- verbose bool // Verbose mode (Local copy of B2D.Verbose) .
14+ verbose bool // Verbose mode.
1615 cfg DriverCfg
1716)
1817
1918type DriverCfg struct {
20- VMRUN string // Path to VBoxManage utility.
21- VMDK string // base VMDK to use as persistent disk .
19+ VMRUN string // Path to vmrun utility.
20+ VDISKMAN string // Path to vdiskmanager utility .
2221}
2322
2423func init () {
@@ -46,7 +45,10 @@ func InitFunc(mc *driver.MachineConfig) (driver.Machine, error) {
4645// Add cmdline params for this driver
4746func ConfigFlags (mc * driver.MachineConfig , flags * pflag.FlagSet ) error {
4847 cfg .VMRUN = "/Applications/VMware Fusion.app/Contents/Library/vmrun"
49- flags .StringVar (& cfg .VMRUN , "vmrun" , cfg .VMRUN , "path to vmrun management utility." )
48+ flags .StringVar (& cfg .VMRUN , "vmrun" , cfg .VMRUN , "path to vmrun utility." )
49+
50+ cfg .VDISKMAN = "/Applications/VMware Fusion.app/Contents/Library/vmware-vdiskmanager"
51+ flags .StringVar (& cfg .VDISKMAN , "vmdiskman" , cfg .VDISKMAN , "path to vdiskmanager utility." )
5052
5153 return nil
5254}
@@ -67,7 +69,7 @@ type Machine struct {
6769
6870// Refresh reloads the machine information.
6971func (m * Machine ) Refresh () error {
70- mm , err := GetMachine (m .Name )
72+ mm , err := GetMachine (m .VMX )
7173 mm .State = driver .Running
7274 if err != nil {
7375 return err
@@ -217,18 +219,32 @@ func CreateMachine(mc *driver.MachineConfig) (*Machine, error) {
217219 return nil , ErrMachineExist
218220 }
219221
222+ // Generate vmx config file from template
220223 vmxt := template .Must (template .New ("vmx" ).Parse (vmx ))
221224 vmxfile , err := os .Create (getVMX (mc ))
222225 if err != nil {
223226 return nil , err
224227 }
225228 vmxt .Execute (vmxfile , mc )
229+
230+ // Generate vmdk file
231+ diskImg := filepath .Join (getBaseFolder (mc ), fmt .Sprintf ("%s.vmdk" , mc .VM ))
232+ if _ , err := os .Stat (diskImg ); err != nil {
233+ if ! os .IsNotExist (err ) {
234+ return nil , err
235+ }
236+
237+ if err := vdiskmanager (diskImg , mc .DiskSize ); err != nil {
238+ return nil , err
239+ }
240+ }
241+
226242 return nil , nil
227243}
228244
229245func getBaseFolder (mc * driver.MachineConfig ) string {
230246 return filepath .Join (mc .Dir , mc .VM )
231247}
232248func getVMX (mc * driver.MachineConfig ) string {
233- return filepath .Join (getBaseFolder (mc ), strings . Join ([] string { mc . VM , " vmx"}, "." ))
249+ return filepath .Join (getBaseFolder (mc ), fmt . Sprintf ( "%s. vmx", mc . VM ))
234250}
0 commit comments