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