github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/dds/v3/instances/requests.go (about) 1 package instances 2 3 import ( 4 "net/http" 5 6 "github.com/chnsz/golangsdk" 7 "github.com/chnsz/golangsdk/pagination" 8 ) 9 10 type CreateOpts struct { 11 Name string `json:"name" required:"true"` 12 DataStore DataStore `json:"datastore" required:"true"` 13 Region string `json:"region" required:"true"` 14 AvailabilityZone string `json:"availability_zone" required:"true"` 15 VpcId string `json:"vpc_id" required:"true"` 16 SubnetId string `json:"subnet_id" required:"true"` 17 SecurityGroupId string `json:"security_group_id" required:"true"` 18 Password string `json:"password,omitempty"` 19 Port string `json:"port,omitempty"` 20 DiskEncryptionId string `json:"disk_encryption_id,omitempty"` 21 Ssl string `json:"ssl_option,omitempty"` 22 Mode string `json:"mode" required:"true"` 23 Configuration []Configuration `json:"configurations,omitempty"` 24 Flavor []Flavor `json:"flavor" required:"true"` 25 BackupStrategy BackupStrategy `json:"backup_strategy,omitempty"` 26 EnterpriseProjectID string `json:"enterprise_project_id,omitempty"` 27 ChargeInfo *ChargeInfo `json:"charge_info,omitempty"` 28 } 29 30 type DataStore struct { 31 Type string `json:"type" required:"true"` 32 Version string `json:"version" required:"true"` 33 StorageEngine string `json:"storage_engine" required:"true"` 34 } 35 36 type Configuration struct { 37 Type string `json:"type" required:"true"` 38 Id string `json:"configuration_id" required:"true"` 39 } 40 41 type Flavor struct { 42 Type string `json:"type" required:"true"` 43 Num int `json:"num" required:"true"` 44 Storage string `json:"storage,omitempty"` 45 Size int `json:"size,omitempty"` 46 SpecCode string `json:"spec_code" required:"true"` 47 } 48 49 type BackupStrategy struct { 50 StartTime string `json:"start_time" required:"true"` 51 KeepDays *int `json:"keep_days,omitempty"` 52 Period string `json:"period,omitempty"` 53 } 54 55 type BackupPolicyOpts struct { 56 BackupPolicy BackupStrategy `json:"backup_policy" required:"true"` 57 } 58 59 type ChargeInfo struct { 60 ChargeMode string `json:"charge_mode" required:"true"` 61 PeriodType string `json:"period_type,omitempty"` 62 PeriodNum int `json:"period_num,omitempty"` 63 IsAutoRenew bool `json:"is_auto_renew,omitempty"` 64 IsAutoPay bool `json:"is_auto_pay,omitempty"` 65 } 66 67 type CreateInstanceBuilder interface { 68 ToInstancesCreateMap() (map[string]interface{}, error) 69 } 70 71 func (opts CreateOpts) ToInstancesCreateMap() (map[string]interface{}, error) { 72 b, err := golangsdk.BuildRequestBody(opts, "") 73 if err != nil { 74 return nil, err 75 } 76 return b, nil 77 } 78 79 func Create(client *golangsdk.ServiceClient, opts CreateInstanceBuilder) (r CreateResult) { 80 b, err := opts.ToInstancesCreateMap() 81 if err != nil { 82 r.Err = err 83 return 84 } 85 86 _, r.Err = client.Post(createURL(client), b, &r.Body, &golangsdk.RequestOpts{ 87 OkCodes: []int{202}, 88 }) 89 return 90 } 91 92 type DeleteInstance struct { 93 InstanceId string `json:"instance_id" required:"true"` 94 } 95 96 type DeleteInstanceBuilder interface { 97 ToInstancesDeleteMap() (map[string]interface{}, error) 98 } 99 100 func (opts DeleteInstance) ToInstancesDeleteMap() (map[string]interface{}, error) { 101 b, err := golangsdk.BuildRequestBody(&opts, "") 102 if err != nil { 103 return nil, err 104 } 105 return b, nil 106 } 107 108 func Delete(client *golangsdk.ServiceClient, instanceId string) (r DeleteInstanceResult) { 109 110 url := deleteURL(client, instanceId) 111 112 _, r.Err = client.Delete(url, &golangsdk.RequestOpts{JSONResponse: &r.Body, MoreHeaders: map[string]string{"Content-Type": "application/json"}}) 113 return 114 } 115 116 type ListInstanceOpts struct { 117 Id string `q:"id"` 118 Name string `q:"name"` 119 Mode string `q:"mode"` 120 DataStoreType string `q:"datastore_type"` 121 VpcId string `q:"vpc_id"` 122 SubnetId string `q:"subnet_id"` 123 Offset int `q:"offset"` 124 Limit int `q:"limit"` 125 } 126 127 type ListInstanceBuilder interface { 128 ToInstanceListDetailQuery() (string, error) 129 } 130 131 func (opts ListInstanceOpts) ToInstanceListDetailQuery() (string, error) { 132 q, err := golangsdk.BuildQueryString(opts) 133 if err != nil { 134 return "", err 135 } 136 return q.String(), err 137 } 138 139 func List(client *golangsdk.ServiceClient, opts ListInstanceBuilder) pagination.Pager { 140 url := listURL(client) 141 if opts != nil { 142 query, err := opts.ToInstanceListDetailQuery() 143 144 if err != nil { 145 return pagination.Pager{Err: err} 146 } 147 url += query 148 } 149 150 pageList := pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page { 151 return InstancePage{pagination.SinglePageBase(r)} 152 }) 153 154 return pageList 155 } 156 157 // UpdateOpt defines the basic information for update APIs 158 // URI: <Method> base_url/<Action> 159 // Request body: {<Param>: <Value>} 160 // the supported value for Method including: "post" and "put" 161 type UpdateOpt struct { 162 Param string 163 Value interface{} 164 Action string 165 Method string 166 } 167 168 type UpdateVolumeOpts struct { 169 Volume VolumeOpts `json:"volume" required:"true"` 170 IsAutoPay bool `json:"is_auto_pay,omitempty"` 171 } 172 173 type VolumeOpts struct { 174 GroupID string `json:"group_id,omitempty"` 175 Size *int `json:"size,omitempty"` 176 } 177 178 type UpdateNodeNumOpts struct { 179 Type string `json:"type" required:"true"` 180 SpecCode string `json:"spec_code" required:"true"` 181 Num int `json:"num" required:"true"` 182 Volume *VolumeOpts `json:"volume,omitempty"` 183 IsAutoPay bool `json:"is_auto_pay,omitempty"` 184 } 185 186 type SpecOpts struct { 187 TargetType string `json:"target_type,omitempty"` 188 TargetID string `json:"target_id" required:"true"` 189 TargetSpecCode string `json:"target_spec_code" required:"true"` 190 } 191 192 type UpdateSpecOpts struct { 193 Resize SpecOpts `json:"resize" required:"true"` 194 IsAutoPay bool `json:"is_auto_pay,omitempty"` 195 } 196 197 func Update(client *golangsdk.ServiceClient, instanceId string, opts []UpdateOpt) (r UpdateInstanceResult) { 198 for _, optRaw := range opts { 199 url := modifyURL(client, instanceId, optRaw.Action) 200 var body interface{} 201 if optRaw.Param != "" { 202 body = map[string]interface{}{ 203 optRaw.Param: optRaw.Value, 204 } 205 } else { 206 body = optRaw.Value 207 } 208 209 var httpMethod func(string, interface{}, interface{}, *golangsdk.RequestOpts) (*http.Response, error) 210 if optRaw.Method == "post" { 211 httpMethod = client.Post 212 } else { 213 httpMethod = client.Put 214 } 215 216 _, r.Err = httpMethod(url, body, &r.Body, &golangsdk.RequestOpts{ 217 OkCodes: []int{200, 202}, 218 }) 219 220 if r.Err != nil { 221 break 222 } 223 } 224 return 225 } 226 227 var requestOpts golangsdk.RequestOpts = golangsdk.RequestOpts{ 228 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 229 } 230 231 // PortOpts is the structure required by the UpdatePort method to modify the database access port. 232 type PortOpts struct { 233 Port int `json:"port"` 234 } 235 236 type EnabledOpts struct { 237 Enabled *bool `json:"enabled" required:"true"` 238 } 239 240 // UpdatePort is a method to update the database access port using given parameters. 241 func UpdatePort(c *golangsdk.ServiceClient, instanceId string, port int) (*PortUpdateResp, error) { 242 opts := PortOpts{ 243 Port: port, 244 } 245 b, err := golangsdk.BuildRequestBody(opts, "") 246 if err != nil { 247 return nil, err 248 } 249 250 var r PortUpdateResp 251 _, err = c.Post(portModifiedURL(c, instanceId), b, &r, &golangsdk.RequestOpts{ 252 MoreHeaders: requestOpts.MoreHeaders, 253 }) 254 return &r, err 255 } 256 257 // UpdateSecondsLevelMonitoring is a method to update seconds level monitoring. 258 func UpdateSecondsLevelMonitoring(c *golangsdk.ServiceClient, instanceId string, enabled bool) (*EnabledOpts, error) { 259 opts := EnabledOpts{ 260 Enabled: &enabled, 261 } 262 b, err := golangsdk.BuildRequestBody(opts, "") 263 if err != nil { 264 return nil, err 265 } 266 267 var r EnabledOpts 268 _, err = c.Put(secondsLevelMonitoringURL(c, instanceId), b, &r, &golangsdk.RequestOpts{ 269 MoreHeaders: requestOpts.MoreHeaders, 270 OkCodes: []int{ 271 204, 272 }, 273 }) 274 return &r, err 275 } 276 277 // GetSecondsLevelMonitoring is a method to get seconds level monitoring. 278 func GetSecondsLevelMonitoring(c *golangsdk.ServiceClient, instanceId string) (*EnabledOpts, error) { 279 var r EnabledOpts 280 _, err := c.Get(secondsLevelMonitoringURL(c, instanceId), &r, &golangsdk.RequestOpts{ 281 MoreHeaders: requestOpts.MoreHeaders, 282 }) 283 return &r, err 284 } 285 286 // GetReplicaSetName is a method to get the replica set name. 287 func GetReplicaSetName(c *golangsdk.ServiceClient, instanceId string) (*ReplicaSetNameOpts, error) { 288 var r ReplicaSetNameOpts 289 _, err := c.Get(replicaSetNameURL(c, instanceId), &r, &golangsdk.RequestOpts{ 290 MoreHeaders: requestOpts.MoreHeaders, 291 }) 292 return &r, err 293 } 294 295 // CreateBackupPolicy is a method to create the backup policy. 296 func CreateBackupPolicy(c *golangsdk.ServiceClient, instanceId string, backPolicy BackupStrategy) (*BackupPolicyResp, error) { 297 opts := BackupPolicyOpts{ 298 BackupPolicy: backPolicy, 299 } 300 b, err := golangsdk.BuildRequestBody(opts, "") 301 if err != nil { 302 return nil, err 303 } 304 305 var r BackupPolicyResp 306 _, err = c.Put(backupPolicyURL(c, instanceId), b, &r, &golangsdk.RequestOpts{ 307 MoreHeaders: requestOpts.MoreHeaders, 308 }) 309 return &r, err 310 } 311 312 // GetBackupPolicy is a method to get the backup policy. 313 func GetBackupPolicy(c *golangsdk.ServiceClient, instanceId string) (*BackupPolicyResp, error) { 314 var r BackupPolicyResp 315 _, err := c.Get(backupPolicyURL(c, instanceId), &r, &golangsdk.RequestOpts{ 316 MoreHeaders: requestOpts.MoreHeaders, 317 }) 318 return &r, err 319 } 320 321 type ReplicaSetNameOpts struct { 322 Name string `json:"name" required:"true"` 323 } 324 325 type RestartOpts struct { 326 TargetType string `json:"target_type,omitempty"` 327 TargetId string `json:"target_id" required:"true"` 328 } 329 330 type AvailabilityZoneOpts struct { 331 TargetAzs string `json:"target_azs" required:"true"` 332 } 333 334 type RemarkOpts struct { 335 Remark string `json:"remark"` 336 } 337 338 // UpdateReplicaSetName is a method to update the replica set name. 339 func UpdateReplicaSetName(c *golangsdk.ServiceClient, instanceId string, opts ReplicaSetNameOpts) (*CommonResp, error) { 340 b, err := golangsdk.BuildRequestBody(opts, "") 341 if err != nil { 342 return nil, err 343 } 344 345 var r CommonResp 346 _, err = c.Put(replicaSetNameURL(c, instanceId), b, &r, &golangsdk.RequestOpts{ 347 MoreHeaders: requestOpts.MoreHeaders, 348 }) 349 return &r, err 350 } 351 352 // UpdateAvailabilityZone is a method to update the AvailabilityZone. 353 func UpdateAvailabilityZone(c *golangsdk.ServiceClient, instanceId string, opts AvailabilityZoneOpts) (*AvailabilityZoneResp, error) { 354 b, err := golangsdk.BuildRequestBody(opts, "") 355 if err != nil { 356 return nil, err 357 } 358 359 var r AvailabilityZoneResp 360 _, err = c.Post(availabilityZoneURL(c, instanceId), b, &r, &golangsdk.RequestOpts{ 361 MoreHeaders: requestOpts.MoreHeaders, 362 }) 363 return &r, err 364 } 365 366 // UpdateRemark is a method to update the description. 367 func UpdateRemark(c *golangsdk.ServiceClient, instanceId string, opts RemarkOpts) error { 368 b, err := golangsdk.BuildRequestBody(opts, "") 369 if err != nil { 370 return err 371 } 372 373 _, err = c.Put(remarkURL(c, instanceId), b, nil, &golangsdk.RequestOpts{ 374 MoreHeaders: requestOpts.MoreHeaders, 375 }) 376 return err 377 } 378 379 // UpdateSlowLogStatus is a method to update the slow log status. 380 func UpdateSlowLogStatus(c *golangsdk.ServiceClient, instanceId string, slowLogStatus string) error { 381 _, err := c.Put(slowLogStatusURL(c, instanceId, slowLogStatus), nil, nil, &golangsdk.RequestOpts{ 382 MoreHeaders: requestOpts.MoreHeaders, 383 }) 384 return err 385 } 386 387 // GetSlowLogStatus is a method to get the slow log status. 388 func GetSlowLogStatus(c *golangsdk.ServiceClient, instanceId string) (*SlowLogStatusResp, error) { 389 var r SlowLogStatusResp 390 _, err := c.Get(slowLogStatusURL(c, instanceId, "status"), &r, &golangsdk.RequestOpts{ 391 MoreHeaders: requestOpts.MoreHeaders, 392 }) 393 return &r, err 394 } 395 396 func RestartInstance(c *golangsdk.ServiceClient, instanceId string, opts RestartOpts) (*CommonResp, error) { 397 b, err := golangsdk.BuildRequestBody(opts, "") 398 if err != nil { 399 return nil, err 400 } 401 402 var r CommonResp 403 _, err = c.Post(restartURL(c, instanceId), b, &r, &golangsdk.RequestOpts{ 404 MoreHeaders: requestOpts.MoreHeaders, 405 }) 406 return &r, err 407 }