Ditto for Images.
I'm guessing that the images service also uses marker-and-limit pagination. I'll have to
check when I'm less :airplane:.
diff --git a/openstack/compute/v2/images/images.go b/openstack/compute/v2/images/images.go
index c881092..c4e838e 100644
--- a/openstack/compute/v2/images/images.go
+++ b/openstack/compute/v2/images/images.go
@@ -1,52 +1,38 @@
package images
-import "github.com/mitchellh/mapstructure"
+import (
+ "github.com/mitchellh/mapstructure"
+ "github.com/rackspace/gophercloud/pagination"
+)
// Image is used for JSON (un)marshalling.
// It provides a description of an OS image.
-//
-// The Id field contains the image's unique identifier.
-// For example, this identifier will be useful for specifying which operating system to install on a new server instance.
-//
-// The MinDisk and MinRam fields specify the minimum resources a server must provide to be able to install the image.
-//
-// The Name field provides a human-readable moniker for the OS image.
-//
-// The Progress and Status fields indicate image-creation status.
-// Any usable image will have 100% progress.
-//
-// The Updated field indicates the last time this image was changed.
type Image struct {
- Created string
- Id string
- MinDisk int
- MinRam int
- Name string
+ // ID contains the image's unique identifier.
+ ID string
+
+ Created string
+
+ // MinDisk and MinRAM specify the minimum resources a server must provide to be able to install the image.
+ MinDisk int
+ MinRAM int
+
+ // Name provides a human-readable moniker for the OS image.
+ Name string
+
+ // The Progress and Status fields indicate image-creation status.
+ // Any usable image will have 100% progress.
Progress int
Status string
- Updated string
+
+ Updated string
}
-func GetImages(lr ListResults) ([]Image, error) {
- ia, ok := lr["images"]
- if !ok {
- return nil, ErrNotImplemented
- }
- ims := ia.([]interface{})
+// ExtractImages converts a page of List results into a slice of usable Image structs.
+func ExtractImages(page pagination.Page) ([]Image, error) {
+ casted := page.(ListResults).Body
+ var results []Image
- images := make([]Image, len(ims))
- for i, im := range ims {
- imageObj := im.(map[string]interface{})
- err := mapstructure.Decode(imageObj, &images[i])
- if err != nil {
- return images, err
- }
- }
- return images, nil
-}
-
-func GetImage(ir ImageResults) (Image, error) {
- image := Image{}
- err := mapstructure.Decode(ir, &image)
- return image, err
+ err := mapstructure.Decode(results, casted)
+ return results, err
}