github.com/kaixiang/packer@v0.5.2-0.20140114230416-1f5786b0d7f1/builder/googlecompute/step_register_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 // StepRegisterImage represents a Packer build step that registers GCE machine images. 13 type StepRegisterImage int 14 15 // Run executes the Packer build step that registers a GCE machine image. 16 func (s *StepRegisterImage) Run(state multistep.StateBag) multistep.StepAction { 17 config := state.Get("config").(*Config) 18 driver := state.Get("driver").(Driver) 19 ui := state.Get("ui").(packer.Ui) 20 21 var err error 22 imageURL := fmt.Sprintf( 23 "https://storage.cloud.google.com/%s/%s.tar.gz", 24 config.BucketName, config.ImageName) 25 26 ui.Say("Registering image...") 27 errCh := driver.CreateImage(config.ImageName, config.ImageDescription, imageURL) 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 *StepRegisterImage) Cleanup(state multistep.StateBag) {}