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  }