github.com/gophercloud/gophercloud@v1.11.0/openstack/imageservice/v2/members/requests.go (about)

     1  package members
     2  
     3  import (
     4  	"github.com/gophercloud/gophercloud"
     5  	"github.com/gophercloud/gophercloud/pagination"
     6  )
     7  
     8  /*
     9  Create member for specific image
    10  
    11  # Preconditions
    12  
    13    - The specified images must exist.
    14    - You can only add a new member to an image which 'visibility' attribute is
    15      private.
    16    - You must be the owner of the specified image.
    17  
    18  # Synchronous Postconditions
    19  
    20  With correct permissions, you can see the member status of the image as
    21  pending through API calls.
    22  
    23  More details here:
    24  http://developer.openstack.org/api-ref-image-v2.html#createImageMember-v2
    25  */
    26  func Create(client *gophercloud.ServiceClient, id string, member string) (r CreateResult) {
    27  	b := map[string]interface{}{"member": member}
    28  	resp, err := client.Post(createMemberURL(client, id), b, &r.Body, &gophercloud.RequestOpts{
    29  		OkCodes: []int{200},
    30  	})
    31  	_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
    32  	return
    33  }
    34  
    35  // List members returns list of members for specifed image id.
    36  func List(client *gophercloud.ServiceClient, id string) pagination.Pager {
    37  	return pagination.NewPager(client, listMembersURL(client, id), func(r pagination.PageResult) pagination.Page {
    38  		return MemberPage{pagination.SinglePageBase(r)}
    39  	})
    40  }
    41  
    42  // Get image member details.
    43  func Get(client *gophercloud.ServiceClient, imageID string, memberID string) (r DetailsResult) {
    44  	resp, err := client.Get(getMemberURL(client, imageID, memberID), &r.Body, &gophercloud.RequestOpts{OkCodes: []int{200}})
    45  	_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
    46  	return
    47  }
    48  
    49  // Delete membership for given image. Callee should be image owner.
    50  func Delete(client *gophercloud.ServiceClient, imageID string, memberID string) (r DeleteResult) {
    51  	resp, err := client.Delete(deleteMemberURL(client, imageID, memberID), &gophercloud.RequestOpts{OkCodes: []int{204}})
    52  	_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
    53  	return
    54  }
    55  
    56  // UpdateOptsBuilder allows extensions to add additional attributes to the
    57  // Update request.
    58  type UpdateOptsBuilder interface {
    59  	ToImageMemberUpdateMap() (map[string]interface{}, error)
    60  }
    61  
    62  // UpdateOpts represents options to an Update request.
    63  type UpdateOpts struct {
    64  	Status string
    65  }
    66  
    67  // ToMemberUpdateMap formats an UpdateOpts structure into a request body.
    68  func (opts UpdateOpts) ToImageMemberUpdateMap() (map[string]interface{}, error) {
    69  	return map[string]interface{}{
    70  		"status": opts.Status,
    71  	}, nil
    72  }
    73  
    74  // Update function updates member.
    75  func Update(client *gophercloud.ServiceClient, imageID string, memberID string, opts UpdateOptsBuilder) (r UpdateResult) {
    76  	b, err := opts.ToImageMemberUpdateMap()
    77  	if err != nil {
    78  		r.Err = err
    79  		return
    80  	}
    81  	resp, err := client.Put(updateMemberURL(client, imageID, memberID), b, &r.Body,
    82  		&gophercloud.RequestOpts{OkCodes: []int{200}})
    83  	_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
    84  	return
    85  }