github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/drs/v3/jobs/requests.go (about) 1 package jobs 2 3 import ( 4 "github.com/chnsz/golangsdk" 5 "github.com/chnsz/golangsdk/openstack/common/tags" 6 ) 7 8 const ( 9 DeleteTypeTerminate = "terminate" 10 DeleteTypeForceTerminate = "force_terminate" 11 DeleteTypeDelete = "delete" 12 ) 13 14 type BatchCreateJobReq struct { 15 Jobs []CreateJobReq `json:"jobs" required:"true"` 16 } 17 18 type CreateJobReq struct { 19 BindEip *bool `json:"bind_eip,omitempty"` 20 DbUseType string `json:"db_use_type" required:"true"` 21 Name string `json:"name" required:"true"` 22 Description string `json:"description,omitempty"` 23 EngineType string `json:"engine_type" required:"true"` 24 IsTargetReadonly *bool `json:"is_target_readonly,omitempty"` 25 JobDirection string `json:"job_direction" required:"true"` 26 NetType string `json:"net_type" required:"true"` 27 NodeNum *int `json:"node_num,omitempty"` 28 NodeType string `json:"node_type" required:"true"` 29 SourceEndpoint Endpoint `json:"source_endpoint" required:"true"` 30 TargetEndpoint Endpoint `json:"target_endpoint" required:"true"` 31 TaskType string `json:"task_type" required:"true"` 32 SubnetId string `json:"customize_sutnet_id" required:"true"` 33 ProductId string `json:"product_id,omitempty"` 34 ExpiredDays string `json:"expired_days,omitempty"` 35 MultiWrite *bool `json:"multi_write,omitempty"` 36 Tags []tags.ResourceTag `json:"tags,omitempty"` 37 SysTags []tags.ResourceTag `json:"sys_tags,omitempty"` 38 MasterAz string `json:"master_az,omitempty"` 39 SlaveAz string `json:"slave_az,omitempty"` 40 ChargingMode string `json:"charging_mode,omitempty"` 41 PeriodOrder *PeriodOrder `json:"period_order,omitempty"` 42 } 43 44 type Endpoint struct { 45 DbType string `json:"db_type" required:"true"` 46 AzCode string `json:"az_code,omitempty"` 47 Region string `json:"region,omitempty"` 48 InstanceId string `json:"inst_id,omitempty"` 49 InstanceName string `json:"inst_name,omitempty"` 50 VpcId string `json:"vpc_id,omitempty"` 51 SubnetId string `json:"subnet_id,omitempty"` 52 SecurityGroupId string `json:"security_group_id,omitempty"` 53 ProjectId string `json:"project_id,omitempty"` 54 55 DbName string `json:"db_name,omitempty"` 56 Ip string `json:"ip,omitempty"` 57 DbPort *int `json:"db_port,omitempty"` 58 DbUser string `json:"db_user,omitempty"` 59 DbPassword string `json:"db_password,omitempty"` 60 61 SslCertPassword string `json:"ssl_cert_password,omitempty"` 62 SslCertCheckSum string `json:"ssl_cert_check_sum,omitempty"` 63 SslCertKey string `json:"ssl_cert_key,omitempty"` 64 SslCertName string `json:"ssl_cert_name,omitempty"` 65 SslLink *bool `json:"ssl_link,omitempty"` 66 67 SafeMode *int `json:"safe_mode,omitempty"` 68 MongoHaMode string `json:"mongo_ha_mode,omitempty"` 69 Topic string `json:"topic,omitempty"` 70 ClusterMode string `json:"cluster_mode,omitempty"` 71 } 72 73 type PeriodOrder struct { 74 PeriodType int `json:"period_type,omitempty"` 75 PeriodNum int `json:"period_num,omitempty"` 76 IsAutoRenew int `json:"is_auto_renew,omitempty"` 77 } 78 79 type QueryJobReq struct { 80 Jobs []string `json:"jobs" required:"true"` 81 PageReq PageReq `json:"page_req,omitempty"` 82 } 83 84 type PageReq struct { 85 CurPage int `json:"cur_page,omitempty"` 86 PerPage int `json:"per_page,omitempty"` 87 } 88 89 type StartJobReq struct { 90 Jobs []StartInfo `json:"jobs" required:"true"` 91 } 92 93 type StartInfo struct { 94 JobId string `json:"job_id" required:"true"` 95 StartTime string `json:"start_time,omitempty"` 96 } 97 98 type TestConnectionsReq struct { 99 Jobs []TestEndPoint `json:"jobs" required:"true"` 100 } 101 102 type TestEndPoint struct { 103 JobId string `json:"id" required:"true"` 104 NetType string `json:"net_type" required:"true"` 105 // source DB:so, target DB:ta 106 EndPointType string `json:"end_point_type" required:"true"` 107 108 DbType string `json:"db_type" required:"true"` 109 Ip string `json:"ip" required:"true"` 110 DbUser string `json:"db_user" required:"true"` 111 DbPassword string `json:"db_password" required:"true"` 112 //when type is MongoćDDS, must be `0` 113 DbPort *int `json:"db_port,omitempty"` 114 DbName string `json:"db_name,omitempty"` 115 116 Region string `json:"region,omitempty"` 117 ProjectId string `json:"project_id,omitempty"` 118 InstId string `json:"inst_id,omitempty"` 119 VpcId string `json:"vpc_id,omitempty"` 120 SubnetId string `json:"subnet_id,omitempty"` 121 122 SslLink *bool `json:"ssl_link,omitempty"` 123 SslCertKey string `json:"ssl_cert_key,omitempty"` 124 SslCertName string `json:"ssl_cert_name,omitempty"` 125 SslCertCheckSum string `json:"ssl_cert_check_sum,omitempty"` 126 SslCertPassword string `json:"ssl_cert_password,omitempty"` 127 } 128 129 type TestClusterConnectionsReq struct { 130 Jobs []TestJob `json:"jobs" required:"true"` 131 } 132 133 type TestJob struct { 134 Action string `json:"action" required:"true"` 135 JobId string `json:"job_id" required:"true"` 136 Property string `json:"property" required:"true"` 137 } 138 139 type PropertyParam struct { 140 NetType string `json:"nettype" required:"true"` 141 EndPointType string `json:"endpointtype" required:"true"` 142 DbType string `json:"dbtype" required:"true"` 143 Ip string `json:"ip" required:"true"` 144 DbUser string `json:"dbuser" required:"true"` 145 DbPassword string `json:"dbpassword" required:"true"` 146 DbPort *int `json:"dbport,omitempty"` 147 DbName string `json:"dbName,omitempty"` 148 Region string `json:"region,omitempty"` 149 ProjectId string `json:"projectId,omitempty"` 150 InstId string `json:"instid,omitempty"` 151 VpcId string `json:"vpcId,omitempty"` 152 SubnetId string `json:"subnetId,omitempty"` 153 SslLink *bool `json:"ssllink,omitempty"` 154 SslCertKey string `json:"sslcertkey,omitempty"` 155 SslCertName string `json:"sslcertname,omitempty"` 156 SslCertCheckSum string `json:"sslcertchecksum,omitempty"` 157 } 158 159 type BatchDeleteJobReq struct { 160 Jobs []DeleteJobReq `json:"jobs" required:"true"` 161 } 162 163 type DeleteJobReq struct { 164 DeleteType string `json:"delete_type" required:"true"` 165 JobId string `json:"job_id" required:"true"` 166 } 167 168 type UpdateReq struct { 169 Jobs []UpdateJobReq `json:"jobs" required:"true"` 170 } 171 172 type UpdateJobReq struct { 173 JobId string `json:"job_id" required:"true"` 174 Name string `json:"name,omitempty"` 175 SourceEndpoint *Endpoint `json:"source_endpoint,omitempty"` 176 TargetEndpoint *Endpoint `json:"target_endpoint,omitempty"` 177 NodeType string `json:"node_type,omitempty"` 178 EngineType string `json:"engine_type,omitempty"` 179 NetType string `json:"net_type,omitempty"` 180 StoreDbInfo bool `json:"store_db_info,omitempty"` 181 182 IsRecreate *bool `json:"is_recreate,omitempty"` 183 Description string `json:"description,omitempty"` 184 TaskType string `json:"task_type,omitempty"` 185 DbUseType string `json:"db_use_type,omitempty"` 186 JobDirection string `json:"job_direction,omitempty"` 187 IsTargetReadonly *bool `json:"is_target_readonly,omitempty"` 188 ProductId string `json:"product_id,omitempty"` 189 190 ReplaceDefiner *bool `json:"replace_definer,omitempty"` 191 Tags []tags.ResourceTag `json:"tags,omitempty"` 192 AlarmNotify *AlarmNotifyInfo `json:"alarm_notify,omitempty"` 193 } 194 195 type AlarmNotifyInfo struct { 196 DelayTime *int `json:"delay_time,omitempty"` 197 RtoDelay *int `json:"rto_delay,omitempty"` 198 RpoDelay *int `json:"rpo_delay,omitempty"` 199 AlarmToUser bool `json:"alarm_to_user" required:"true"` 200 Subscriptions []SubscriptionInfo `json:"subscriptions,omitempty"` 201 } 202 203 type SubscriptionInfo struct { 204 Endpoints []string `json:"endpoints" required:"true"` 205 // sms; email 206 Protocol string `json:"protocol" required:"true"` 207 } 208 209 type BatchLimitSpeedReq struct { 210 SpeedLimits []LimitSpeedReq `json:"speed_limits" required:"true"` 211 } 212 213 type LimitSpeedReq struct { 214 JobId string `json:"job_id" required:"true"` 215 SpeedLimit []SpeedLimitInfo `json:"speed_limit" required:"true"` 216 } 217 218 type SpeedLimitInfo struct { 219 // format: hh:mm 220 Begin string `json:"begin" required:"true"` 221 // format: hh:mm 222 End string `json:"end" required:"true"` 223 // range: 1~9999 , unit: MB/s 224 Speed string `json:"speed" required:"true"` 225 } 226 227 type ListJobsReq struct { 228 CurPage int `json:"cur_page" required:"true"` 229 PerPage int `json:"per_page" required:"true"` 230 DbUseType string `json:"db_use_type" required:"true"` 231 EngineType string `json:"engine_type,omitempty"` 232 EnterpriseProjectId string `json:"enterprise_project_id,omitempty"` 233 // name or id 234 Name string `json:"name,omitempty"` 235 NetType string `json:"net_type,omitempty"` 236 ServiceName string `json:"service_name,omitempty"` 237 Status string `json:"status,omitempty"` 238 239 Tags []tags.ResourceTag `json:"tags,omitempty"` 240 } 241 242 type BatchPrecheckReq struct { 243 Jobs []PreCheckInfo `json:"jobs" required:"true"` 244 } 245 246 type PreCheckInfo struct { 247 JobId string `json:"job_id" required:"true"` 248 PrecheckMode string `json:"precheck_mode" required:"true"` 249 } 250 251 type QueryPrecheckResultReq struct { 252 Jobs []string `json:"jobs" required:"true"` 253 } 254 255 var RequestOpts = golangsdk.RequestOpts{ 256 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 257 } 258 259 func Create(c *golangsdk.ServiceClient, opts BatchCreateJobReq) (*CreateResp, error) { 260 b, err := golangsdk.BuildRequestBody(opts, "") 261 if err != nil { 262 return nil, err 263 } 264 265 var r CreateResp 266 _, err = c.Post(createURL(c), b, &r, &golangsdk.RequestOpts{ 267 MoreHeaders: RequestOpts.MoreHeaders, 268 }) 269 return &r, err 270 } 271 272 func Get(c *golangsdk.ServiceClient, opts QueryJobReq) (*JobDetailResp, error) { 273 b, err := golangsdk.BuildRequestBody(opts, "") 274 if err != nil { 275 return nil, err 276 } 277 278 var rst JobDetailResp 279 _, err = c.Post(detailsURL(c), b, &rst, &golangsdk.RequestOpts{ 280 MoreHeaders: RequestOpts.MoreHeaders, 281 }) 282 return &rst, err 283 } 284 285 func Start(c *golangsdk.ServiceClient, opts StartJobReq) (*ActionResp, error) { 286 b, err := golangsdk.BuildRequestBody(opts, "") 287 if err != nil { 288 return nil, err 289 } 290 291 var r ActionResp 292 _, err = c.Post(startURL(c), b, &r, &golangsdk.RequestOpts{ 293 MoreHeaders: RequestOpts.MoreHeaders, 294 }) 295 return &r, err 296 } 297 298 func TestConnections(c *golangsdk.ServiceClient, opts TestConnectionsReq) (*ActionResp, error) { 299 b, err := golangsdk.BuildRequestBody(opts, "") 300 if err != nil { 301 return nil, err 302 } 303 304 var rst ActionResp 305 _, err = c.Post(testConnectionsURL(c), b, &rst, &golangsdk.RequestOpts{ 306 MoreHeaders: RequestOpts.MoreHeaders, 307 }) 308 return &rst, err 309 } 310 311 func TestClusterConnections(c *golangsdk.ServiceClient, opts TestClusterConnectionsReq) (*ActionResp, error) { 312 b, err := golangsdk.BuildRequestBody(opts, "") 313 if err != nil { 314 return nil, err 315 } 316 317 var rst ActionResp 318 _, err = c.Post(testClusterConnectionsURL(c), b, &rst, &golangsdk.RequestOpts{ 319 MoreHeaders: RequestOpts.MoreHeaders, 320 }) 321 return &rst, err 322 } 323 324 func Update(c *golangsdk.ServiceClient, opts UpdateReq) (*golangsdk.Result, error) { 325 b, err := golangsdk.BuildRequestBody(opts, "") 326 if err != nil { 327 return nil, err 328 } 329 330 var r golangsdk.Result 331 _, err = c.Put(updateJobURL(c), b, &r.Body, &golangsdk.RequestOpts{ 332 MoreHeaders: RequestOpts.MoreHeaders, 333 }) 334 return &r, err 335 } 336 337 func Delete(c *golangsdk.ServiceClient, opts BatchDeleteJobReq) *golangsdk.ErrResult { 338 var r golangsdk.ErrResult 339 340 url := deleteURL(c) 341 b, err := golangsdk.BuildRequestBody(opts, "") 342 if err != nil { 343 r.Err = err 344 return &r 345 } 346 347 _, r.Err = c.DeleteWithBody(url, b, &golangsdk.RequestOpts{ 348 MoreHeaders: RequestOpts.MoreHeaders, 349 }) 350 return &r 351 } 352 353 func LimitSpeed(c *golangsdk.ServiceClient, opts BatchLimitSpeedReq) (*ActionResp, error) { 354 b, err := golangsdk.BuildRequestBody(opts, "") 355 if err != nil { 356 return nil, err 357 } 358 359 var rst ActionResp 360 _, err = c.Put(limitSpeedURL(c), b, &rst, &golangsdk.RequestOpts{ 361 MoreHeaders: RequestOpts.MoreHeaders, 362 }) 363 return &rst, err 364 } 365 366 func PreCheckJobs(c *golangsdk.ServiceClient, opts BatchPrecheckReq) (*PrecheckResp, error) { 367 b, err := golangsdk.BuildRequestBody(opts, "") 368 if err != nil { 369 return nil, err 370 } 371 372 var rst PrecheckResp 373 _, err = c.Post(preCheckURL(c), b, &rst, &golangsdk.RequestOpts{ 374 MoreHeaders: RequestOpts.MoreHeaders, 375 }) 376 return &rst, err 377 } 378 379 func CheckResults(c *golangsdk.ServiceClient, opts QueryPrecheckResultReq) (*PrecheckResultResp, error) { 380 b, err := golangsdk.BuildRequestBody(opts, "") 381 if err != nil { 382 return nil, err 383 } 384 385 var rst PrecheckResultResp 386 _, err = c.Post(batchCheckResultsURL(c), b, &rst, &golangsdk.RequestOpts{ 387 MoreHeaders: RequestOpts.MoreHeaders, 388 }) 389 return &rst, err 390 } 391 392 func List(c *golangsdk.ServiceClient, opts ListJobsReq) (*JobsListResp, error) { 393 b, err := golangsdk.BuildRequestBody(opts, "") 394 if err != nil { 395 return nil, err 396 } 397 398 var rst JobsListResp 399 _, err = c.Post(listURL(c), b, &rst, &golangsdk.RequestOpts{ 400 MoreHeaders: RequestOpts.MoreHeaders, 401 }) 402 return &rst, err 403 } 404 405 func Status(c *golangsdk.ServiceClient, opts QueryJobReq) (*StatusResp, error) { 406 b, err := golangsdk.BuildRequestBody(opts, "") 407 if err != nil { 408 return nil, err 409 } 410 411 var rst StatusResp 412 _, err = c.Post(statusURL(c), b, &rst, &golangsdk.RequestOpts{ 413 MoreHeaders: RequestOpts.MoreHeaders, 414 }) 415 416 return &rst, err 417 } 418 419 func Progress(c *golangsdk.ServiceClient, opts QueryJobReq) (*ProgressResp, error) { 420 b, err := golangsdk.BuildRequestBody(opts, "") 421 if err != nil { 422 return nil, err 423 } 424 425 var rst ProgressResp 426 _, err = c.Post(progressURL(c), b, &rst, &golangsdk.RequestOpts{ 427 MoreHeaders: RequestOpts.MoreHeaders, 428 }) 429 430 return &rst, err 431 }