diff --git a/builder/virtualbox/builder.go b/builder/virtualbox/builder.go index 0e7476eb5..7e2a732de 100644 --- a/builder/virtualbox/builder.go +++ b/builder/virtualbox/builder.go @@ -27,6 +27,7 @@ type Builder struct { type config struct { BootCommand []string `mapstructure:"boot_command"` BootWait time.Duration `` + DiskSize uint `mapstructure:"disk_size"` GuestOSType string `mapstructure:"guest_os_type"` HTTPDir string `mapstructure:"http_directory"` HTTPPortMin uint `mapstructure:"http_port_min"` @@ -61,6 +62,10 @@ func (b *Builder) Prepare(raws ...interface{}) error { } } + if b.config.DiskSize == 0 { + b.config.DiskSize = 40000 + } + if b.config.GuestOSType == "" { b.config.GuestOSType = "Other" } diff --git a/builder/virtualbox/builder_test.go b/builder/virtualbox/builder_test.go index 6a741d0e1..92b6cae21 100644 --- a/builder/virtualbox/builder_test.go +++ b/builder/virtualbox/builder_test.go @@ -75,6 +75,32 @@ func TestBuilderPrepare_BootWait(t *testing.T) { } } +func TestBuilderPrepare_DiskSize(t *testing.T) { + var b Builder + config := testConfig() + + delete(config, "disk_size") + err := b.Prepare(config) + if err != nil { + t.Fatalf("bad err: %s", err) + } + + if b.config.DiskSize != 40000 { + t.Fatalf("bad size: %d", b.config.DiskSize) + } + + config["disk_size"] = 60000 + b = Builder{} + err = b.Prepare(config) + if err != nil { + t.Fatalf("should not have error: %s", err) + } + + if b.config.DiskSize != 60000 { + t.Fatalf("bad size: %s", b.config.DiskSize) + } +} + func TestBuilderPrepare_HTTPPort(t *testing.T) { var b Builder config := testConfig() diff --git a/builder/virtualbox/step_create_disk.go b/builder/virtualbox/step_create_disk.go index e48825e21..b7d221c2d 100644 --- a/builder/virtualbox/step_create_disk.go +++ b/builder/virtualbox/step_create_disk.go @@ -5,6 +5,7 @@ import ( "github.com/mitchellh/multistep" "github.com/mitchellh/packer/packer" "path/filepath" + "strconv" "strings" ) @@ -24,7 +25,7 @@ func (s *stepCreateDisk) Run(state map[string]interface{}) multistep.StepAction command := []string{ "createhd", "--filename", path, - "--size", "40000", + "--size", strconv.FormatUint(uint64(config.DiskSize), 10), "--format", format, "--variant", "Standard", }