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 }