github.com/rothwerx/packer@v0.9.0/builder/googlecompute/step_create_image.go (about) 1 package googlecompute 2 3 import ( 4 "errors" 5 "fmt" 6 "time" 7 8 "github.com/mitchellh/multistep" 9 "github.com/mitchellh/packer/packer" 10 ) 11 12 // StepCreateImage represents a Packer build step that creates GCE machine 13 // images. 14 type StepCreateImage int 15 16 // Run executes the Packer build step that creates a GCE machine image. 17 // 18 // The image is created from the persistent disk used by the instance. The 19 // instance must be deleted and the disk retained before doing this step. 20 func (s *StepCreateImage) Run(state multistep.StateBag) multistep.StepAction { 21 config := state.Get("config").(*Config) 22 driver := state.Get("driver").(Driver) 23 ui := state.Get("ui").(packer.Ui) 24 25 ui.Say("Creating image...") 26 errCh := driver.CreateImage(config.ImageName, config.ImageDescription, config.Zone, config.DiskName) 27 var err error 28 select { 29 case err = <-errCh: 30 case <-time.After(config.stateTimeout): 31 err = errors.New("time out while waiting for image to register") 32 } 33 34 if err != nil { 35 err := fmt.Errorf("Error waiting for image: %s", err) 36 state.Put("error", err) 37 ui.Error(err.Error()) 38 return multistep.ActionHalt 39 } 40 41 state.Put("image_name", config.ImageName) 42 return multistep.ActionContinue 43 } 44 45 // Cleanup. 46 func (s *StepCreateImage) Cleanup(state multistep.StateBag) {}