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) {}