github.com/raghuse92/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  }