in alibabacloudstack/resource_apsarastack_dts_synchronization_job.go [435:669]
func resourceAlibabacloudStackDtsSynchronizationJobUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
d.Partial(true)
var err error
var dtsClient *sts.Client
if client.Config.SecurityToken == "" {
dtsClient, err = sts.NewClientWithAccessKey(client.Config.RegionId, client.Config.AccessKey, client.Config.SecretKey)
} else {
dtsClient, err = sts.NewClientWithStsToken(client.Config.RegionId, client.Config.AccessKey, client.Config.SecretKey, client.Config.SecurityToken)
}
dtsClient.Domain = client.Config.Endpoints[connectivity.DTSCode]
if err != nil {
return errmsgs.WrapError(err)
}
request := client.NewCommonRequest("POST", "Dts", "2020-01-01", "", "")
request.Headers["x-acs-caller-sdk-source"] = "Terraform" // 必填,调用来源说明
request.Headers["x-acs-content-type"] = "application/json"
request.Headers["Content-type"] = "application/json"
request.QueryParams["DtsJobId"] = d.Id()
update := false
if !d.IsNewResource() && d.HasChange("dts_job_name") {
update = true
request.QueryParams["DtsJobName"] = d.Get("dts_job_name").(string)
}
if update {
action := "ModifyDtsJobName"
request.ApiName = action
response := make(map[string]interface{})
request.ApiName = action
request.QueryParams["Action"] = action
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
raw, err := dtsClient.ProcessCommonRequest(request)
addDebug(action, raw, request, request.QueryParams)
if err != nil {
if errmsgs.NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
errmsg := ""
if raw != nil {
errmsg = errmsgs.GetBaseResponseErrorMessage(raw.BaseResponse)
}
err = errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_dts_synchronization_job", action, errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
return resource.NonRetryableError(err)
}
err = json.Unmarshal(raw.GetHttpContentBytes(), &response)
if err != nil {
return resource.NonRetryableError(err)
}
return nil
})
if err != nil {
return err
}
if fmt.Sprint(response["Success"]) == "false" {
return errmsgs.WrapError(fmt.Errorf("%s failed, response: %v", action, response))
}
// d.SetPartial("dts_job_name")
}
modifyDtsJobPasswordReq := client.NewCommonRequest("POST", "Dts", "2020-01-01", "", "")
modifyDtsJobPasswordReq.Headers["x-acs-caller-sdk-source"] = "Terraform" // 必填,调用来源说明
modifyDtsJobPasswordReq.Headers["x-acs-content-type"] = "application/json"
modifyDtsJobPasswordReq.Headers["Content-type"] = "application/json"
modifyDtsJobPasswordReq.QueryParams["DtsJobId"] = d.Id()
if !d.IsNewResource() && d.HasChange("source_endpoint_password") {
modifyDtsJobPasswordReq.QueryParams["Endpoint"] = "src"
if v, ok := d.GetOk("source_endpoint_password"); ok {
modifyDtsJobPasswordReq.QueryParams["Password"] = v.(string)
}
if v, ok := d.GetOk("source_endpoint_user_name"); ok {
modifyDtsJobPasswordReq.QueryParams["UserName"] = v.(string)
}
action := "ModifyDtsJobPassword"
modifyDtsJobPasswordReq.ApiName = action
response := make(map[string]interface{})
modifyDtsJobPasswordReq.ApiName = action
modifyDtsJobPasswordReq.QueryParams["Action"] = action
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
raw, err := dtsClient.ProcessCommonRequest(modifyDtsJobPasswordReq)
addDebug(action, raw, modifyDtsJobPasswordReq, modifyDtsJobPasswordReq.QueryParams)
if err != nil {
if errmsgs.NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
errmsg := ""
if raw != nil {
errmsg = errmsgs.GetBaseResponseErrorMessage(raw.BaseResponse)
}
err = errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_dts_synchronization_job", action, errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
return resource.NonRetryableError(err)
}
err = json.Unmarshal(raw.GetHttpContentBytes(), &response)
if err != nil {
return resource.NonRetryableError(err)
}
return nil
})
if err != nil {
return err
}
if fmt.Sprint(response["Success"]) == "false" {
return errmsgs.WrapError(fmt.Errorf("%s failed, response: %v", action, response))
}
// d.SetPartial("source_endpoint_password")
// d.SetPartial("source_endpoint_user_name")
target := d.Get("status").(string)
err = resourceAlibabacloudStackDtsSynchronizationJobStatusFlow(d, meta, target)
if err != nil {
return errmsgs.WrapError(errmsgs.Error(errmsgs.FailedToReachTargetStatus, d.Get("status")))
}
}
if !d.IsNewResource() && d.HasChange("destination_endpoint_password") {
modifyDtsJobPasswordReq.QueryParams["Endpoint"] = "dst"
if v, ok := d.GetOk("destination_endpoint_password"); ok {
modifyDtsJobPasswordReq.QueryParams["Password"] = v.(string)
}
if v, ok := d.GetOk("destination_endpoint_user_name"); ok {
modifyDtsJobPasswordReq.QueryParams["UserName"] = v.(string)
}
action := "ModifyDtsJobPassword"
modifyDtsJobPasswordReq.ApiName = action
response := make(map[string]interface{})
modifyDtsJobPasswordReq.ApiName = action
modifyDtsJobPasswordReq.QueryParams["Action"] = action
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
raw, err := dtsClient.ProcessCommonRequest(modifyDtsJobPasswordReq)
addDebug(action, raw, modifyDtsJobPasswordReq, modifyDtsJobPasswordReq.QueryParams)
if err != nil {
if errmsgs.NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
errmsg := ""
if raw != nil {
errmsg = errmsgs.GetBaseResponseErrorMessage(raw.BaseResponse)
}
err = errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_dts_synchronization_job", action, errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
return resource.NonRetryableError(err)
}
err = json.Unmarshal(raw.GetHttpContentBytes(), &response)
if err != nil {
return resource.NonRetryableError(err)
}
return nil
})
if err != nil {
return err
}
if fmt.Sprint(response["Success"]) == "false" {
return errmsgs.WrapError(fmt.Errorf("%s failed, response: %v", action, response))
}
// d.SetPartial("source_endpoint_password")
// d.SetPartial("source_endpoint_user_name")
target := d.Get("status").(string)
err = resourceAlibabacloudStackDtsSynchronizationJobStatusFlow(d, meta, target)
if err != nil {
return errmsgs.WrapError(errmsgs.Error(errmsgs.FailedToReachTargetStatus, d.Get("status")))
}
}
update = false
transferInstanceClassReq := client.NewCommonRequest("POST", "Dts", "2020-01-01", "", "")
transferInstanceClassReq.Headers["x-acs-caller-sdk-source"] = "Terraform" // 必填,调用来源说明
transferInstanceClassReq.Headers["x-acs-content-type"] = "application/json"
transferInstanceClassReq.Headers["Content-type"] = "application/json"
transferInstanceClassReq.QueryParams["DtsJobId"] = d.Id()
transferInstanceClassReq.QueryParams["OrderType"] = "UPGRADE"
if !d.IsNewResource() && d.HasChange("instance_class") {
if v, ok := d.GetOk("instance_class"); ok {
transferInstanceClassReq.QueryParams["InstanceClass"] = v.(string)
}
update = true
}
if update {
action := "TransferInstanceClass"
transferInstanceClassReq.ApiName = action
response := make(map[string]interface{})
transferInstanceClassReq.QueryParams["Action"] = action
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
raw, err := dtsClient.ProcessCommonRequest(transferInstanceClassReq)
addDebug(action, raw, transferInstanceClassReq, transferInstanceClassReq.QueryParams)
if err != nil {
if errmsgs.NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
errmsg := ""
if raw != nil {
errmsg = errmsgs.GetBaseResponseErrorMessage(raw.BaseResponse)
}
err = errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_dts_synchronization_job", action, errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
return resource.NonRetryableError(err)
}
err = json.Unmarshal(raw.GetHttpContentBytes(), &response)
if err != nil {
return resource.NonRetryableError(err)
}
return nil
})
if err != nil {
return err
}
if fmt.Sprint(response["Success"]) == "false" {
return errmsgs.WrapError(fmt.Errorf("%s failed, response: %v", action, response))
}
}
if !d.IsNewResource() && d.HasChange("status") {
target := d.Get("status").(string)
err := resourceAlibabacloudStackDtsSynchronizationJobStatusFlow(d, meta, target)
if err != nil {
return errmsgs.WrapError(errmsgs.Error(errmsgs.FailedToReachTargetStatus, d.Get("status")))
}
}
d.Partial(false)
return nil
}