github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/dds/v3/roles/requests.go (about) 1 package roles 2 3 import ( 4 "github.com/chnsz/golangsdk" 5 "github.com/chnsz/golangsdk/pagination" 6 ) 7 8 var requestOpts = golangsdk.RequestOpts{ 9 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 10 } 11 12 // CreateOpts is the structure required by the Create method to create a new database role. 13 type CreateOpts struct { 14 // Role name. 15 // The length is 1~64 bits and can contain letters, numbers, hyphens, underscores and dots. 16 Name string `json:"role_name" required:"true"` 17 // The name of the database where the role is located. 18 // The length is 1~64 bits and can contain letters, numbers and underscores. 19 DbName string `json:"db_name,omitempty"` 20 // List of roles inherited by the newly created role. 21 Roles []Role `json:"roles,omitempty"` 22 } 23 24 // Role is the object that represent the role details. 25 type Role struct { 26 // Role name. 27 // The length is 1~64 bits and can contain letters, numbers, hyphens, underscores and dots. 28 Name string `json:"role_name" required:"true"` 29 // The name of the database where the role is located. 30 // The length is 1~64 bits and can contain letters, numbers and underscores. 31 DbName string `json:"role_db_name" required:"true"` 32 } 33 34 // Create is a method to create a new database role using given parameters. 35 func Create(c *golangsdk.ServiceClient, instanceId string, opts CreateOpts) error { 36 b, err := golangsdk.BuildRequestBody(opts, "") 37 if err != nil { 38 return err 39 } 40 41 _, err = c.Post(rootURL(c, instanceId), b, nil, &golangsdk.RequestOpts{ 42 MoreHeaders: requestOpts.MoreHeaders, 43 }) 44 return err 45 } 46 47 // ListOpts allows to filter list data using given parameters. 48 type ListOpts struct { 49 // Role name. 50 // The length is 1~64 bits and can contain letters, numbers, hyphens, underscores and dots. 51 Name string `q:"role_name"` 52 // The name of the database where the role is located. 53 // The length is 1~64 bits and can contain letters, numbers and underscores. 54 DbName string `q:"db_name"` 55 // The offset number. 56 // Default value: 0. 57 Offset int `q:"offset"` 58 // Number of records to be queried. 59 // Value range: 0–100. 60 // Default value: 100, indicating that a maximum of 1000 records can be queried and all records are displayed on 61 // the same page. 62 Limit int `q:"limit"` 63 } 64 65 // List is a method to query the list of the database roles using given opts. 66 func List(c *golangsdk.ServiceClient, instanceId string, opts ListOpts) ([]RoleResp, error) { 67 url := resourceURL(c, instanceId) 68 query, err := golangsdk.BuildQueryString(opts) 69 if err != nil { 70 return nil, err 71 } 72 url += query.String() 73 74 var result []RoleResp 75 err = pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page { 76 p := RolePage{pagination.OffsetPageBase{PageResult: r}} 77 return p 78 }).EachPage(func(page pagination.Page) (bool, error) { 79 resp, err := ExtractRoles(page) 80 if err != nil { 81 return false, err 82 } 83 if len(resp) == 0 { 84 return false, nil 85 } 86 result = append(result, resp...) 87 return true, nil 88 }) 89 if err != nil { 90 return nil, err 91 } 92 return result, err 93 } 94 95 // DeleteOpts is the structure required by the Delete method to remove an existing database role. 96 type DeleteOpts struct { 97 // Role name. 98 // The length is 1~64 bits and can contain letters, numbers, hyphens, underscores and dots. 99 Name string `json:"role_name" required:"true"` 100 // The name of the database where the role is located. 101 // The length is 1~64 bits and can contain letters, numbers and underscores. 102 DbName string `json:"db_name" required:"true"` 103 } 104 105 // Delete is a method to remove an existing database role. 106 func Delete(c *golangsdk.ServiceClient, instanceId string, opts DeleteOpts) error { 107 url := rootURL(c, instanceId) 108 b, err := golangsdk.BuildRequestBody(opts, "") 109 if err != nil { 110 return err 111 } 112 113 _, err = c.DeleteWithBody(url, b, &golangsdk.RequestOpts{ 114 MoreHeaders: requestOpts.MoreHeaders, 115 }) 116 return err 117 }