github.com/gophercloud/gophercloud@v1.11.0/openstack/sharedfilesystems/v2/sharetransfers/requests.go (about)

     1  package sharetransfers
     2  
     3  import (
     4  	"github.com/gophercloud/gophercloud"
     5  	"github.com/gophercloud/gophercloud/pagination"
     6  )
     7  
     8  // CreateOptsBuilder allows extensions to add additional parameters to the
     9  // Create request.
    10  type CreateOptsBuilder interface {
    11  	ToTransferCreateMap() (map[string]interface{}, error)
    12  }
    13  
    14  // CreateOpts contains options for a Share transfer.
    15  type CreateOpts struct {
    16  	// The ID of the share to transfer.
    17  	ShareID string `json:"share_id" required:"true"`
    18  
    19  	// The name of the share transfer.
    20  	Name string `json:"name,omitempty"`
    21  }
    22  
    23  // ToCreateMap assembles a request body based on the contents of a
    24  // TransferOpts.
    25  func (opts CreateOpts) ToTransferCreateMap() (map[string]interface{}, error) {
    26  	return gophercloud.BuildRequestBody(opts, "transfer")
    27  }
    28  
    29  // Create will create a share tranfer request based on the values in CreateOpts.
    30  func Create(client *gophercloud.ServiceClient, opts CreateOptsBuilder) (r CreateResult) {
    31  	b, err := opts.ToTransferCreateMap()
    32  	if err != nil {
    33  		r.Err = err
    34  		return
    35  	}
    36  	resp, err := client.Post(transferURL(client), b, &r.Body, &gophercloud.RequestOpts{
    37  		OkCodes: []int{202},
    38  	})
    39  	_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
    40  	return
    41  }
    42  
    43  // AcceptOpts contains options for a Share transfer accept reqeust.
    44  type AcceptOpts struct {
    45  	// The auth key of the share transfer to accept.
    46  	AuthKey string `json:"auth_key" required:"true"`
    47  
    48  	// Whether to clear access rules when accept the share.
    49  	ClearAccessRules bool `json:"clear_access_rules,omitempty"`
    50  }
    51  
    52  // ToAcceptMap assembles a request body based on the contents of a
    53  // AcceptOpts.
    54  func (opts AcceptOpts) ToAcceptMap() (map[string]interface{}, error) {
    55  	return gophercloud.BuildRequestBody(opts, "accept")
    56  }
    57  
    58  // Accept will accept a share tranfer request based on the values in AcceptOpts.
    59  func Accept(client *gophercloud.ServiceClient, id string, opts AcceptOpts) (r AcceptResult) {
    60  	b, err := opts.ToAcceptMap()
    61  	if err != nil {
    62  		r.Err = err
    63  		return
    64  	}
    65  	resp, err := client.Post(acceptURL(client, id), b, nil, &gophercloud.RequestOpts{
    66  		OkCodes: []int{202},
    67  	})
    68  	_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
    69  	return
    70  }
    71  
    72  // Delete deletes a share transfer.
    73  func Delete(client *gophercloud.ServiceClient, id string) (r DeleteResult) {
    74  	resp, err := client.Delete(deleteURL(client, id), &gophercloud.RequestOpts{
    75  		// DELETE requests response with a 200 code, adding it here
    76  		OkCodes: []int{200, 202, 204},
    77  	})
    78  	_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
    79  	return
    80  }
    81  
    82  // ListOptsBuilder allows extensions to add additional parameters to the List
    83  // request.
    84  type ListOptsBuilder interface {
    85  	ToTransferListQuery() (string, error)
    86  }
    87  
    88  // ListOpts holds options for listing Transfers. It is passed to the sharetransfers.List
    89  // or sharetransfers.ListDetail functions.
    90  type ListOpts struct {
    91  	// AllTenants will retrieve transfers of all tenants/projects. Admin
    92  	// only.
    93  	AllTenants bool `q:"all_tenants"`
    94  
    95  	// The user defined name of the share transfer to filter resources by.
    96  	Name string `q:"name"`
    97  
    98  	// The name pattern that can be used to filter share transfers.
    99  	NamePattern string `q:"name~"`
   100  
   101  	// The key to sort a list of transfers. A valid value is id, name,
   102  	// resource_type, resource_id, source_project_id, destination_project_id,
   103  	// created_at, expires_at.
   104  	SortKey string `q:"sort_key"`
   105  
   106  	// The direction to sort a list of resources. A valid value is asc, or
   107  	// desc.
   108  	SortDir string `q:"sort_dir"`
   109  
   110  	// Requests a page size of items.
   111  	Limit int `q:"limit"`
   112  
   113  	// Used in conjunction with limit to return a slice of items.
   114  	Offset int `q:"offset"`
   115  
   116  	// The ID of the last-seen item.
   117  	Marker string `q:"marker"`
   118  }
   119  
   120  // ToTransferListQuery formats a ListOpts into a query string.
   121  func (opts ListOpts) ToTransferListQuery() (string, error) {
   122  	q, err := gophercloud.BuildQueryString(opts)
   123  	return q.String(), err
   124  }
   125  
   126  // List returns Transfers optionally limited by the conditions provided in ListOpts.
   127  func List(client *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager {
   128  	url := listURL(client)
   129  	if opts != nil {
   130  		query, err := opts.ToTransferListQuery()
   131  		if err != nil {
   132  			return pagination.Pager{Err: err}
   133  		}
   134  		url += query
   135  	}
   136  
   137  	return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
   138  		p := TransferPage{pagination.MarkerPageBase{PageResult: r}}
   139  		p.MarkerPageBase.Owner = p
   140  		return p
   141  	})
   142  }
   143  
   144  // List returns Transfers with details optionally limited by the conditions
   145  // provided in ListOpts.
   146  func ListDetail(client *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager {
   147  	url := listDetailURL(client)
   148  	if opts != nil {
   149  		query, err := opts.ToTransferListQuery()
   150  		if err != nil {
   151  			return pagination.Pager{Err: err}
   152  		}
   153  		url += query
   154  	}
   155  
   156  	return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
   157  		p := TransferPage{pagination.MarkerPageBase{PageResult: r}}
   158  		p.MarkerPageBase.Owner = p
   159  		return p
   160  	})
   161  }
   162  
   163  // Get retrieves the Transfer with the provided ID. To extract the Transfer object
   164  // from the response, call the Extract method on the GetResult.
   165  func Get(client *gophercloud.ServiceClient, id string) (r GetResult) {
   166  	resp, err := client.Get(getURL(client, id), &r.Body, nil)
   167  	_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
   168  	return
   169  }