github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/waf_hw/v1/premium_instances/requests.go (about) 1 /* 2 Copyright (c) Huawei Technologies Co. Ltd. 2021. All rights reserved. 3 */ 4 5 package premium_instances 6 7 import ( 8 "fmt" 9 "github.com/chnsz/golangsdk" 10 ) 11 12 // requestOpts defines the request header and language. 13 var requestOpts = golangsdk.RequestOpts{ 14 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 15 } 16 17 // CreateInstanceOpts the parameters in the creating request body 18 type CreateInstanceOpts struct { 19 Region string `json:"region" required:"true"` 20 ChargeMode int `json:"chargemode" required:"true"` 21 AvailableZone string `json:"available_zone" required:"true"` 22 Arch string `json:"arch" required:"true"` 23 NamePrefix string `json:"instancename" required:"true"` 24 Specification string `json:"specification" required:"true"` 25 CpuFlavor string `json:"cpu_flavor" required:"true"` 26 VpcId string `json:"vpc_id" required:"true"` 27 SubnetId string `json:"subnet_id" required:"true"` 28 SecurityGroup []string `json:"security_group" required:"true"` 29 Count int `json:"count" required:"true"` 30 Ipv6Enable string `json:"ipv6_enable,omitempty"` 31 VolumeType string `json:"volume_type,omitempty"` 32 ClusterId string `json:"cluster_id,omitempty"` 33 PoolId string `json:"pool_id,omitempty"` 34 ResTenant *bool `json:"res_tenant,omitempty"` 35 } 36 37 // ListInstanceOpts the parameters in the querying request. 38 type ListInstanceOpts struct { 39 EnterpriseProjectId string `q:"enterprise_project_id"` 40 Page int `q:"page"` 41 PageSize int `q:"pagesize"` 42 InstanceName string `q:"instancename"` 43 } 44 45 // UpdateInstanceOpts the parameters in the updating request. 46 type UpdateInstanceOpts struct { 47 InstanceName string `json:"instancename"` 48 } 49 50 // CreateInstance will create a dedicated waf instance based on the values in CreateOpts. 51 func CreateInstance(c *golangsdk.ServiceClient, opts CreateInstanceOpts) (*CreationgRst, error) { 52 return CreateWithEpsId(c, opts, "") 53 } 54 55 func generateEpsIdQuery(epsId string) string { 56 if len(epsId) == 0 { 57 return "" 58 } 59 return fmt.Sprintf("?enterprise_project_id=%s", epsId) 60 } 61 62 func CreateWithEpsId(c *golangsdk.ServiceClient, opts CreateInstanceOpts, epsId string) (*CreationgRst, error) { 63 b, err := golangsdk.BuildRequestBody(opts, "") 64 if err != nil { 65 return nil, err 66 } 67 68 var rst golangsdk.Result 69 _, err = c.Post(rootURL(c)+generateEpsIdQuery(epsId), b, &rst.Body, &golangsdk.RequestOpts{ 70 MoreHeaders: requestOpts.MoreHeaders, 71 }) 72 73 if err == nil { 74 var r CreationgRst 75 if err = rst.ExtractInto(&r); err == nil { 76 return &r, nil 77 } 78 } 79 return nil, err 80 } 81 82 // GetInstance get the waf instance detail. 83 func GetInstance(c *golangsdk.ServiceClient, id string) (*DedicatedInstance, error) { 84 return GetWithEpsId(c, id, "") 85 } 86 87 func GetWithEpsId(c *golangsdk.ServiceClient, id string, epsId string) (*DedicatedInstance, error) { 88 var rst golangsdk.Result 89 _, err := c.Get(resourceURL(c, id)+generateEpsIdQuery(epsId), &rst.Body, &golangsdk.RequestOpts{ 90 MoreHeaders: requestOpts.MoreHeaders, 91 }) 92 93 if err == nil { 94 var r DedicatedInstance 95 if err = rst.ExtractInto(&r); err == nil { 96 return &r, nil 97 } 98 } 99 return nil, err 100 } 101 102 // ListInstance query a list of waf instance base on ListInstanceOpts 103 func ListInstance(c *golangsdk.ServiceClient, opts ListInstanceOpts) (*DedicatedInstanceList, error) { 104 url := rootURL(c) 105 query, err := golangsdk.BuildQueryString(opts) 106 if err != nil { 107 return nil, err 108 } 109 url += query.String() 110 111 var rst golangsdk.Result 112 _, err = c.Get(url, &rst.Body, &golangsdk.RequestOpts{ 113 MoreHeaders: requestOpts.MoreHeaders, 114 }) 115 116 if err == nil { 117 var r DedicatedInstanceList 118 if err = rst.ExtractInto(&r); err == nil { 119 return &r, nil 120 } 121 } 122 return nil, err 123 } 124 125 // UpdateInstance query a list of waf instance base on UpdateInstanceOpts 126 func UpdateInstance(c *golangsdk.ServiceClient, id string, opts UpdateInstanceOpts) (*DedicatedInstance, error) { 127 return UpdateWithEpsId(c, id, opts, "") 128 } 129 130 func UpdateWithEpsId(c *golangsdk.ServiceClient, id string, opts UpdateInstanceOpts, epsId string) ( 131 *DedicatedInstance, error) { 132 b, err := golangsdk.BuildRequestBody(opts, "") 133 if err != nil { 134 return nil, err 135 } 136 137 var rst golangsdk.Result 138 _, err = c.Put(resourceURL(c, id)+generateEpsIdQuery(epsId), b, &rst.Body, &golangsdk.RequestOpts{ 139 OkCodes: []int{200}, 140 MoreHeaders: requestOpts.MoreHeaders, 141 }) 142 143 if err == nil { 144 var r DedicatedInstance 145 if err = rst.ExtractInto(&r); err == nil { 146 return &r, nil 147 } 148 } 149 return nil, err 150 151 } 152 153 // Delete will permanently delete a engine based on its unique ID. 154 func Delete(c *golangsdk.ServiceClient, id string) (*DedicatedInstance, error) { 155 return DeleteWithEpsId(c, id, "") 156 } 157 158 func DeleteWithEpsId(c *golangsdk.ServiceClient, id string, epsId string) (*DedicatedInstance, error) { 159 var rst golangsdk.Result 160 _, err := c.DeleteWithResponse(resourceURL(c, id)+generateEpsIdQuery(epsId), &rst.Body, &golangsdk.RequestOpts{ 161 OkCodes: []int{200}, 162 MoreHeaders: requestOpts.MoreHeaders}, 163 ) 164 165 if err == nil { 166 var r DedicatedInstance 167 if err = rst.ExtractInto(&r); err == nil { 168 return &r, nil 169 } 170 } 171 return nil, err 172 }