github.com/huaweicloud/golangsdk@v0.0.0-20210831081626-d823fe11ceba/openstack/compute/v2/images/results.go (about) 1 package images 2 3 import ( 4 "github.com/huaweicloud/golangsdk" 5 "github.com/huaweicloud/golangsdk/pagination" 6 ) 7 8 // GetResult is the response from a Get operation. Call its Extract method to 9 // interpret it as an Image. 10 type GetResult struct { 11 golangsdk.Result 12 } 13 14 // DeleteResult is the result from a Delete operation. Call its ExtractErr 15 // method to determine if the call succeeded or failed. 16 type DeleteResult struct { 17 golangsdk.ErrResult 18 } 19 20 // Extract interprets a GetResult as an Image. 21 func (r GetResult) Extract() (*Image, error) { 22 var s struct { 23 Image *Image `json:"image"` 24 } 25 err := r.ExtractInto(&s) 26 return s.Image, err 27 } 28 29 // Image represents an Image returned by the Compute API. 30 type Image struct { 31 // ID is the unique ID of an image. 32 ID string 33 34 // Created is the date when the image was created. 35 Created string 36 37 // MinDisk is the minimum amount of disk a flavor must have to be able 38 // to create a server based on the image, measured in GB. 39 MinDisk int 40 41 // MinRAM is the minimum amount of RAM a flavor must have to be able 42 // to create a server based on the image, measured in MB. 43 MinRAM int 44 45 // Name provides a human-readable moniker for the OS image. 46 Name string 47 48 // The Progress and Status fields indicate image-creation status. 49 Progress int 50 51 // Status is the current status of the image. 52 Status string 53 54 // Update is the date when the image was updated. 55 Updated string 56 57 // Metadata provides free-form key/value pairs that further describe the 58 // image. 59 Metadata map[string]interface{} 60 } 61 62 // ImagePage contains a single page of all Images returne from a ListDetail 63 // operation. Use ExtractImages to convert it into a slice of usable structs. 64 type ImagePage struct { 65 pagination.LinkedPageBase 66 } 67 68 // IsEmpty returns true if an ImagePage contains no Image results. 69 func (page ImagePage) IsEmpty() (bool, error) { 70 images, err := ExtractImages(page) 71 return len(images) == 0, err 72 } 73 74 // NextPageURL uses the response's embedded link reference to navigate to the 75 // next page of results. 76 func (page ImagePage) NextPageURL() (string, error) { 77 var s struct { 78 Links []golangsdk.Link `json:"images_links"` 79 } 80 err := page.ExtractInto(&s) 81 if err != nil { 82 return "", err 83 } 84 return golangsdk.ExtractNextURL(s.Links) 85 } 86 87 // ExtractImages converts a page of List results into a slice of usable Image 88 // structs. 89 func ExtractImages(r pagination.Page) ([]Image, error) { 90 var s struct { 91 Images []Image `json:"images"` 92 } 93 err := (r.(ImagePage)).ExtractInto(&s) 94 return s.Images, err 95 }