github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/cbr/v3/members/requests.go (about) 1 package members 2 3 import ( 4 "github.com/chnsz/golangsdk" 5 "github.com/chnsz/golangsdk/pagination" 6 ) 7 8 // CreateOpts is the structure that used to batch add shared members. 9 type CreateOpts struct { 10 // Backup ID. 11 BackupId string `json:"-" required:"true"` 12 // The list of sharing members configuration. 13 Members []string `json:"members" required:"true"` 14 } 15 16 var requestOpts = golangsdk.RequestOpts{ 17 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 18 } 19 20 // Create is a method used to create a new checkpoint using given parameters. 21 func Create(client *golangsdk.ServiceClient, opts CreateOpts) ([]Member, error) { 22 b, err := golangsdk.BuildRequestBody(opts, "") 23 if err != nil { 24 return nil, err 25 } 26 27 var r struct { 28 Members []Member `json:"members"` 29 } 30 _, err = client.Post(rootURL(client, opts.BackupId), b, &r, &golangsdk.RequestOpts{ 31 MoreHeaders: requestOpts.MoreHeaders, 32 }) 33 return r.Members, err 34 } 35 36 // ListOpts is the structure that used to query backup shared list. 37 type ListOpts struct { 38 // Backup ID. 39 BackupId string `json:"-" required:"true"` 40 // The ID of the project that accepts the backup share. 41 DestProjectId string `q:"dest_project_id"` 42 // The ID of the image registered with the shared backup copy. 43 ImageId string `q:"image_id"` 44 // Number of records displayed per page. 45 // The value must be a positive integer. 46 Limit int `q:"limit"` 47 // ID of the last record displayed on the previous page. 48 Marker string `q:"marker"` 49 // Offset value. The value must be a positive integer. 50 Offset int `q:"offset"` 51 // A group of properties separated by commas (,) and sorting directions. 52 // The value is in the format of <key1>[:<direction>],<key2>[:<direction>], where the value of direction is 53 // asc (ascending order) or desc (descending order). 54 // If a direction is not specified, the default sorting direction is desc. 55 // The value of sort can contain a maximum of 255 characters. 56 // The key can be as follows: created_at, updated_at, name, status, protected_at, id 57 Sort string `q:"sort"` 58 // The status of the backup share. 59 Status string `q:"status"` 60 // Vault ID. 61 VaultId string `q:"vault_id"` 62 } 63 64 // List is a method used to query shared member list for specified backup using given parameters. 65 func List(client *golangsdk.ServiceClient, opts ListOpts) ([]Member, error) { 66 url := rootURL(client, opts.BackupId) 67 query, err := golangsdk.BuildQueryString(opts) 68 if err != nil { 69 return nil, err 70 } 71 url += query.String() 72 73 pages, err := pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page { 74 p := MemberPage{pagination.OffsetPageBase{PageResult: r}} 75 return p 76 }).AllPages() 77 78 if err != nil { 79 return nil, err 80 } 81 return ExtractMembers(pages) 82 } 83 84 // UpdateOpts is the structure that used to modify the shared member status. 85 type UpdateOpts struct { 86 // Backup ID. 87 BackupId string `json:"-" required:"true"` 88 // Member ID. 89 MemberId string `json:"-" required:"true"` 90 // Status of a shared backup 91 // The valid values are as follows: 92 // + accepted 93 // + pending 94 // + rejected 95 Status string `json:"status" required:"true"` 96 // Vault in which the shared backup is to be stored. 97 // Only UUID is supported. 98 // When updating the status of a backup sharing member: 99 // + If the backup is accepted, vault_id must be specified. 100 // + If the backup is rejected, vault_id is not required. 101 VaultId string `json:"vault_id,omitempty"` 102 } 103 104 // Update is a method used to modify the specified shared member using given parameters. 105 func Update(client *golangsdk.ServiceClient, opts UpdateOpts) (*Member, error) { 106 b, err := golangsdk.BuildRequestBody(opts, "") 107 if err != nil { 108 return nil, err 109 } 110 111 var r struct { 112 Member Member `json:"member"` 113 } 114 _, err = client.Put(resourceURL(client, opts.BackupId, opts.MemberId), b, &r, &golangsdk.RequestOpts{ 115 MoreHeaders: requestOpts.MoreHeaders, 116 }) 117 return &r.Member, err 118 } 119 120 // Delete is a method to remove a specified member from the specified backup. 121 func Delete(client *golangsdk.ServiceClient, backupId, memberId string) error { 122 _, err := client.Delete(resourceURL(client, backupId, memberId), &golangsdk.RequestOpts{ 123 MoreHeaders: requestOpts.MoreHeaders, 124 }) 125 return err 126 }