From 7a9499e1f08538e8864ed9762033209fd5a19245 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Tue, 11 Jun 2013 16:44:43 -0700 Subject: [PATCH] builder/virtualbox: Attach the hard drive, not quite working yet --- builder/virtualbox/step_create_disk.go | 23 +++++++++++++++++++++++ builder/virtualbox/step_create_vm.go | 6 ++++++ 2 files changed, 29 insertions(+) diff --git a/builder/virtualbox/step_create_disk.go b/builder/virtualbox/step_create_disk.go index a558e6b99..4e97dbd13 100644 --- a/builder/virtualbox/step_create_disk.go +++ b/builder/virtualbox/step_create_disk.go @@ -19,6 +19,7 @@ func (s *stepCreateDisk) Run(state map[string]interface{}) multistep.StepAction config := state["config"].(*config) driver := state["driver"].(Driver) ui := state["ui"].(packer.Ui) + vmName := state["vmName"].(string) format := "VDI" path := filepath.Join(config.OutputDir, fmt.Sprintf("%s.%s", config.VMName, strings.ToLower(format))) @@ -41,6 +42,28 @@ func (s *stepCreateDisk) Run(state map[string]interface{}) multistep.StepAction // Set the path so that we can delete it later s.diskPath = path + // Add the IDE controller so we can later attach the disk + controllerName := "IDE Controller" + err = driver.VBoxManage("storagectl", vmName, "--name", controllerName, "--add", "ide") + if err != nil { + ui.Error(fmt.Sprintf("Error creating disk controller: %s", err)) + return multistep.ActionHalt + } + + // Attach the disk to the controller + command = []string{ + "storagectl", vmName, + "--storagectl", controllerName, + "--port", "0", + "--device", "0", + "--type", "hdd", + "--medium", path, + } + if err := driver.VBoxManage(command...); err != nil { + ui.Error(fmt.Sprintf("Error attaching hard drive: %s", err)) + return multistep.ActionHalt + } + time.Sleep(15 * time.Second) return multistep.ActionContinue } diff --git a/builder/virtualbox/step_create_vm.go b/builder/virtualbox/step_create_vm.go index da61ff986..a3d34868f 100644 --- a/builder/virtualbox/step_create_vm.go +++ b/builder/virtualbox/step_create_vm.go @@ -7,6 +7,9 @@ import ( ) // This step creates the actual virtual machine. +// +// Produces: +// vmName string - The name of the VM type stepCreateVM struct{ vmName string } @@ -41,6 +44,9 @@ func (s *stepCreateVM) Run(state map[string]interface{}) multistep.StepAction { } } + // Set the final name in the state bag so others can use it + state["vmName"] = s.vmName + return multistep.ActionContinue }