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 }