blob: cfa8460aebb5606d6ad492e03c896e45b74b29c9 [file] [log] [blame]
package shares
import (
"github.com/gophercloud/gophercloud"
)
// CreateOptsBuilder allows extensions to add additional parameters to the
// Create request.
type CreateOptsBuilder interface {
ToShareCreateMap() (map[string]interface{}, error)
}
// CreateOpts contains the options for create a Share. This object is
// passed to shares.Create(). For more information about these parameters,
// please refer to the Share object, or the shared file systems API v2
// documentation
type CreateOpts struct {
// Defines the share protocol to use
ShareProto string `json:"share_proto" required:"true"`
// Size in GB
Size int `json:"size" required:"true"`
// Defines the share name
Name string `json:"name,omitempty"`
// Share description
Description string `json:"description,omitempty"`
// DisplayName is equivalent to Name. The API supports using both
// This is an inherited attribute from the block storage API
DisplayName string `json:"display_name,omitempty"`
// DisplayDescription is equivalent to Description. The API supports using bot
// This is an inherited attribute from the block storage API
DisplayDescription string `json:"display_description,omitempty"`
// ShareType defines the sharetype. If omitted, a default share type is used
ShareType string `json:"share_type,omitempty"`
// VolumeType is deprecated but supported. Either ShareType or VolumeType can be used
VolumeType string `json:"volume_type,omitempty"`
// The UUID from which to create a share
SnapshotID string `json:"snapshot_id,omitempty"`
// Determines whether or not the share is public
IsPublic *bool `json:"is_public,omitempty"`
// Key value pairs of user defined metadata
Metadata map[string]string `json:"metadata,omitempty"`
// The UUID of the share network to which the share belongs to
ShareNetworkID string `json:"share_network_id,omitempty"`
// The UUID of the consistency group to which the share belongs to
ConsistencyGroupID string `json:"consistency_group_id,omitempty"`
// The availability zone of the share
AvailabilityZone string `json:"availability_zone,omitempty"`
}
// ToShareCreateMap assembles a request body based on the contents of a
// CreateOpts.
func (opts CreateOpts) ToShareCreateMap() (map[string]interface{}, error) {
return gophercloud.BuildRequestBody(opts, "share")
}
// Create will create a new Share based on the values in CreateOpts. To extract
// the Share object from the response, call the Extract method on the
// CreateResult.
func Create(client *gophercloud.ServiceClient, opts CreateOptsBuilder) (r CreateResult) {
b, err := opts.ToShareCreateMap()
if err != nil {
r.Err = err
return
}
_, r.Err = client.Post(createURL(client), b, &r.Body, &gophercloud.RequestOpts{
OkCodes: []int{200, 201},
})
return
}
// Delete will delete an existing Share with the given UUID.
func Delete(client *gophercloud.ServiceClient, id string) (r DeleteResult) {
_, r.Err = client.Delete(deleteURL(client, id), nil)
return
}
// Get will get a single share with given UUID
func Get(client *gophercloud.ServiceClient, id string) (r GetResult) {
_, r.Err = client.Get(getURL(client, id), &r.Body, nil)
return
}