github.com/mponton/terratest@v0.44.0/modules/oci/compute.go (about) 1 package oci 2 3 import ( 4 "context" 5 "fmt" 6 "sort" 7 8 "github.com/mponton/terratest/modules/logger" 9 "github.com/mponton/terratest/modules/testing" 10 "github.com/oracle/oci-go-sdk/common" 11 "github.com/oracle/oci-go-sdk/core" 12 ) 13 14 // DeleteImage deletes a custom image with given OCID. 15 func DeleteImage(t testing.TestingT, ocid string) { 16 err := DeleteImageE(t, ocid) 17 if err != nil { 18 t.Fatal(err) 19 } 20 } 21 22 // DeleteImageE deletes a custom image with given OCID. 23 func DeleteImageE(t testing.TestingT, ocid string) error { 24 logger.Logf(t, "Deleting image with OCID %s", ocid) 25 26 configProvider := common.DefaultConfigProvider() 27 client, err := core.NewComputeClientWithConfigurationProvider(configProvider) 28 if err != nil { 29 return err 30 } 31 32 request := core.DeleteImageRequest{ImageId: &ocid} 33 _, err = client.DeleteImage(context.Background(), request) 34 return err 35 } 36 37 // GetMostRecentImageID gets the OCID of the most recent image in the given compartment that has the given OS name and version. 38 func GetMostRecentImageID(t testing.TestingT, compartmentID string, osName string, osVersion string) string { 39 ocid, err := GetMostRecentImageIDE(t, compartmentID, osName, osVersion) 40 if err != nil { 41 t.Fatal(err) 42 } 43 return ocid 44 } 45 46 // GetMostRecentImageIDE gets the OCID of the most recent image in the given compartment that has the given OS name and version. 47 func GetMostRecentImageIDE(t testing.TestingT, compartmentID string, osName string, osVersion string) (string, error) { 48 configProvider := common.DefaultConfigProvider() 49 client, err := core.NewComputeClientWithConfigurationProvider(configProvider) 50 if err != nil { 51 return "", err 52 } 53 54 request := core.ListImagesRequest{ 55 CompartmentId: &compartmentID, 56 OperatingSystem: &osName, 57 OperatingSystemVersion: &osVersion, 58 } 59 response, err := client.ListImages(context.Background(), request) 60 if err != nil { 61 return "", err 62 } 63 64 if len(response.Items) == 0 { 65 return "", fmt.Errorf("No %s %s images found in the %s compartment", osName, osVersion, compartmentID) 66 } 67 68 mostRecentImage := mostRecentImage(response.Items) 69 return *mostRecentImage.Id, nil 70 } 71 72 // Image sorting code borrowed from: https://github.com/hashicorp/packer/blob/7f4112ba229309cfc0ebaa10ded2abdfaf1b22c8/builder/amazon/common/step_source_ami_info.go 73 type imageSort []core.Image 74 75 func (a imageSort) Len() int { return len(a) } 76 func (a imageSort) Swap(i, j int) { a[i], a[j] = a[j], a[i] } 77 func (a imageSort) Less(i, j int) bool { 78 iTime := a[i].TimeCreated.Unix() 79 jTime := a[j].TimeCreated.Unix() 80 return iTime < jTime 81 } 82 83 // mostRecentImage returns the most recent image out of a slice of images. 84 func mostRecentImage(images []core.Image) core.Image { 85 sortedImages := images 86 sort.Sort(imageSort(sortedImages)) 87 return sortedImages[len(sortedImages)-1] 88 }