github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/geminidb/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 type FlavorOpt struct { 11 Num string `json:"num" required:"true"` 12 Size int `json:"size" required:"true"` 13 Storage string `json:"storage" required:"true"` 14 SpecCode string `json:"spec_code" required:"true"` 15 } 16 17 type BackupStrategyOpt struct { 18 StartTime string `json:"start_time,omitempty"` 19 KeepDays string `json:"keep_days,omitempty"` 20 } 21 22 type ChargeInfoOpt struct { 23 ChargingMode string `json:"charge_mode,omitempty"` 24 PeriodType string `json:"period_type,omitempty"` 25 PeriodNum int `json:"period_num,omitempty"` 26 IsAutoRenew string `json:"is_auto_renew,omitempty"` 27 IsAutoPay string `json:"is_auto_pay,omitempty"` 28 } 29 30 type CreateGeminiDBOpts struct { 31 Name string `json:"name" required:"true"` 32 Region string `json:"region" required:"true"` 33 AvailabilityZone string `json:"availability_zone" required:"true"` 34 VpcId string `json:"vpc_id" required:"true"` 35 SubnetId string `json:"subnet_id" required:"true"` 36 SecurityGroupId string `json:"security_group_id,omitempty"` 37 Password string `json:"password" required:"true"` 38 Mode string `json:"mode" required:"true"` 39 ConfigurationId string `json:"configuration_id,omitempty"` 40 EnterpriseProjectId string `json:"enterprise_project_id,omitempty"` 41 DedicatedResourceId string `json:"dedicated_resource_id,omitempty"` 42 Ssl string `json:"ssl_option,omitempty"` 43 Port string `json:"port,omitempty"` 44 DataStore DataStore `json:"datastore" required:"true"` 45 Flavor []FlavorOpt `json:"flavor" required:"true"` 46 BackupStrategy *BackupStrategyOpt `json:"backup_strategy,omitempty"` 47 ChargeInfo *ChargeInfoOpt `json:"charge_info,omitempty"` 48 } 49 50 type CreateGeminiDBBuilder interface { 51 ToInstancesCreateMap() (map[string]interface{}, error) 52 } 53 54 func (opts CreateGeminiDBOpts) ToInstancesCreateMap() (map[string]interface{}, error) { 55 b, err := golangsdk.BuildRequestBody(opts, "") 56 if err != nil { 57 return nil, err 58 } 59 return b, nil 60 } 61 62 func Create(client *golangsdk.ServiceClient, opts CreateGeminiDBBuilder) (r CreateResult) { 63 b, err := opts.ToInstancesCreateMap() 64 if err != nil { 65 r.Err = err 66 return 67 } 68 69 _, r.Err = client.Post(createURL(client), b, &r.Body, &golangsdk.RequestOpts{ 70 OkCodes: []int{202}, 71 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 72 }) 73 return 74 } 75 76 type ExtendVolumeOpts struct { 77 Size int `json:"size" required:"true"` 78 IsAutoPay string `json:"is_auto_pay,omitempty"` 79 } 80 81 type ExtendVolumeBuilder interface { 82 ToVolumeExtendMap() (map[string]interface{}, error) 83 } 84 85 func (opts ExtendVolumeOpts) ToVolumeExtendMap() (map[string]interface{}, error) { 86 b, err := golangsdk.BuildRequestBody(opts, "") 87 if err != nil { 88 return nil, err 89 } 90 return b, nil 91 } 92 93 func ExtendVolume(client *golangsdk.ServiceClient, instanceId string, opts ExtendVolumeBuilder) (r ExtendResult) { 94 b, err := opts.ToVolumeExtendMap() 95 if err != nil { 96 r.Err = err 97 return 98 } 99 100 _, r.Err = client.Post(extendURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{ 101 OkCodes: []int{202}, 102 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 103 }) 104 return 105 } 106 107 type EnlargeNodeOpts struct { 108 Num int `json:"num" required:"true"` 109 IsAutoPay string `json:"is_auto_pay,omitempty"` 110 } 111 112 type EnlargeNodeBuilder interface { 113 ToNodeEnlargeMap() (map[string]interface{}, error) 114 } 115 116 func (opts EnlargeNodeOpts) ToNodeEnlargeMap() (map[string]interface{}, error) { 117 b, err := golangsdk.BuildRequestBody(opts, "") 118 if err != nil { 119 return nil, err 120 } 121 return b, nil 122 } 123 124 func EnlargeNode(client *golangsdk.ServiceClient, instanceId string, opts EnlargeNodeBuilder) (r ExtendResult) { 125 b, err := opts.ToNodeEnlargeMap() 126 if err != nil { 127 r.Err = err 128 return 129 } 130 131 _, r.Err = client.Post(enlargeNodeURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{ 132 OkCodes: []int{202}, 133 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 134 }) 135 return 136 } 137 138 type ReduceNodeOpts struct { 139 Num int `json:"num" required:"true"` 140 } 141 142 type ReduceNodeBuilder interface { 143 ToNodeReduceMap() (map[string]interface{}, error) 144 } 145 146 func (opts ReduceNodeOpts) ToNodeReduceMap() (map[string]interface{}, error) { 147 b, err := golangsdk.BuildRequestBody(opts, "") 148 if err != nil { 149 return nil, err 150 } 151 return b, nil 152 } 153 154 func ReduceNode(client *golangsdk.ServiceClient, instanceId string, opts ReduceNodeBuilder) (r ExtendResult) { 155 b, err := opts.ToNodeReduceMap() 156 if err != nil { 157 r.Err = err 158 return 159 } 160 161 _, r.Err = client.Post(reduceNodeURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{ 162 OkCodes: []int{202}, 163 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 164 }) 165 return 166 } 167 168 func Delete(client *golangsdk.ServiceClient, instanceId string) (r DeleteResult) { 169 url := deleteURL(client, instanceId) 170 171 _, r.Err = client.Delete(url, &golangsdk.RequestOpts{ 172 OkCodes: []int{202}, 173 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 174 }) 175 176 return 177 } 178 179 type ListGeminiDBInstanceOpts struct { 180 Id string `q:"id"` 181 Name string `q:"name"` 182 Mode string `q:"mode"` 183 DataStoreType string `q:"datastore_type"` 184 VpcId string `q:"vpc_id"` 185 SubnetId string `q:"subnet_id"` 186 Offset int `q:"offset"` 187 Limit int `q:"limit"` 188 } 189 190 type ListGeminiDBBuilder interface { 191 ToGeminiDBListDetailQuery() (string, error) 192 } 193 194 func (opts ListGeminiDBInstanceOpts) ToGeminiDBListDetailQuery() (string, error) { 195 q, err := golangsdk.BuildQueryString(opts) 196 if err != nil { 197 return "", err 198 } 199 return q.String(), err 200 } 201 202 func List(client *golangsdk.ServiceClient, opts ListGeminiDBBuilder) pagination.Pager { 203 url := listURL(client) 204 if opts != nil { 205 query, err := opts.ToGeminiDBListDetailQuery() 206 207 if err != nil { 208 return pagination.Pager{Err: err} 209 } 210 url += query 211 } 212 213 pageList := pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page { 214 return GeminiDBPage{pagination.SinglePageBase(r)} 215 }) 216 // Headers supplies additional HTTP headers to populate on each paged request 217 pageList.Headers = map[string]string{"Content-Type": "application/json"} 218 219 return pageList 220 } 221 222 func GetInstanceByID(client *golangsdk.ServiceClient, instanceId string) (GeminiDBInstance, error) { 223 var instance GeminiDBInstance 224 225 opts := ListGeminiDBInstanceOpts{ 226 Id: instanceId, 227 } 228 229 pages, err := List(client, &opts).AllPages() 230 if err != nil { 231 return instance, err 232 } 233 234 all, err := ExtractGeminiDBInstances(pages) 235 if err != nil { 236 return instance, err 237 } 238 if all.TotalCount < 1 { 239 return instance, golangsdk.ErrDefault404{ 240 ErrUnexpectedResponseCode: golangsdk.ErrUnexpectedResponseCode{ 241 Body: []byte(fmt.Sprintf("the database instance (%s) does not exist", instanceId)), 242 }, 243 } 244 } 245 246 instance = all.Instances[0] 247 return instance, nil 248 } 249 250 func GetInstanceByName(client *golangsdk.ServiceClient, name string) (GeminiDBInstance, error) { 251 var instance GeminiDBInstance 252 253 opts := ListGeminiDBInstanceOpts{ 254 Name: name, 255 } 256 257 pages, err := List(client, &opts).AllPages() 258 if err != nil { 259 return instance, err 260 } 261 262 all, err := ExtractGeminiDBInstances(pages) 263 if err != nil { 264 return instance, err 265 } 266 if all.TotalCount < 1 { 267 return instance, golangsdk.ErrDefault404{ 268 ErrUnexpectedResponseCode: golangsdk.ErrUnexpectedResponseCode{ 269 Body: []byte(fmt.Sprintf("the database instance (%s) does not exist", name)), 270 }, 271 } 272 } 273 274 instance = all.Instances[0] 275 return instance, nil 276 } 277 278 type UpdateNameOpts struct { 279 Name string `json:"name" required:"true"` 280 } 281 282 type UpdateNameBuilder interface { 283 ToNameUpdateMap() (map[string]interface{}, error) 284 } 285 286 func (opts UpdateNameOpts) ToNameUpdateMap() (map[string]interface{}, error) { 287 b, err := golangsdk.BuildRequestBody(opts, "") 288 if err != nil { 289 return nil, err 290 } 291 return b, nil 292 } 293 294 func UpdateName(client *golangsdk.ServiceClient, instanceId string, opts UpdateNameBuilder) (r UpdateResult) { 295 b, err := opts.ToNameUpdateMap() 296 if err != nil { 297 r.Err = err 298 return 299 } 300 301 _, r.Err = client.Put(updateNameURL(client, instanceId), b, nil, &golangsdk.RequestOpts{ 302 OkCodes: []int{204}, 303 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 304 }) 305 return 306 } 307 308 type UpdatePassOpts struct { 309 Password string `json:"password" required:"true"` 310 } 311 312 type UpdatePassBuilder interface { 313 ToPassUpdateMap() (map[string]interface{}, error) 314 } 315 316 func (opts UpdatePassOpts) ToPassUpdateMap() (map[string]interface{}, error) { 317 b, err := golangsdk.BuildRequestBody(opts, "") 318 if err != nil { 319 return nil, err 320 } 321 return b, nil 322 } 323 324 func UpdatePass(client *golangsdk.ServiceClient, instanceId string, opts UpdatePassBuilder) (r UpdateResult) { 325 b, err := opts.ToPassUpdateMap() 326 if err != nil { 327 r.Err = err 328 return 329 } 330 331 _, r.Err = client.Put(updatePassURL(client, instanceId), b, nil, &golangsdk.RequestOpts{ 332 OkCodes: []int{204}, 333 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 334 }) 335 return 336 } 337 338 type ResizeOpt struct { 339 InstanceID string `json:"target_id" required:"true"` 340 SpecCode string `json:"target_spec_code" required:"true"` 341 } 342 343 type ResizeOpts struct { 344 Resize ResizeOpt `json:"resize" required:"true"` 345 IsAutoPay string `json:"is_auto_pay,omitempty"` 346 } 347 348 type ResizeBuilder interface { 349 ToResizeMap() (map[string]interface{}, error) 350 } 351 352 func (opts ResizeOpts) ToResizeMap() (map[string]interface{}, error) { 353 b, err := golangsdk.BuildRequestBody(opts, "") 354 if err != nil { 355 return nil, err 356 } 357 return b, nil 358 } 359 360 func Resize(client *golangsdk.ServiceClient, instanceId string, opts ResizeBuilder) (r ExtendResult) { 361 b, err := opts.ToResizeMap() 362 if err != nil { 363 r.Err = err 364 return 365 } 366 367 _, r.Err = client.Put(resizeURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{ 368 OkCodes: []int{202}, 369 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 370 }) 371 return 372 } 373 374 type UpdateSgOpts struct { 375 SecurityGroupID string `json:"security_group_id" required:"true"` 376 } 377 378 type UpdateSgBuilder interface { 379 ToSgUpdateMap() (map[string]interface{}, error) 380 } 381 382 func (opts UpdateSgOpts) ToSgUpdateMap() (map[string]interface{}, error) { 383 b, err := golangsdk.BuildRequestBody(opts, "") 384 if err != nil { 385 return nil, err 386 } 387 return b, nil 388 } 389 390 func UpdateSg(client *golangsdk.ServiceClient, instanceId string, opts UpdateSgBuilder) (r ExtendResult) { 391 b, err := opts.ToSgUpdateMap() 392 if err != nil { 393 r.Err = err 394 return 395 } 396 397 _, r.Err = client.Put(updateSgURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{ 398 OkCodes: []int{202}, 399 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 400 }) 401 return 402 } 403 404 func ListDeh(client *golangsdk.ServiceClient) pagination.Pager { 405 pageList := pagination.NewPager(client, listDehURL(client), func(r pagination.PageResult) pagination.Page { 406 return DehResourcePage{pagination.SinglePageBase(r)} 407 }) 408 // Headers supplies additional HTTP headers to populate on each paged request 409 pageList.Headers = map[string]string{"Content-Type": "application/json"} 410 411 return pageList 412 } 413 414 type UpdateSslOpts struct { 415 Ssl string `json:"ssl_option" required:"true"` 416 } 417 418 type UpdateSslBuilder interface { 419 ToSslUpdateMap() (map[string]interface{}, error) 420 } 421 422 func (opts UpdateSslOpts) ToSslUpdateMap() (map[string]interface{}, error) { 423 b, err := golangsdk.BuildRequestBody(opts, "") 424 if err != nil { 425 return nil, err 426 } 427 return b, nil 428 } 429 430 func UpdateSsl(client *golangsdk.ServiceClient, instanceId string, opts UpdateSslBuilder) (r UpdateResult) { 431 b, err := opts.ToSslUpdateMap() 432 if err != nil { 433 r.Err = err 434 return 435 } 436 437 _, r.Err = client.Post(updateSslURL(client, instanceId), b, nil, &golangsdk.RequestOpts{ 438 OkCodes: []int{202}, 439 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 440 }) 441 return 442 } 443 444 type UpdatePublicIpOpts struct { 445 Action string `json:"action" required:"true"` 446 PublicIp string `json:"public_ip,omitempty"` 447 PublicIpId string `json:"public_ip_id,omitempty"` 448 } 449 450 type UpdatePublicIpBuilder interface { 451 ToPublicIpUpdateMap() (map[string]interface{}, error) 452 } 453 454 func (opts UpdatePublicIpOpts) ToPublicIpUpdateMap() (map[string]interface{}, error) { 455 b, err := golangsdk.BuildRequestBody(opts, "") 456 if err != nil { 457 return nil, err 458 } 459 return b, nil 460 } 461 462 func UpdatePublicIp(client *golangsdk.ServiceClient, instanceId, nodeId string, opts UpdatePublicIpOpts) (r PublicIpResult) { 463 b, err := opts.ToPublicIpUpdateMap() 464 if err != nil { 465 r.Err = err 466 return 467 } 468 469 _, r.Err = client.Post(updatePublicIpURL(client, instanceId, nodeId), b, nil, &golangsdk.RequestOpts{ 470 OkCodes: []int{202}, 471 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 472 }) 473 return 474 }