github.com/daniellockard/packer@v0.7.6-0.20141210173435-5a9390934716/builder/digitalocean/step_droplet_info.go (about) 1 package digitalocean 2 3 import ( 4 "fmt" 5 6 "github.com/mitchellh/multistep" 7 "github.com/mitchellh/packer/packer" 8 ) 9 10 type stepDropletInfo struct{} 11 12 func (s *stepDropletInfo) Run(state multistep.StateBag) multistep.StepAction { 13 client := state.Get("client").(DigitalOceanClient) 14 ui := state.Get("ui").(packer.Ui) 15 c := state.Get("config").(config) 16 dropletId := state.Get("droplet_id").(uint) 17 18 ui.Say("Waiting for droplet to become active...") 19 20 err := waitForDropletState("active", dropletId, client, c.stateTimeout) 21 if err != nil { 22 err := fmt.Errorf("Error waiting for droplet to become active: %s", err) 23 state.Put("error", err) 24 ui.Error(err.Error()) 25 return multistep.ActionHalt 26 } 27 28 // Set the IP on the state for later 29 ip, _, err := client.DropletStatus(dropletId) 30 if err != nil { 31 err := fmt.Errorf("Error retrieving droplet ID: %s", err) 32 state.Put("error", err) 33 ui.Error(err.Error()) 34 return multistep.ActionHalt 35 } 36 37 state.Put("droplet_ip", ip) 38 39 return multistep.ActionContinue 40 } 41 42 func (s *stepDropletInfo) Cleanup(state multistep.StateBag) { 43 // no cleanup 44 }