github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/openstack/networking/v2/extensions/qos/rules/requests.go (about) 1 package rules 2 3 import ( 4 "context" 5 6 "github.com/vnpaycloud-console/gophercloud/v2" 7 "github.com/vnpaycloud-console/gophercloud/v2/pagination" 8 ) 9 10 // ListOptsBuilder allows extensions to add additional parameters to the 11 // List request. 12 type BandwidthLimitRulesListOptsBuilder interface { 13 ToBandwidthLimitRulesListQuery() (string, error) 14 } 15 16 // ListOpts allows the filtering and sorting of paginated collections through 17 // the Neutron API. Filtering is achieved by passing in struct field values 18 // that map to the BandwidthLimitRules attributes you want to see returned. 19 // SortKey allows you to sort by a particular BandwidthLimitRule attribute. 20 // SortDir sets the direction, and is either `asc' or `desc'. 21 // Marker and Limit are used for the pagination. 22 type BandwidthLimitRulesListOpts struct { 23 ID string `q:"id"` 24 TenantID string `q:"tenant_id"` 25 MaxKBps int `q:"max_kbps"` 26 MaxBurstKBps int `q:"max_burst_kbps"` 27 Direction string `q:"direction"` 28 Limit int `q:"limit"` 29 Marker string `q:"marker"` 30 SortKey string `q:"sort_key"` 31 SortDir string `q:"sort_dir"` 32 Tags string `q:"tags"` 33 TagsAny string `q:"tags-any"` 34 NotTags string `q:"not-tags"` 35 NotTagsAny string `q:"not-tags-any"` 36 } 37 38 // ToBandwidthLimitRulesListQuery formats a ListOpts into a query string. 39 func (opts BandwidthLimitRulesListOpts) ToBandwidthLimitRulesListQuery() (string, error) { 40 q, err := gophercloud.BuildQueryString(opts) 41 return q.String(), err 42 } 43 44 // ListBandwidthLimitRules returns a Pager which allows you to iterate over a collection of 45 // BandwidthLimitRules. It accepts a ListOpts struct, which allows you to filter and sort 46 // the returned collection for greater efficiency. 47 func ListBandwidthLimitRules(c *gophercloud.ServiceClient, policyID string, opts BandwidthLimitRulesListOptsBuilder) pagination.Pager { 48 url := listBandwidthLimitRulesURL(c, policyID) 49 if opts != nil { 50 query, err := opts.ToBandwidthLimitRulesListQuery() 51 if err != nil { 52 return pagination.Pager{Err: err} 53 } 54 url += query 55 } 56 return pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page { 57 return BandwidthLimitRulePage{pagination.LinkedPageBase{PageResult: r}} 58 59 }) 60 } 61 62 // GetBandwidthLimitRule retrieves a specific BandwidthLimitRule based on its ID. 63 func GetBandwidthLimitRule(ctx context.Context, c *gophercloud.ServiceClient, policyID, ruleID string) (r GetBandwidthLimitRuleResult) { 64 resp, err := c.Get(ctx, getBandwidthLimitRuleURL(c, policyID, ruleID), &r.Body, nil) 65 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 66 return 67 } 68 69 // CreateBandwidthLimitRuleOptsBuilder allows to add additional parameters to the 70 // CreateBandwidthLimitRule request. 71 type CreateBandwidthLimitRuleOptsBuilder interface { 72 ToBandwidthLimitRuleCreateMap() (map[string]any, error) 73 } 74 75 // CreateBandwidthLimitRuleOpts specifies parameters of a new BandwidthLimitRule. 76 type CreateBandwidthLimitRuleOpts struct { 77 // MaxKBps is a maximum kilobits per second. It's a required parameter. 78 MaxKBps int `json:"max_kbps"` 79 80 // MaxBurstKBps is a maximum burst size in kilobits. 81 MaxBurstKBps int `json:"max_burst_kbps,omitempty"` 82 83 // Direction represents the direction of traffic. 84 Direction string `json:"direction,omitempty"` 85 } 86 87 // ToBandwidthLimitRuleCreateMap constructs a request body from CreateBandwidthLimitRuleOpts. 88 func (opts CreateBandwidthLimitRuleOpts) ToBandwidthLimitRuleCreateMap() (map[string]any, error) { 89 return gophercloud.BuildRequestBody(opts, "bandwidth_limit_rule") 90 } 91 92 // CreateBandwidthLimitRule requests the creation of a new BandwidthLimitRule on the server. 93 func CreateBandwidthLimitRule(ctx context.Context, client *gophercloud.ServiceClient, policyID string, opts CreateBandwidthLimitRuleOptsBuilder) (r CreateBandwidthLimitRuleResult) { 94 b, err := opts.ToBandwidthLimitRuleCreateMap() 95 if err != nil { 96 r.Err = err 97 return 98 } 99 resp, err := client.Post(ctx, createBandwidthLimitRuleURL(client, policyID), b, &r.Body, &gophercloud.RequestOpts{ 100 OkCodes: []int{201}, 101 }) 102 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 103 return 104 } 105 106 // UpdateBandwidthLimitRuleOptsBuilder allows to add additional parameters to the 107 // UpdateBandwidthLimitRule request. 108 type UpdateBandwidthLimitRuleOptsBuilder interface { 109 ToBandwidthLimitRuleUpdateMap() (map[string]any, error) 110 } 111 112 // UpdateBandwidthLimitRuleOpts specifies parameters for the Update call. 113 type UpdateBandwidthLimitRuleOpts struct { 114 // MaxKBps is a maximum kilobits per second. 115 MaxKBps *int `json:"max_kbps,omitempty"` 116 117 // MaxBurstKBps is a maximum burst size in kilobits. 118 MaxBurstKBps *int `json:"max_burst_kbps,omitempty"` 119 120 // Direction represents the direction of traffic. 121 Direction string `json:"direction,omitempty"` 122 } 123 124 // ToBandwidthLimitRuleUpdateMap constructs a request body from UpdateBandwidthLimitRuleOpts. 125 func (opts UpdateBandwidthLimitRuleOpts) ToBandwidthLimitRuleUpdateMap() (map[string]any, error) { 126 return gophercloud.BuildRequestBody(opts, "bandwidth_limit_rule") 127 } 128 129 // UpdateBandwidthLimitRule requests the creation of a new BandwidthLimitRule on the server. 130 func UpdateBandwidthLimitRule(ctx context.Context, client *gophercloud.ServiceClient, policyID, ruleID string, opts UpdateBandwidthLimitRuleOptsBuilder) (r UpdateBandwidthLimitRuleResult) { 131 b, err := opts.ToBandwidthLimitRuleUpdateMap() 132 if err != nil { 133 r.Err = err 134 return 135 } 136 resp, err := client.Put(ctx, updateBandwidthLimitRuleURL(client, policyID, ruleID), b, &r.Body, &gophercloud.RequestOpts{ 137 OkCodes: []int{200}, 138 }) 139 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 140 return 141 } 142 143 // Delete accepts policy and rule ID and deletes the BandwidthLimitRule associated with them. 144 func DeleteBandwidthLimitRule(ctx context.Context, c *gophercloud.ServiceClient, policyID, ruleID string) (r DeleteBandwidthLimitRuleResult) { 145 resp, err := c.Delete(ctx, deleteBandwidthLimitRuleURL(c, policyID, ruleID), nil) 146 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 147 return 148 } 149 150 // DSCPMarkingRulesListOptsBuilder allows extensions to add additional parameters to the 151 // List request. 152 type DSCPMarkingRulesListOptsBuilder interface { 153 ToDSCPMarkingRulesListQuery() (string, error) 154 } 155 156 // DSCPMarkingRulesListOpts allows the filtering and sorting of paginated collections through 157 // the Neutron API. Filtering is achieved by passing in struct field values 158 // that map to the DSCPMarking attributes you want to see returned. 159 // SortKey allows you to sort by a particular DSCPMarkingRule attribute. 160 // SortDir sets the direction, and is either `asc' or `desc'. 161 // Marker and Limit are used for the pagination. 162 type DSCPMarkingRulesListOpts struct { 163 ID string `q:"id"` 164 TenantID string `q:"tenant_id"` 165 DSCPMark int `q:"dscp_mark"` 166 Limit int `q:"limit"` 167 Marker string `q:"marker"` 168 SortKey string `q:"sort_key"` 169 SortDir string `q:"sort_dir"` 170 Tags string `q:"tags"` 171 TagsAny string `q:"tags-any"` 172 NotTags string `q:"not-tags"` 173 NotTagsAny string `q:"not-tags-any"` 174 } 175 176 // ToDSCPMarkingRulesListQuery formats a ListOpts into a query string. 177 func (opts DSCPMarkingRulesListOpts) ToDSCPMarkingRulesListQuery() (string, error) { 178 q, err := gophercloud.BuildQueryString(opts) 179 return q.String(), err 180 } 181 182 // ListDSCPMarkingRules returns a Pager which allows you to iterate over a collection of 183 // DSCPMarkingRules. It accepts a ListOpts struct, which allows you to filter and sort 184 // the returned collection for greater efficiency. 185 func ListDSCPMarkingRules(c *gophercloud.ServiceClient, policyID string, opts DSCPMarkingRulesListOptsBuilder) pagination.Pager { 186 url := listDSCPMarkingRulesURL(c, policyID) 187 if opts != nil { 188 query, err := opts.ToDSCPMarkingRulesListQuery() 189 if err != nil { 190 return pagination.Pager{Err: err} 191 } 192 url += query 193 } 194 return pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page { 195 return DSCPMarkingRulePage{pagination.LinkedPageBase{PageResult: r}} 196 197 }) 198 } 199 200 // GetDSCPMarkingRule retrieves a specific DSCPMarkingRule based on its ID. 201 func GetDSCPMarkingRule(ctx context.Context, c *gophercloud.ServiceClient, policyID, ruleID string) (r GetDSCPMarkingRuleResult) { 202 resp, err := c.Get(ctx, getDSCPMarkingRuleURL(c, policyID, ruleID), &r.Body, nil) 203 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 204 return 205 } 206 207 // CreateDSCPMarkingRuleOptsBuilder allows to add additional parameters to the 208 // CreateDSCPMarkingRule request. 209 type CreateDSCPMarkingRuleOptsBuilder interface { 210 ToDSCPMarkingRuleCreateMap() (map[string]any, error) 211 } 212 213 // CreateDSCPMarkingRuleOpts specifies parameters of a new DSCPMarkingRule. 214 type CreateDSCPMarkingRuleOpts struct { 215 // DSCPMark contains DSCP mark value. 216 DSCPMark int `json:"dscp_mark"` 217 } 218 219 // ToDSCPMarkingRuleCreateMap constructs a request body from CreateDSCPMarkingRuleOpts. 220 func (opts CreateDSCPMarkingRuleOpts) ToDSCPMarkingRuleCreateMap() (map[string]any, error) { 221 return gophercloud.BuildRequestBody(opts, "dscp_marking_rule") 222 } 223 224 // CreateDSCPMarkingRule requests the creation of a new DSCPMarkingRule on the server. 225 func CreateDSCPMarkingRule(ctx context.Context, client *gophercloud.ServiceClient, policyID string, opts CreateDSCPMarkingRuleOptsBuilder) (r CreateDSCPMarkingRuleResult) { 226 b, err := opts.ToDSCPMarkingRuleCreateMap() 227 if err != nil { 228 r.Err = err 229 return 230 } 231 resp, err := client.Post(ctx, createDSCPMarkingRuleURL(client, policyID), b, &r.Body, &gophercloud.RequestOpts{ 232 OkCodes: []int{201}, 233 }) 234 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 235 return 236 } 237 238 // UpdateDSCPMarkingRuleOptsBuilder allows to add additional parameters to the 239 // UpdateDSCPMarkingRule request. 240 type UpdateDSCPMarkingRuleOptsBuilder interface { 241 ToDSCPMarkingRuleUpdateMap() (map[string]any, error) 242 } 243 244 // UpdateDSCPMarkingRuleOpts specifies parameters for the Update call. 245 type UpdateDSCPMarkingRuleOpts struct { 246 // DSCPMark contains DSCP mark value. 247 DSCPMark *int `json:"dscp_mark,omitempty"` 248 } 249 250 // ToDSCPMarkingRuleUpdateMap constructs a request body from UpdateDSCPMarkingRuleOpts. 251 func (opts UpdateDSCPMarkingRuleOpts) ToDSCPMarkingRuleUpdateMap() (map[string]any, error) { 252 return gophercloud.BuildRequestBody(opts, "dscp_marking_rule") 253 } 254 255 // UpdateDSCPMarkingRule requests the creation of a new DSCPMarkingRule on the server. 256 func UpdateDSCPMarkingRule(ctx context.Context, client *gophercloud.ServiceClient, policyID, ruleID string, opts UpdateDSCPMarkingRuleOptsBuilder) (r UpdateDSCPMarkingRuleResult) { 257 b, err := opts.ToDSCPMarkingRuleUpdateMap() 258 if err != nil { 259 r.Err = err 260 return 261 } 262 resp, err := client.Put(ctx, updateDSCPMarkingRuleURL(client, policyID, ruleID), b, &r.Body, &gophercloud.RequestOpts{ 263 OkCodes: []int{200}, 264 }) 265 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 266 return 267 } 268 269 // DeleteDSCPMarkingRule accepts policy and rule ID and deletes the DSCPMarkingRule associated with them. 270 func DeleteDSCPMarkingRule(ctx context.Context, c *gophercloud.ServiceClient, policyID, ruleID string) (r DeleteDSCPMarkingRuleResult) { 271 resp, err := c.Delete(ctx, deleteDSCPMarkingRuleURL(c, policyID, ruleID), nil) 272 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 273 return 274 } 275 276 // ListOptsBuilder allows extensions to add additional parameters to the 277 // List request. 278 type MinimumBandwidthRulesListOptsBuilder interface { 279 ToMinimumBandwidthRulesListQuery() (string, error) 280 } 281 282 // ListOpts allows the filtering and sorting of paginated collections through 283 // the Neutron API. Filtering is achieved by passing in struct field values 284 // that map to the MinimumBandwidthRules attributes you want to see returned. 285 // SortKey allows you to sort by a particular MinimumBandwidthRule attribute. 286 // SortDir sets the direction, and is either `asc' or `desc'. 287 // Marker and Limit are used for the pagination. 288 type MinimumBandwidthRulesListOpts struct { 289 ID string `q:"id"` 290 TenantID string `q:"tenant_id"` 291 MinKBps int `q:"min_kbps"` 292 Direction string `q:"direction"` 293 Limit int `q:"limit"` 294 Marker string `q:"marker"` 295 SortKey string `q:"sort_key"` 296 SortDir string `q:"sort_dir"` 297 Tags string `q:"tags"` 298 TagsAny string `q:"tags-any"` 299 NotTags string `q:"not-tags"` 300 NotTagsAny string `q:"not-tags-any"` 301 } 302 303 // ToMinimumBandwidthRulesListQuery formats a ListOpts into a query string. 304 func (opts MinimumBandwidthRulesListOpts) ToMinimumBandwidthRulesListQuery() (string, error) { 305 q, err := gophercloud.BuildQueryString(opts) 306 return q.String(), err 307 } 308 309 // ListMinimumBandwidthRules returns a Pager which allows you to iterate over a collection of 310 // MinimumBandwidthRules. It accepts a ListOpts struct, which allows you to filter and sort 311 // the returned collection for greater efficiency. 312 func ListMinimumBandwidthRules(c *gophercloud.ServiceClient, policyID string, opts MinimumBandwidthRulesListOptsBuilder) pagination.Pager { 313 url := listMinimumBandwidthRulesURL(c, policyID) 314 if opts != nil { 315 query, err := opts.ToMinimumBandwidthRulesListQuery() 316 if err != nil { 317 return pagination.Pager{Err: err} 318 } 319 url += query 320 } 321 return pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page { 322 return MinimumBandwidthRulePage{pagination.LinkedPageBase{PageResult: r}} 323 324 }) 325 } 326 327 // GetMinimumBandwidthRule retrieves a specific MinimumBandwidthRule based on its ID. 328 func GetMinimumBandwidthRule(ctx context.Context, c *gophercloud.ServiceClient, policyID, ruleID string) (r GetMinimumBandwidthRuleResult) { 329 resp, err := c.Get(ctx, getMinimumBandwidthRuleURL(c, policyID, ruleID), &r.Body, nil) 330 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 331 return 332 } 333 334 // CreateMinimumBandwidthRuleOptsBuilder allows to add additional parameters to the 335 // CreateMinimumBandwidthRule request. 336 type CreateMinimumBandwidthRuleOptsBuilder interface { 337 ToMinimumBandwidthRuleCreateMap() (map[string]any, error) 338 } 339 340 // CreateMinimumBandwidthRuleOpts specifies parameters of a new MinimumBandwidthRule. 341 type CreateMinimumBandwidthRuleOpts struct { 342 // MaxKBps is a minimum kilobits per second. It's a required parameter. 343 MinKBps int `json:"min_kbps"` 344 345 // Direction represents the direction of traffic. 346 Direction string `json:"direction,omitempty"` 347 } 348 349 // ToMinimumBandwidthRuleCreateMap constructs a request body from CreateMinimumBandwidthRuleOpts. 350 func (opts CreateMinimumBandwidthRuleOpts) ToMinimumBandwidthRuleCreateMap() (map[string]any, error) { 351 return gophercloud.BuildRequestBody(opts, "minimum_bandwidth_rule") 352 } 353 354 // CreateMinimumBandwidthRule requests the creation of a new MinimumBandwidthRule on the server. 355 func CreateMinimumBandwidthRule(ctx context.Context, client *gophercloud.ServiceClient, policyID string, opts CreateMinimumBandwidthRuleOptsBuilder) (r CreateMinimumBandwidthRuleResult) { 356 b, err := opts.ToMinimumBandwidthRuleCreateMap() 357 if err != nil { 358 r.Err = err 359 return 360 } 361 resp, err := client.Post(ctx, createMinimumBandwidthRuleURL(client, policyID), b, &r.Body, &gophercloud.RequestOpts{ 362 OkCodes: []int{201}, 363 }) 364 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 365 return 366 } 367 368 // UpdateMinimumBandwidthRuleOptsBuilder allows to add additional parameters to the 369 // UpdateMinimumBandwidthRule request. 370 type UpdateMinimumBandwidthRuleOptsBuilder interface { 371 ToMinimumBandwidthRuleUpdateMap() (map[string]any, error) 372 } 373 374 // UpdateMinimumBandwidthRuleOpts specifies parameters for the Update call. 375 type UpdateMinimumBandwidthRuleOpts struct { 376 // MaxKBps is a minimum kilobits per second. It's a required parameter. 377 MinKBps *int `json:"min_kbps,omitempty"` 378 379 // Direction represents the direction of traffic. 380 Direction string `json:"direction,omitempty"` 381 } 382 383 // ToMinimumBandwidthRuleUpdateMap constructs a request body from UpdateMinimumBandwidthRuleOpts. 384 func (opts UpdateMinimumBandwidthRuleOpts) ToMinimumBandwidthRuleUpdateMap() (map[string]any, error) { 385 return gophercloud.BuildRequestBody(opts, "minimum_bandwidth_rule") 386 } 387 388 // UpdateMinimumBandwidthRule requests the creation of a new MinimumBandwidthRule on the server. 389 func UpdateMinimumBandwidthRule(ctx context.Context, client *gophercloud.ServiceClient, policyID, ruleID string, opts UpdateMinimumBandwidthRuleOptsBuilder) (r UpdateMinimumBandwidthRuleResult) { 390 b, err := opts.ToMinimumBandwidthRuleUpdateMap() 391 if err != nil { 392 r.Err = err 393 return 394 } 395 resp, err := client.Put(ctx, updateMinimumBandwidthRuleURL(client, policyID, ruleID), b, &r.Body, &gophercloud.RequestOpts{ 396 OkCodes: []int{200}, 397 }) 398 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 399 return 400 } 401 402 // DeleteMinimumBandwidthRule accepts policy and rule ID and deletes the MinimumBandwidthRule associated with them. 403 func DeleteMinimumBandwidthRule(ctx context.Context, c *gophercloud.ServiceClient, policyID, ruleID string) (r DeleteMinimumBandwidthRuleResult) { 404 resp, err := c.Delete(ctx, deleteMinimumBandwidthRuleURL(c, policyID, ruleID), nil) 405 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 406 return 407 }