github.com/angdraug/packer@v1.3.2/builder/oracle/classic/step_list_images.go (about) 1 package classic 2 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/hashicorp/go-oracle-terraform/compute" 8 "github.com/hashicorp/packer/helper/multistep" 9 "github.com/hashicorp/packer/packer" 10 ) 11 12 type stepListImages struct{} 13 14 func (s *stepListImages) Run(_ context.Context, state multistep.StateBag) multistep.StepAction { 15 // get variables from state 16 ui := state.Get("ui").(packer.Ui) 17 config := state.Get("config").(*Config) 18 client := state.Get("client").(*compute.ComputeClient) 19 ui.Say("Adding image to image list...") 20 21 imageListClient := client.ImageList() 22 getInput := compute.GetImageListInput{ 23 Name: config.DestImageList, 24 } 25 imList, err := imageListClient.GetImageList(&getInput) 26 if err != nil { 27 // If the list didn't exist, create it. 28 ui.Say(fmt.Sprintf(err.Error())) 29 ui.Say(fmt.Sprintf("Destination image list %s does not exist; Creating it...", 30 config.DestImageList)) 31 32 ilInput := compute.CreateImageListInput{ 33 Name: config.DestImageList, 34 Description: "Packer-built image list", 35 } 36 37 imList, err = imageListClient.CreateImageList(&ilInput) 38 if err != nil { 39 err = fmt.Errorf("Problem creating image list: %s", err) 40 ui.Error(err.Error()) 41 state.Put("error", err) 42 return multistep.ActionHalt 43 } 44 ui.Message(fmt.Sprintf("Image list %s created!", imList.URI)) 45 } 46 47 // Now create and image list entry for the image into that list. 48 snap := state.Get("snapshot").(*compute.Snapshot) 49 version := len(imList.Entries) + 1 50 entriesClient := client.ImageListEntries() 51 entriesInput := compute.CreateImageListEntryInput{ 52 Name: config.DestImageList, 53 MachineImages: []string{fmt.Sprintf("/Compute-%s/%s/%s", 54 config.IdentityDomain, config.Username, snap.MachineImage)}, 55 Version: version, 56 } 57 entryInfo, err := entriesClient.CreateImageListEntry(&entriesInput) 58 if err != nil { 59 err = fmt.Errorf("Problem creating an image list entry: %s", err) 60 ui.Error(err.Error()) 61 state.Put("error", err) 62 return multistep.ActionHalt 63 } 64 state.Put("image_list_entry", entryInfo) 65 ui.Message(fmt.Sprintf("created image list entry %s", entryInfo.Name)) 66 67 machineImagesClient := client.MachineImages() 68 getImagesInput := compute.GetMachineImageInput{ 69 Name: config.ImageName, 70 } 71 72 // Update image list default to use latest version 73 updateInput := compute.UpdateImageListInput{ 74 Default: version, 75 Description: config.DestImageListDescription, 76 Name: config.DestImageList, 77 } 78 _, err = imageListClient.UpdateImageList(&updateInput) 79 if err != nil { 80 err = fmt.Errorf("Problem updating default image list version: %s", err) 81 ui.Error(err.Error()) 82 state.Put("error", err) 83 return multistep.ActionHalt 84 } 85 86 // Grab info about the machine image to return with the artifact 87 imInfo, err := machineImagesClient.GetMachineImage(&getImagesInput) 88 if err != nil { 89 err = fmt.Errorf("Problem getting machine image info: %s", err) 90 ui.Error(err.Error()) 91 state.Put("error", err) 92 return multistep.ActionHalt 93 } 94 state.Put("machine_image_file", imInfo.File) 95 state.Put("machine_image_name", imInfo.Name) 96 state.Put("image_list_version", version) 97 98 return multistep.ActionContinue 99 } 100 101 func (s *stepListImages) Cleanup(state multistep.StateBag) { 102 // Nothing to do 103 return 104 }