| Samuel A. Falvo II | 17ae565 | 2014-02-12 20:47:43 -0800 | [diff] [blame] | 1 | package images | 
|  | 2 |  | 
| Ash Wilson | 9ccf9b6 | 2014-09-17 10:07:52 -0400 | [diff] [blame] | 3 | import ( | 
|  | 4 | "github.com/mitchellh/mapstructure" | 
| Ash Wilson | d2f8703 | 2014-09-25 11:34:41 -0400 | [diff] [blame^] | 5 | "github.com/rackspace/gophercloud" | 
| Ash Wilson | 9ccf9b6 | 2014-09-17 10:07:52 -0400 | [diff] [blame] | 6 | "github.com/rackspace/gophercloud/pagination" | 
|  | 7 | ) | 
| Samuel A. Falvo II | 17ae565 | 2014-02-12 20:47:43 -0800 | [diff] [blame] | 8 |  | 
| Ash Wilson | d2f8703 | 2014-09-25 11:34:41 -0400 | [diff] [blame^] | 9 | // GetResult temporarily stores a Get response. | 
|  | 10 | type GetResult struct { | 
|  | 11 | gophercloud.CommonResult | 
|  | 12 | } | 
|  | 13 |  | 
|  | 14 | // Extract interprets a GetResult as an Image. | 
|  | 15 | func (gr GetResult) Extract() (*Image, error) { | 
|  | 16 | if gr.Err != nil { | 
|  | 17 | return nil, gr.Err | 
|  | 18 | } | 
|  | 19 |  | 
|  | 20 | var decoded struct { | 
|  | 21 | Image Image `mapstructure:"image"` | 
|  | 22 | } | 
|  | 23 |  | 
|  | 24 | err := mapstructure.Decode(gr.Resp, &decoded) | 
|  | 25 | return &decoded.Image, err | 
|  | 26 | } | 
|  | 27 |  | 
| Samuel A. Falvo II | 17ae565 | 2014-02-12 20:47:43 -0800 | [diff] [blame] | 28 | // Image is used for JSON (un)marshalling. | 
|  | 29 | // It provides a description of an OS image. | 
| Samuel A. Falvo II | 17ae565 | 2014-02-12 20:47:43 -0800 | [diff] [blame] | 30 | type Image struct { | 
| Ash Wilson | 9ccf9b6 | 2014-09-17 10:07:52 -0400 | [diff] [blame] | 31 | // ID contains the image's unique identifier. | 
|  | 32 | ID string | 
|  | 33 |  | 
|  | 34 | Created string | 
|  | 35 |  | 
|  | 36 | // MinDisk and MinRAM specify the minimum resources a server must provide to be able to install the image. | 
|  | 37 | MinDisk int | 
|  | 38 | MinRAM  int | 
|  | 39 |  | 
|  | 40 | // Name provides a human-readable moniker for the OS image. | 
|  | 41 | Name string | 
|  | 42 |  | 
|  | 43 | // The Progress and Status fields indicate image-creation status. | 
|  | 44 | // Any usable image will have 100% progress. | 
| Samuel A. Falvo II | e246ac0 | 2014-02-13 23:20:09 -0800 | [diff] [blame] | 45 | Progress int | 
|  | 46 | Status   string | 
| Ash Wilson | 9ccf9b6 | 2014-09-17 10:07:52 -0400 | [diff] [blame] | 47 |  | 
|  | 48 | Updated string | 
| Samuel A. Falvo II | 17ae565 | 2014-02-12 20:47:43 -0800 | [diff] [blame] | 49 | } | 
|  | 50 |  | 
| Ash Wilson | 9ccf9b6 | 2014-09-17 10:07:52 -0400 | [diff] [blame] | 51 | // ExtractImages converts a page of List results into a slice of usable Image structs. | 
|  | 52 | func ExtractImages(page pagination.Page) ([]Image, error) { | 
| Ash Wilson | fd04379 | 2014-09-17 10:40:17 -0400 | [diff] [blame] | 53 | casted := page.(ListPage).Body | 
| Ash Wilson | faf006d | 2014-09-24 17:10:58 -0400 | [diff] [blame] | 54 | var results struct { | 
|  | 55 | Images []Image `mapstructure:"images"` | 
|  | 56 | } | 
| Samuel A. Falvo II | 17ae565 | 2014-02-12 20:47:43 -0800 | [diff] [blame] | 57 |  | 
| Ash Wilson | faf006d | 2014-09-24 17:10:58 -0400 | [diff] [blame] | 58 | err := mapstructure.Decode(casted, &results) | 
|  | 59 | return results.Images, err | 
| Samuel A. Falvo II | 808bb63 | 2014-03-12 00:07:50 -0700 | [diff] [blame] | 60 | } |