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  }