github.com/mmcquillan/packer@v1.1.1-0.20171009221028-c85cf0483a5d/builder/oracle/oci/step_create_instance.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 stepCreateInstance struct{} 11 12 func (s *stepCreateInstance) Run(state multistep.StateBag) multistep.StepAction { 13 var ( 14 driver = state.Get("driver").(Driver) 15 ui = state.Get("ui").(packer.Ui) 16 publicKey = state.Get("publicKey").(string) 17 ) 18 19 ui.Say("Creating instance...") 20 21 instanceID, err := driver.CreateInstance(publicKey) 22 if err != nil { 23 err = fmt.Errorf("Problem creating instance: %s", err) 24 ui.Error(err.Error()) 25 state.Put("error", err) 26 return multistep.ActionHalt 27 } 28 29 state.Put("instance_id", instanceID) 30 31 ui.Say(fmt.Sprintf("Created instance (%s).", instanceID)) 32 33 ui.Say("Waiting for instance to enter 'RUNNING' state...") 34 35 if err = driver.WaitForInstanceState(instanceID, []string{"STARTING", "PROVISIONING"}, "RUNNING"); err != nil { 36 err = fmt.Errorf("Error waiting for instance to start: %s", err) 37 ui.Error(err.Error()) 38 state.Put("error", err) 39 return multistep.ActionHalt 40 } 41 42 ui.Say("Instance 'RUNNING'.") 43 44 return multistep.ActionContinue 45 } 46 47 func (s *stepCreateInstance) Cleanup(state multistep.StateBag) { 48 driver := state.Get("driver").(Driver) 49 ui := state.Get("ui").(packer.Ui) 50 51 idRaw, ok := state.GetOk("instance_id") 52 if !ok { 53 return 54 } 55 id := idRaw.(string) 56 57 ui.Say(fmt.Sprintf("Terminating instance (%s)...", id)) 58 59 if err := driver.TerminateInstance(id); err != nil { 60 err = fmt.Errorf("Error terminating instance. Please terminate manually: %s", err) 61 ui.Error(err.Error()) 62 state.Put("error", err) 63 return 64 } 65 66 err := driver.WaitForInstanceState(id, []string{"TERMINATING"}, "TERMINATED") 67 if err != nil { 68 err = fmt.Errorf("Error terminating instance. Please terminate manually: %s", err) 69 ui.Error(err.Error()) 70 state.Put("error", err) 71 return 72 } 73 74 ui.Say("Terminated instance.") 75 }