github.com/mmcquillan/packer@v1.1.1-0.20171009221028-c85cf0483a5d/builder/oracle/oci/step_image.go (about)

     1  package oci
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/hashicorp/packer/packer"
     7  	"github.com/mitchellh/multistep"
     8  )
     9  
    10  type stepImage struct{}
    11  
    12  func (s *stepImage) Run(state multistep.StateBag) multistep.StepAction {
    13  	var (
    14  		driver     = state.Get("driver").(Driver)
    15  		ui         = state.Get("ui").(packer.Ui)
    16  		instanceID = state.Get("instance_id").(string)
    17  	)
    18  
    19  	ui.Say("Creating image from instance...")
    20  
    21  	image, err := driver.CreateImage(instanceID)
    22  	if err != nil {
    23  		err = fmt.Errorf("Error creating image from instance: %s", err)
    24  		ui.Error(err.Error())
    25  		state.Put("error", err)
    26  		return multistep.ActionHalt
    27  	}
    28  
    29  	err = driver.WaitForImageCreation(image.ID)
    30  	if err != nil {
    31  		err = fmt.Errorf("Error waiting for image creation to finish: %s", err)
    32  		ui.Error(err.Error())
    33  		state.Put("error", err)
    34  		return multistep.ActionHalt
    35  	}
    36  
    37  	// TODO(apryde): This is stale as .LifecycleState has changed to
    38  	// AVAILABLE at this point. Does it matter?
    39  	state.Put("image", image)
    40  
    41  	ui.Say("Image created.")
    42  
    43  	return multistep.ActionContinue
    44  }
    45  
    46  func (s *stepImage) Cleanup(state multistep.StateBag) {
    47  	// Nothing to do
    48  }