github.com/rothwerx/packer@v0.9.0/builder/googlecompute/step_teardown_instance.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 // StepTeardownInstance represents a Packer build step that tears down GCE 13 // instances. 14 type StepTeardownInstance struct { 15 Debug bool 16 } 17 18 // Run executes the Packer build step that tears down a GCE instance. 19 func (s *StepTeardownInstance) Run(state multistep.StateBag) multistep.StepAction { 20 config := state.Get("config").(*Config) 21 driver := state.Get("driver").(Driver) 22 ui := state.Get("ui").(packer.Ui) 23 24 name := config.InstanceName 25 if name == "" { 26 return multistep.ActionHalt 27 } 28 29 ui.Say("Deleting instance...") 30 errCh, err := driver.DeleteInstance(config.Zone, name) 31 if err == nil { 32 select { 33 case err = <-errCh: 34 case <-time.After(config.stateTimeout): 35 err = errors.New("time out while waiting for instance to delete") 36 } 37 } 38 39 if err != nil { 40 ui.Error(fmt.Sprintf( 41 "Error deleting instance. Please delete it manually.\n\n"+ 42 "Name: %s\n"+ 43 "Error: %s", name, err)) 44 return multistep.ActionHalt 45 } 46 47 ui.Message("Instance has been deleted!") 48 state.Put("instance_name", "") 49 50 return multistep.ActionContinue 51 } 52 53 // Deleting the instance does not remove the boot disk. This cleanup removes 54 // the disk. 55 func (s *StepTeardownInstance) Cleanup(state multistep.StateBag) { 56 config := state.Get("config").(*Config) 57 driver := state.Get("driver").(Driver) 58 ui := state.Get("ui").(packer.Ui) 59 60 ui.Say("Deleting disk...") 61 errCh, err := driver.DeleteDisk(config.Zone, config.DiskName) 62 if err == nil { 63 select { 64 case err = <-errCh: 65 case <-time.After(config.stateTimeout): 66 err = errors.New("time out while waiting for disk to delete") 67 } 68 } 69 70 if err != nil { 71 ui.Error(fmt.Sprintf( 72 "Error deleting disk. Please delete it manually.\n\n"+ 73 "Name: %s\n"+ 74 "Error: %s", config.InstanceName, err)) 75 } 76 77 ui.Message("Disk has been deleted!") 78 79 return 80 }