diff --git a/builder/vmware/builder.go b/builder/vmware/builder.go index 9db092c0d..fa0707e90 100644 --- a/builder/vmware/builder.go +++ b/builder/vmware/builder.go @@ -27,6 +27,7 @@ type config struct { DiskName string `mapstructure:"vmdk_name"` DiskSize uint `mapstructure:"disk_size"` + DiskTypeId string `mapstructure:"disk_type_id"` FloppyFiles []string `mapstructure:"floppy_files"` GuestOSType string `mapstructure:"guest_os_type"` ISOChecksum string `mapstructure:"iso_checksum"` @@ -84,6 +85,11 @@ func (b *Builder) Prepare(raws ...interface{}) error { b.config.DiskSize = 40000 } + if b.config.DiskTypeId == "" { + // Default is growable virtual disk split in 2GB files. + b.config.DiskTypeId = "1" + } + if b.config.FloppyFiles == nil { b.config.FloppyFiles = make([]string, 0) } diff --git a/builder/vmware/driver.go b/builder/vmware/driver.go index eb1f9ae52..0cec538c5 100644 --- a/builder/vmware/driver.go +++ b/builder/vmware/driver.go @@ -15,7 +15,7 @@ type Driver interface { CompactDisk(string) error // CreateDisk creates a virtual disk with the given size. - CreateDisk(string, string) error + CreateDisk(string, string, string) error // Checks if the VMX file at the given path is running. IsRunning(string) (bool, error) diff --git a/builder/vmware/driver_fusion5.go b/builder/vmware/driver_fusion5.go index 7e6d63e69..d86770a96 100644 --- a/builder/vmware/driver_fusion5.go +++ b/builder/vmware/driver_fusion5.go @@ -28,8 +28,8 @@ func (d *Fusion5Driver) CompactDisk(diskPath string) error { return nil } -func (d *Fusion5Driver) CreateDisk(output string, size string) error { - cmd := exec.Command(d.vdiskManagerPath(), "-c", "-s", size, "-a", "lsilogic", "-t", "1", output) +func (d *Fusion5Driver) CreateDisk(output string, size string, type_id string) error { + cmd := exec.Command(d.vdiskManagerPath(), "-c", "-s", size, "-a", "lsilogic", "-t", type_id, output) if _, _, err := runAndLog(cmd); err != nil { return err } diff --git a/builder/vmware/driver_player5.go b/builder/vmware/driver_player5.go index 6dbf110a3..e5b72bfc1 100644 --- a/builder/vmware/driver_player5.go +++ b/builder/vmware/driver_player5.go @@ -51,12 +51,12 @@ func (d *Player5LinuxDriver) qemuCompactDisk(diskPath string) error { return nil } -func (d *Player5LinuxDriver) CreateDisk(output string, size string) error { +func (d *Player5LinuxDriver) CreateDisk(output string, size string, type_id string) error { var cmd *exec.Cmd if d.QemuImgPath != "" { cmd = exec.Command(d.QemuImgPath, "create", "-f", "vmdk", "-o", "compat6", output, size) } else { - cmd = exec.Command(d.VdiskManagerPath, "-c", "-s", size, "-a", "lsilogic", "-t", "1", output) + cmd = exec.Command(d.VdiskManagerPath, "-c", "-s", size, "-a", "lsilogic", "-t", type_id, output) } if _, _, err := runAndLog(cmd); err != nil { return err diff --git a/builder/vmware/driver_workstation9.go b/builder/vmware/driver_workstation9.go index ef236cbca..78b0e71d6 100644 --- a/builder/vmware/driver_workstation9.go +++ b/builder/vmware/driver_workstation9.go @@ -31,8 +31,8 @@ func (d *Workstation9Driver) CompactDisk(diskPath string) error { return nil } -func (d *Workstation9Driver) CreateDisk(output string, size string) error { - cmd := exec.Command(d.VdiskManagerPath, "-c", "-s", size, "-a", "lsilogic", "-t", "1", output) +func (d *Workstation9Driver) CreateDisk(output string, size string, type_id string) error { + cmd := exec.Command(d.VdiskManagerPath, "-c", "-s", size, "-a", "lsilogic", "-t", type_id, output) if _, _, err := runAndLog(cmd); err != nil { return err } diff --git a/builder/vmware/step_create_disk.go b/builder/vmware/step_create_disk.go index 34e9233c2..00bb0e2e2 100644 --- a/builder/vmware/step_create_disk.go +++ b/builder/vmware/step_create_disk.go @@ -25,7 +25,7 @@ func (stepCreateDisk) Run(state map[string]interface{}) multistep.StepAction { ui.Say("Creating virtual machine disk") full_disk_path := filepath.Join(config.OutputDir, config.DiskName+".vmdk") - if err := driver.CreateDisk(full_disk_path, fmt.Sprintf("%dM", config.DiskSize)); err != nil { + if err := driver.CreateDisk(full_disk_path, fmt.Sprintf("%dM", config.DiskSize), config.DiskTypeId); err != nil { err := fmt.Errorf("Error creating disk: %s", err) state["error"] = err ui.Error(err.Error())