github.com/gophercloud/gophercloud@v1.11.0/openstack/compute/v2/extensions/shelveunshelve/requests.go (about) 1 package shelveunshelve 2 3 import ( 4 "github.com/gophercloud/gophercloud" 5 "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions" 6 ) 7 8 // Shelve is the operation responsible for shelving a Compute server. 9 func Shelve(client *gophercloud.ServiceClient, id string) (r ShelveResult) { 10 resp, err := client.Post(extensions.ActionURL(client, id), map[string]interface{}{"shelve": nil}, nil, nil) 11 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 12 return 13 } 14 15 // ShelveOffload is the operation responsible for Shelve-Offload a Compute server. 16 func ShelveOffload(client *gophercloud.ServiceClient, id string) (r ShelveOffloadResult) { 17 resp, err := client.Post(extensions.ActionURL(client, id), map[string]interface{}{"shelveOffload": nil}, nil, nil) 18 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 19 return 20 } 21 22 // UnshelveOptsBuilder allows extensions to add additional parameters to the 23 // Unshelve request. 24 type UnshelveOptsBuilder interface { 25 ToUnshelveMap() (map[string]interface{}, error) 26 } 27 28 // UnshelveOpts specifies parameters of shelve-offload action. 29 type UnshelveOpts struct { 30 // Sets the availability zone to unshelve a server 31 // Available only after nova 2.77 32 AvailabilityZone string `json:"availability_zone,omitempty"` 33 } 34 35 func (opts UnshelveOpts) ToUnshelveMap() (map[string]interface{}, error) { 36 // Key 'availabilty_zone' is required if the unshelve action is an object 37 // i.e {"unshelve": {}} will be rejected 38 b, err := gophercloud.BuildRequestBody(opts, "unshelve") 39 if err != nil { 40 return nil, err 41 } 42 43 if _, ok := b["unshelve"].(map[string]interface{})["availability_zone"]; !ok { 44 b["unshelve"] = nil 45 } 46 47 return b, err 48 } 49 50 // Unshelve is the operation responsible for unshelve a Compute server. 51 func Unshelve(client *gophercloud.ServiceClient, id string, opts UnshelveOptsBuilder) (r UnshelveResult) { 52 b, err := opts.ToUnshelveMap() 53 if err != nil { 54 r.Err = err 55 return 56 } 57 resp, err := client.Post(extensions.ActionURL(client, id), b, nil, nil) 58 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 59 return 60 }