github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/taurusdb/v3/instances/requests.go (about) 1 package instances 2 3 import ( 4 "fmt" 5 6 "github.com/chnsz/golangsdk" 7 "github.com/chnsz/golangsdk/pagination" 8 ) 9 10 var requestOpts golangsdk.RequestOpts = golangsdk.RequestOpts{ 11 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 12 } 13 14 type ChargeInfoOpt struct { 15 ChargingMode string `json:"charge_mode,omitempty"` 16 PeriodType string `json:"period_type,omitempty"` 17 PeriodNum int `json:"period_num,omitempty"` 18 IsAutoRenew string `json:"is_auto_renew,omitempty"` 19 IsAutoPay string `json:"is_auto_pay,omitempty"` 20 } 21 22 type VolumeOpt struct { 23 Size int `json:"size" required:"true"` 24 } 25 26 type DataStoreOpt struct { 27 Type string `json:"type" required:"true"` 28 Version string `json:"version" required:"true"` 29 } 30 31 type BackupStrategyOpt struct { 32 StartTime string `json:"start_time" required:"true"` 33 KeepDays string `json:"keep_days" required:"true"` 34 } 35 36 type CreateTaurusDBOpts struct { 37 Name string `json:"name" required:"true"` 38 Region string `json:"region" required:"true"` 39 Mode string `json:"mode" required:"true"` 40 Flavor string `json:"flavor_ref" required:"true"` 41 VpcId string `json:"vpc_id" required:"true"` 42 SubnetId string `json:"subnet_id" required:"true"` 43 SecurityGroupId string `json:"security_group_id,omitempty"` 44 Password string `json:"password" required:"true"` 45 TimeZone string `json:"time_zone" required:"true"` 46 AZMode string `json:"availability_zone_mode" required:"true"` 47 SlaveCount int `json:"slave_count" required:"true"` 48 MasterAZ string `json:"master_availability_zone,omitempty"` 49 ConfigurationId string `json:"configuration_id,omitempty"` 50 EnterpriseProjectId string `json:"enterprise_project_id,omitempty"` 51 DedicatedResourceId string `json:"dedicated_resource_id,omitempty"` 52 LowerCaseTableNames *int `json:"lower_case_table_names,omitempty"` 53 DataStore DataStoreOpt `json:"datastore" required:"true"` 54 BackupStrategy *BackupStrategyOpt `json:"backup_strategy,omitempty"` 55 ChargeInfo *ChargeInfoOpt `json:"charge_info,omitempty"` 56 Volume *VolumeOpt `json:"volume,omitempty"` 57 } 58 59 type CreateTaurusDBBuilder interface { 60 ToInstancesCreateMap() (map[string]interface{}, error) 61 } 62 63 func (opts CreateTaurusDBOpts) ToInstancesCreateMap() (map[string]interface{}, error) { 64 b, err := golangsdk.BuildRequestBody(opts, "") 65 if err != nil { 66 return nil, err 67 } 68 return b, nil 69 } 70 71 func Create(client *golangsdk.ServiceClient, opts CreateTaurusDBBuilder) (r CreateResult) { 72 b, err := opts.ToInstancesCreateMap() 73 if err != nil { 74 r.Err = err 75 return 76 } 77 78 _, r.Err = client.Post(createURL(client), b, &r.Body, &golangsdk.RequestOpts{ 79 OkCodes: []int{201, 202}, 80 MoreHeaders: requestOpts.MoreHeaders, 81 }) 82 83 return 84 } 85 86 type CreateReplicaOpts struct { 87 Priorities []int `json:"priorities" required:"true"` 88 IsAutoPay string `json:"is_auto_pay,omitempty"` 89 } 90 91 type CreateReplicaBuilder interface { 92 ToReplicaCreateMap() (map[string]interface{}, error) 93 } 94 95 func (opts CreateReplicaOpts) ToReplicaCreateMap() (map[string]interface{}, error) { 96 b, err := golangsdk.BuildRequestBody(opts, "") 97 if err != nil { 98 return nil, err 99 } 100 return b, nil 101 } 102 103 func CreateReplica(client *golangsdk.ServiceClient, instanceId string, opts CreateReplicaBuilder) (r JobResult) { 104 b, err := opts.ToReplicaCreateMap() 105 if err != nil { 106 r.Err = err 107 return 108 } 109 110 _, r.Err = client.Post(enlargeURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{ 111 OkCodes: []int{201, 202}, 112 MoreHeaders: requestOpts.MoreHeaders, 113 }) 114 115 return 116 } 117 118 func DeleteReplica(client *golangsdk.ServiceClient, instanceId, nodeId string) (r JobResult) { 119 url := deleteReplicaURL(client, instanceId, nodeId) 120 121 _, r.Err = client.DeleteWithResponse(url, &r.Body, &golangsdk.RequestOpts{ 122 OkCodes: []int{200, 202}, 123 MoreHeaders: requestOpts.MoreHeaders, 124 }) 125 126 return 127 } 128 129 func Delete(client *golangsdk.ServiceClient, instanceId string) (r DeleteResult) { 130 url := deleteURL(client, instanceId) 131 132 _, r.Err = client.Delete(url, &golangsdk.RequestOpts{ 133 OkCodes: []int{200, 202}, 134 MoreHeaders: requestOpts.MoreHeaders, 135 }) 136 137 return 138 } 139 140 func Get(client *golangsdk.ServiceClient, instanceId string) (r GetResult) { 141 url := getURL(client, instanceId) 142 143 _, r.Err = client.Get(url, &r.Body, &golangsdk.RequestOpts{ 144 MoreHeaders: requestOpts.MoreHeaders, 145 }) 146 147 return 148 } 149 150 type ListTaurusDBInstanceOpts struct { 151 Id string `q:"id"` 152 Name string `q:"name"` 153 Type string `q:"type"` 154 DataStoreType string `q:"datastore_type"` 155 VpcId string `q:"vpc_id"` 156 SubnetId string `q:"subnet_id"` 157 Offset int `q:"offset"` 158 Limit int `q:"limit"` 159 } 160 161 type ListTaurusDBBuilder interface { 162 ToTaurusDBListDetailQuery() (string, error) 163 } 164 165 func (opts ListTaurusDBInstanceOpts) ToTaurusDBListDetailQuery() (string, error) { 166 q, err := golangsdk.BuildQueryString(opts) 167 if err != nil { 168 return "", err 169 } 170 return q.String(), err 171 } 172 173 func List(client *golangsdk.ServiceClient, opts ListTaurusDBBuilder) pagination.Pager { 174 url := listURL(client) 175 if opts != nil { 176 query, err := opts.ToTaurusDBListDetailQuery() 177 178 if err != nil { 179 return pagination.Pager{Err: err} 180 } 181 url += query 182 } 183 184 pageList := pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page { 185 return TaurusDBPage{pagination.SinglePageBase(r)} 186 }) 187 // Headers supplies additional HTTP headers to populate on each paged request 188 pageList.Headers = requestOpts.MoreHeaders 189 190 return pageList 191 } 192 193 func GetInstanceByName(client *golangsdk.ServiceClient, name string) (ListTaurusDBInstance, error) { 194 var instance ListTaurusDBInstance 195 196 opts := ListTaurusDBInstanceOpts{ 197 Name: name, 198 } 199 200 pages, err := List(client, &opts).AllPages() 201 if err != nil { 202 return instance, err 203 } 204 205 all, err := ExtractTaurusDBInstances(pages) 206 if err != nil { 207 return instance, err 208 } 209 if all.TotalCount < 1 { 210 return instance, golangsdk.ErrDefault404{ 211 ErrUnexpectedResponseCode: golangsdk.ErrUnexpectedResponseCode{ 212 Body: []byte(fmt.Sprintf("the database instance (%s) does not exist", name)), 213 }, 214 } 215 } 216 217 instance = all.Instances[0] 218 return instance, nil 219 } 220 221 type UpdateNameOpts struct { 222 Name string `json:"name" required:"true"` 223 } 224 225 type UpdateNameBuilder interface { 226 ToNameUpdateMap() (map[string]interface{}, error) 227 } 228 229 func (opts UpdateNameOpts) ToNameUpdateMap() (map[string]interface{}, error) { 230 b, err := golangsdk.BuildRequestBody(opts, "") 231 if err != nil { 232 return nil, err 233 } 234 return b, nil 235 } 236 237 func UpdateName(client *golangsdk.ServiceClient, instanceId string, opts UpdateNameBuilder) (r JobResult) { 238 b, err := opts.ToNameUpdateMap() 239 if err != nil { 240 r.Err = err 241 return 242 } 243 244 _, r.Err = client.Put(nameURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{ 245 OkCodes: []int{200}, 246 MoreHeaders: requestOpts.MoreHeaders, 247 }) 248 249 return 250 } 251 252 type UpdatePassOpts struct { 253 Password string `json:"password" required:"true"` 254 } 255 256 type UpdatePassBuilder interface { 257 ToPassUpdateMap() (map[string]interface{}, error) 258 } 259 260 func (opts UpdatePassOpts) ToPassUpdateMap() (map[string]interface{}, error) { 261 b, err := golangsdk.BuildRequestBody(opts, "") 262 if err != nil { 263 return nil, err 264 } 265 return b, nil 266 } 267 268 func UpdatePass(client *golangsdk.ServiceClient, instanceId string, opts UpdatePassBuilder) (r JobResult) { 269 b, err := opts.ToPassUpdateMap() 270 if err != nil { 271 r.Err = err 272 return 273 } 274 275 _, r.Err = client.Post(passwordURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{ 276 OkCodes: []int{200}, 277 MoreHeaders: requestOpts.MoreHeaders, 278 }) 279 280 return 281 } 282 283 type ExtendVolumeOpts struct { 284 Size int `json:"size" required:"true"` 285 IsAutoPay string `json:"is_auto_pay,omitempty"` 286 } 287 288 type ExtendVolumeBuilder interface { 289 ToVolumeExtendMap() (map[string]interface{}, error) 290 } 291 292 func (opts ExtendVolumeOpts) ToVolumeExtendMap() (map[string]interface{}, error) { 293 b, err := golangsdk.BuildRequestBody(opts, "") 294 if err != nil { 295 return nil, err 296 } 297 return b, nil 298 } 299 300 func ExtendVolume(client *golangsdk.ServiceClient, instanceId string, opts ExtendVolumeBuilder) (r JobResult) { 301 b, err := opts.ToVolumeExtendMap() 302 if err != nil { 303 r.Err = err 304 return 305 } 306 307 _, r.Err = client.Post(volumeURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{ 308 OkCodes: []int{201}, 309 MoreHeaders: requestOpts.MoreHeaders, 310 }) 311 312 return 313 } 314 315 type ResizeOpt struct { 316 Spec string `json:"spec_code" required:"true"` 317 } 318 319 type ResizeOpts struct { 320 Resize ResizeOpt `json:"resize_flavor" required:"true"` 321 IsAutoPay string `json:"is_auto_pay,omitempty"` 322 } 323 324 type ResizeBuilder interface { 325 ToResizeMap() (map[string]interface{}, error) 326 } 327 328 func (opts ResizeOpts) ToResizeMap() (map[string]interface{}, error) { 329 b, err := golangsdk.BuildRequestBody(opts, "") 330 if err != nil { 331 return nil, err 332 } 333 return b, nil 334 } 335 336 func Resize(client *golangsdk.ServiceClient, instanceId string, opts ResizeBuilder) (r JobResult) { 337 b, err := opts.ToResizeMap() 338 if err != nil { 339 r.Err = err 340 return 341 } 342 343 _, r.Err = client.Post(actionURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{ 344 OkCodes: []int{200}, 345 MoreHeaders: requestOpts.MoreHeaders, 346 }) 347 348 return 349 } 350 351 type ProxyOpts struct { 352 Flavor string `json:"flavor_ref" required:"true"` 353 NodeNum int `json:"node_num" required:"true"` 354 } 355 356 type ProxyBuilder interface { 357 ToProxyMap() (map[string]interface{}, error) 358 } 359 360 func (opts ProxyOpts) ToProxyMap() (map[string]interface{}, error) { 361 b, err := golangsdk.BuildRequestBody(opts, "") 362 if err != nil { 363 return nil, err 364 } 365 return b, nil 366 } 367 368 func EnableProxy(client *golangsdk.ServiceClient, instanceId string, opts ProxyBuilder) (r JobResult) { 369 b, err := opts.ToProxyMap() 370 if err != nil { 371 r.Err = err 372 return 373 } 374 375 _, r.Err = client.Post(proxyURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{ 376 OkCodes: []int{201}, 377 MoreHeaders: requestOpts.MoreHeaders, 378 }) 379 380 return 381 } 382 383 type EnlargeProxyOpts struct { 384 NodeNum int `json:"node_num" required:"true"` 385 } 386 387 type EnlargeProxyBuilder interface { 388 ToEnlargeProxyMap() (map[string]interface{}, error) 389 } 390 391 func (opts EnlargeProxyOpts) ToEnlargeProxyMap() (map[string]interface{}, error) { 392 b, err := golangsdk.BuildRequestBody(opts, "") 393 if err != nil { 394 return nil, err 395 } 396 return b, nil 397 } 398 399 func EnlargeProxy(client *golangsdk.ServiceClient, instanceId string, opts EnlargeProxyBuilder) (r JobResult) { 400 b, err := opts.ToEnlargeProxyMap() 401 if err != nil { 402 r.Err = err 403 return 404 } 405 406 _, r.Err = client.Post(proxyEnlargeURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{ 407 OkCodes: []int{201}, 408 MoreHeaders: requestOpts.MoreHeaders, 409 }) 410 411 return 412 } 413 414 func DeleteProxy(client *golangsdk.ServiceClient, instanceId string) (r JobResult) { 415 url := proxyURL(client, instanceId) 416 417 _, r.Err = client.DeleteWithResponse(url, &r.Body, &golangsdk.RequestOpts{ 418 OkCodes: []int{200, 202}, 419 MoreHeaders: requestOpts.MoreHeaders, 420 }) 421 422 return 423 } 424 425 func GetProxy(client *golangsdk.ServiceClient, instanceId string) (r GetProxyResult) { 426 url := proxyURL(client, instanceId) 427 428 _, r.Err = client.Get(url, &r.Body, &golangsdk.RequestOpts{ 429 MoreHeaders: requestOpts.MoreHeaders, 430 }) 431 432 return 433 } 434 435 func ListDeh(client *golangsdk.ServiceClient) pagination.Pager { 436 pageList := pagination.NewPager(client, listDehURL(client), func(r pagination.PageResult) pagination.Page { 437 return DehResourcePage{pagination.SinglePageBase(r)} 438 }) 439 // Headers supplies additional HTTP headers to populate on each paged request 440 pageList.Headers = map[string]string{"Content-Type": "application/json"} 441 442 return pageList 443 }