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 }