blob: 26be39e4f7067890b7bf454655aaca68f0485610 [file] [log] [blame]
Joe Topjian520307e2015-02-07 05:22:12 +00001package volumeattach
2
3import (
4 "github.com/mitchellh/mapstructure"
5 "github.com/rackspace/gophercloud"
6 "github.com/rackspace/gophercloud/pagination"
7)
8
9// VolumeAttach controls the attachment of a volume to an instance.
10type VolumeAttachment struct {
11 // ID is a unique id of the attachment
12 ID string `mapstructure:"id"`
13
14 // Device is what device the volume is attached as
15 Device string `mapstructure:"device"`
16
17 // VolumeID is the ID of the attached volume
18 VolumeID string `mapstructure:"volumeId"`
19
20 // ServerID is the ID of the instance that has the volume attached
21 ServerID string `mapstructure:"serverId"`
22}
23
24// VolumeAttachmentsPage stores a single, only page of VolumeAttachments
25// results from a List call.
26type VolumeAttachmentsPage struct {
27 pagination.SinglePageBase
28}
29
30// IsEmpty determines whether or not a VolumeAttachmentsPage is empty.
31func (page VolumeAttachmentsPage) IsEmpty() (bool, error) {
32 va, err := ExtractVolumeAttachments(page)
33 return len(va) == 0, err
34}
35
36// ExtractVolumeAttachments interprets a page of results as a slice of
37// VolumeAttachments.
38func ExtractVolumeAttachments(page pagination.Page) ([]VolumeAttachment, error) {
39 casted := page.(VolumeAttachmentsPage).Body
40 var response struct {
41 VolumeAttachments []VolumeAttachment `mapstructure:"volumeAttachments"`
42 }
43
44 err := mapstructure.WeakDecode(casted, &response)
45
46 return response.VolumeAttachments, err
47}
48
49type VolumeAttachmentResult struct {
50 gophercloud.Result
51}
52
53// Extract is a method that attempts to interpret any VolumeAttachment resource
54// response as a VolumeAttachment struct.
55func (r VolumeAttachmentResult) Extract() (*VolumeAttachment, error) {
56 if r.Err != nil {
57 return nil, r.Err
58 }
59
60 var res struct {
61 VolumeAttachment *VolumeAttachment `json:"volumeAttachment" mapstructure:"volumeAttachment"`
62 }
63
64 err := mapstructure.Decode(r.Body, &res)
65 return res.VolumeAttachment, err
66}
67
68// CreateResult is the response from a Create operation. Call its Extract method to interpret it
69// as a VolumeAttachment.
70type CreateResult struct {
71 VolumeAttachmentResult
72}
73
74// GetResult is the response from a Get operation. Call its Extract method to interpret it
75// as a VolumeAttachment.
76type GetResult struct {
77 VolumeAttachmentResult
78}
79
80// DeleteResult is the response from a Delete operation. Call its Extract method to determine if
81// the call succeeded or failed.
82type DeleteResult struct {
83 gophercloud.ErrResult
84}