github.com/angdraug/packer@v1.3.2/builder/amazon/chroot/step_prepare_device.go (about) 1 package chroot 2 3 import ( 4 "context" 5 "fmt" 6 "log" 7 "os" 8 9 "github.com/hashicorp/packer/helper/multistep" 10 "github.com/hashicorp/packer/packer" 11 ) 12 13 // StepPrepareDevice finds an available device and sets it. 14 type StepPrepareDevice struct { 15 } 16 17 func (s *StepPrepareDevice) Run(_ context.Context, state multistep.StateBag) multistep.StepAction { 18 config := state.Get("config").(*Config) 19 ui := state.Get("ui").(packer.Ui) 20 21 device := config.DevicePath 22 if device == "" { 23 var err error 24 log.Println("Device path not specified, searching for available device...") 25 device, err = AvailableDevice() 26 if err != nil { 27 err := fmt.Errorf("Error finding available device: %s", err) 28 state.Put("error", err) 29 ui.Error(err.Error()) 30 return multistep.ActionHalt 31 } 32 } 33 34 if _, err := os.Stat(device); err == nil { 35 err := fmt.Errorf("Device is in use: %s", device) 36 state.Put("error", err) 37 ui.Error(err.Error()) 38 return multistep.ActionHalt 39 } 40 41 log.Printf("Device: %s", device) 42 state.Put("device", device) 43 return multistep.ActionContinue 44 } 45 46 func (s *StepPrepareDevice) Cleanup(state multistep.StateBag) {}