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  }