github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/waf_hw/v1/pools/requests.go (about)

     1  /*
     2   Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved.
     3  */
     4  
     5  package pools
     6  
     7  import (
     8  	"github.com/chnsz/golangsdk"
     9  	"github.com/chnsz/golangsdk/pagination"
    10  )
    11  
    12  var RequestOpts = golangsdk.RequestOpts{
    13  	MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"},
    14  }
    15  
    16  // CreateOpts the options for creating pools.
    17  type CreateOpts struct {
    18  	Name        string `json:"name" required:"true"`
    19  	Region      string `json:"region" required:"true"`
    20  	Type        string `json:"type" required:"true"`
    21  	VpcID       string `json:"vpc_id" required:"true"`
    22  	Description string `json:"description,omitempty"`
    23  }
    24  
    25  func Create(c *golangsdk.ServiceClient, opts CreateOpts) (*PoolSummaryDetail, error) {
    26  	b, err := golangsdk.BuildRequestBody(opts, "")
    27  	if err != nil {
    28  		return nil, err
    29  	}
    30  
    31  	var rst golangsdk.Result
    32  	_, err = c.Post(rootURL(c), b, &rst.Body, &golangsdk.RequestOpts{
    33  		OkCodes:     []int{200},
    34  		MoreHeaders: RequestOpts.MoreHeaders,
    35  	})
    36  	if err == nil {
    37  		var r PoolSummaryDetail
    38  		rst.ExtractInto(&r)
    39  		return &r, nil
    40  	}
    41  	return nil, err
    42  }
    43  
    44  func Get(c *golangsdk.ServiceClient, poolID string) (*Pool, error) {
    45  	var rst golangsdk.Result
    46  	_, err := c.Get(resourceURL(c, poolID), &rst.Body, &golangsdk.RequestOpts{
    47  		MoreHeaders: RequestOpts.MoreHeaders,
    48  	})
    49  	if err == nil {
    50  		var r Pool
    51  		rst.ExtractInto(&r)
    52  		return &r, nil
    53  	}
    54  	return nil, err
    55  }
    56  
    57  type ListPoolOpts struct {
    58  	Name     string `q:"name"`
    59  	VpcID    string `q:"vpc_id"`
    60  	Detail   bool   `q:"detail"`
    61  	Page     string `q:"page"`
    62  	PageSize string `q:"pagesize"`
    63  }
    64  
    65  func List(c *golangsdk.ServiceClient, opts ListPoolOpts) (*pagination.Pager, error) {
    66  	url := rootURL(c)
    67  	query, err := golangsdk.BuildQueryString(opts)
    68  	if err != nil {
    69  		return nil, err
    70  	}
    71  	url += query.String()
    72  
    73  	page := pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page {
    74  		p := PoolPage{pagination.PageSizeBase{PageResult: r}}
    75  		return p
    76  	})
    77  
    78  	return &page, nil
    79  }
    80  
    81  type UpdatePoolOpts struct {
    82  	Name        string      `json:"name,omitempty"`
    83  	Option      *PoolOption `json:"option,omitempty"`
    84  	Description *string     `json:"description,omitempty"`
    85  }
    86  
    87  type PoolOption struct {
    88  	BodyLimit      int `json:"body_limit,omitempty"`
    89  	HeaderLimit    int `json:"header_limit,omitempty"`
    90  	ConnectTimeout int `json:"connect_timeout,omitempty"`
    91  	SendTimeout    int `json:"send_timeout,omitempty"`
    92  	ReadTimeout    int `json:"read_timeout,omitempty"`
    93  }
    94  
    95  func Update(c *golangsdk.ServiceClient, poolID string, opts UpdatePoolOpts) (*Pool, error) {
    96  	b, err := golangsdk.BuildRequestBody(opts, "")
    97  	if err != nil {
    98  		return nil, err
    99  	}
   100  
   101  	var rst golangsdk.Result
   102  	_, err = c.Put(resourceURL(c, poolID), b, &rst.Body, &golangsdk.RequestOpts{
   103  		OkCodes:     []int{200},
   104  		MoreHeaders: RequestOpts.MoreHeaders,
   105  	})
   106  	if err == nil {
   107  		var r Pool
   108  		rst.ExtractInto(&r)
   109  		return &r, nil
   110  	}
   111  	return nil, err
   112  }
   113  
   114  func Delete(c *golangsdk.ServiceClient, poolID string) (*PoolSummaryDetail, error) {
   115  	var rst golangsdk.Result
   116  	_, err := c.DeleteWithResponse(resourceURL(c, poolID), &rst.Body, &golangsdk.RequestOpts{
   117  		OkCodes:     []int{200},
   118  		MoreHeaders: RequestOpts.MoreHeaders,
   119  	})
   120  	if err == nil {
   121  		var r PoolSummaryDetail
   122  		rst.ExtractInto(&r)
   123  		return &r, nil
   124  	}
   125  	return nil, err
   126  }
   127  
   128  type addLBOpts struct {
   129  	LoadBalancerID string `json:"loadbalancer_id" required:"true"`
   130  }
   131  
   132  func AddELB(c *golangsdk.ServiceClient, poolID, loadBalancerID string) (*PoolBinding, error) {
   133  	opts := addLBOpts{LoadBalancerID: loadBalancerID}
   134  	b, err := golangsdk.BuildRequestBody(opts, "")
   135  	if err != nil {
   136  		return nil, err
   137  	}
   138  
   139  	var rst golangsdk.Result
   140  	_, err = c.Post(bindingURL(c, poolID), b, &rst.Body, &golangsdk.RequestOpts{
   141  		OkCodes:     []int{200},
   142  		MoreHeaders: RequestOpts.MoreHeaders,
   143  	})
   144  	if err == nil {
   145  		var r PoolBinding
   146  		rst.ExtractInto(&r)
   147  		return &r, nil
   148  	}
   149  	return nil, err
   150  }
   151  
   152  func RemoveELB(c *golangsdk.ServiceClient, poolID, bindingID string) error {
   153  	_, err := c.Delete(bindingResourceURL(c, poolID, bindingID), &golangsdk.RequestOpts{
   154  		OkCodes:     []int{200},
   155  		MoreHeaders: RequestOpts.MoreHeaders,
   156  	})
   157  	return err
   158  }
   159  
   160  func ListELB(c *golangsdk.ServiceClient, poolID string) pagination.Pager {
   161  	url := bindingURL(c, poolID)
   162  
   163  	return pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page {
   164  		p := BindELBPage{pagination.MarkerPageBase{PageResult: r}}
   165  		p.MarkerPageBase.Owner = p
   166  		return p
   167  	})
   168  }