in alibabacloudstack/resource_apsarastack_polardb_instance.go [468:779]
func resourceAlibabacloudStackPolardbInstanceUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
PolardbService := PolardbService{client}
d.Partial(true)
stateConf := BuildStateConf([]string{"DBInstanceClassChanging", "DBInstanceNetTypeChanging"}, []string{"Running"}, d.Timeout(schema.TimeoutUpdate), 1*time.Minute, PolardbService.PolardbDBInstanceStateRefreshFunc(d, client, d.Id(), []string{"Deleting"}))
if d.HasChange("parameters") {
if err := PolardbService.ModifyParameters(d, client, "parameters"); err != nil {
return errmsgs.WrapError(err)
}
}
payType := Postpaid
if v, ok := connectivity.GetResourceDataOk(d, "payment_type", "instance_charge_type"); ok && Trim(v.(string)) != "" {
payType = PayType(Trim(v.(string)))
}
if !d.IsNewResource() && d.HasChanges("instance_charge_type", "payment_type") && payType == Prepaid {
request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "ModifyDBInstancePayType", "")
PolardbModifydbinstancepaytypeResponse := PolardbModifydbinstancepaytypeResponse{}
request.QueryParams["DBInstanceId"] = d.Id()
request.QueryParams["PayType"] = string(payType)
request.QueryParams["AutoPay"] = "true"
period := d.Get("period").(int)
request.QueryParams["UsedTime"] = strconv.Itoa(period)
request.QueryParams["Period"] = string(Month)
if period > 9 {
request.QueryParams["UsedTime"] = strconv.Itoa(period / 12)
request.QueryParams["Period"] = string(Year)
}
bresponse, err := client.ProcessCommonRequest(request)
if err != nil {
if bresponse == nil {
return errmsgs.WrapErrorf(err, "Process Common Request Failed")
}
errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg,
"alibabacloudstack_polardb_db_instance", "ModifyDBInstancePayType", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbModifydbinstancepaytypeResponse)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg,
"alibabacloudstack_polardb_db_instance", "ModifyDBInstancePayType", errmsgs.AlibabacloudStackSdkGoERROR)
}
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
}
if payType == Prepaid && d.HasChanges("auto_renew", "auto_renew_period") {
request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "ModifyInstanceAutoRenewalAttribute", "")
PolardbModifyinstanceautorenewalattributeResponse := PolardbModifyinstanceautorenewalattributeResponse{}
request.QueryParams["DBInstanceId"] = d.Id()
auto_renew := d.Get("auto_renew").(bool)
if auto_renew {
request.QueryParams["AutoRenew"] = "True"
} else {
request.QueryParams["AutoRenew"] = "False"
}
request.QueryParams["Duration"] = strconv.Itoa(d.Get("auto_renew_period").(int))
bresponse, err := client.ProcessCommonRequest(request)
if err != nil {
if bresponse == nil {
return errmsgs.WrapErrorf(err, "Process Common Request Failed")
}
errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg,
"alibabacloudstack_polardb_db_instance", "ModifyInstanceAutoRenewalAttribute", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbModifyinstanceautorenewalattributeResponse)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg,
"alibabacloudstack_polardb_db_instance", "ModifyInstanceAutoRenewalAttribute", errmsgs.AlibabacloudStackSdkGoERROR)
}
}
if d.HasChange("monitoring_period") {
period := d.Get("monitoring_period").(int)
request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "ModifyDBInstanceMonitor", "")
PolardbModifydbinstancemonitorResponse := PolardbModifydbinstancemonitorResponse{}
request.QueryParams["DBInstanceId"] = d.Id()
request.QueryParams["Period"] = strconv.Itoa(period)
bresponse, err := client.ProcessCommonRequest(request)
if err != nil {
if bresponse == nil {
return errmsgs.WrapErrorf(err, "Process Common Request Failed")
}
errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg,
"alibabacloudstack_polardb_db_instance", "ModifyDBInstanceMonitor", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbModifydbinstancemonitorResponse)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg,
"alibabacloudstack_polardb_db_instance", "ModifyDBInstanceMonitor", errmsgs.AlibabacloudStackSdkGoERROR)
}
}
if d.HasChange("maintain_time") {
request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "ModifyDBInstanceMaintainTime", "")
PolardbModifydbinstancemaintaintimeResponse := PolardbModifydbinstancemaintaintimeResponse{}
request.QueryParams["DBInstanceId"] = d.Id()
request.QueryParams["MaintainTime"] = d.Get("maintain_time").(string)
request.QueryParams["ClientToken"] = buildClientToken(request.GetActionName())
bresponse, err := client.ProcessCommonRequest(request)
if err != nil {
if bresponse == nil {
return errmsgs.WrapErrorf(err, "Process Common Request Failed")
}
errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg,
"alibabacloudstack_polardb_db_instance", "ModifyDBInstanceMaintainTime", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbModifydbinstancemaintaintimeResponse)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg,
"alibabacloudstack_polardb_db_instance", "ModifyDBInstanceMaintainTime", errmsgs.AlibabacloudStackSdkGoERROR)
}
}
if d.IsNewResource() {
d.Partial(false)
return nil
}
if d.HasChanges("instance_name", "db_instance_description") {
request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "ModifyDBInstanceDescription", "")
PolardbModifydbinstancedescriptionResponse := PolardbModifydbinstancedescriptionResponse{}
request.QueryParams["DBInstanceId"] = d.Id()
request.QueryParams["DBInstanceDescription"] = connectivity.GetResourceData(d, "db_instance_description", "instance_name").(string)
bresponse, err := client.ProcessCommonRequest(request)
if err != nil {
if bresponse == nil {
return errmsgs.WrapErrorf(err, "Process Common Request Failed")
}
errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg,
"alibabacloudstack_polardb_db_instance", "ModifyDBInstanceDescription", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbModifydbinstancedescriptionResponse)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg,
"alibabacloudstack_polardb_db_instance", "ModifyDBInstanceDescription", errmsgs.AlibabacloudStackSdkGoERROR)
}
}
if d.HasChange("security_ips") {
request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "ModifySecurityIps", "")
PolardbModifysecurityipsResponse := PolardbModifysecurityipsResponse{}
ipList := expandStringList(d.Get("security_ips").(*schema.Set).List())
ipstr := strings.Join(ipList[:], COMMA_SEPARATED)
if ipstr == "" {
ipstr = LOCAL_HOST_IP
}
if err := PolardbService.ModifyDBSecurityIps(d, client, ipstr); err != nil {
return errmsgs.WrapError(err)
}
request.QueryParams["DBInstanceId"] = d.Id()
request.QueryParams["SecurityIps"] = ipstr
bresponse, err := client.ProcessCommonRequest(request)
if err != nil {
if bresponse == nil {
return errmsgs.WrapErrorf(err, "Process Common Request Failed")
}
errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg,
"alibabacloudstack_polardb_db_instance", "ModifySecurityIps", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbModifysecurityipsResponse)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg,
"alibabacloudstack_polardb_db_instance", "ModifySecurityIps", errmsgs.AlibabacloudStackSdkGoERROR)
}
}
update := false
request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "ModifyDBInstanceSpec", "")
PolardbModifydbinstancespecResponse := PolardbModifydbinstancespecResponse{}
request.QueryParams["DBInstanceId"] = d.Id()
if v, ok := connectivity.GetResourceDataOk(d, "payment_type", "instance_charge_type"); ok {
request.QueryParams["PayType"] = v.(string)
} else {
request.QueryParams["PayType"] = string(Postpaid)
}
if d.HasChanges("instance_type", "db_instance_class") {
request.QueryParams["DBInstanceClass"] = connectivity.GetResourceData(d, "db_instance_class", "instance_type").(string)
if err := errmsgs.CheckEmpty(request.QueryParams["DBInstanceClass"], schema.TypeString, "db_instance_class", "instance_type"); err != nil {
return errmsgs.WrapError(err)
}
update = true
}
if d.HasChanges("instance_storage", "db_instance_storage") {
request.QueryParams["DBInstanceStorage"] = strconv.Itoa(connectivity.GetResourceData(d, "db_instance_storage", "instance_storage").(int))
if err := errmsgs.CheckEmpty(request.QueryParams["DBInstanceStorage"], schema.TypeString, "db_instance_storage", "instance_storage"); err != nil {
return errmsgs.WrapError(err)
}
update = true
}
if update {
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
// wait instance status is running before modifying
bresponse, err := client.ProcessCommonRequest(request)
if err != nil {
if bresponse == nil {
return errmsgs.WrapErrorf(err, "Process Common Request Failed")
}
errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg,
"alibabacloudstack_polardb_db_instance", "ModifyDBInstanceSpec", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbModifydbinstancespecResponse)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg,
"alibabacloudstack_polardb_db_instance", "ModifyDBInstanceSpec", errmsgs.AlibabacloudStackSdkGoERROR)
}
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
}
d.Partial(false)
engine := Trim(d.Get("engine").(string))
if d.HasChange("tde_status") && d.Get("tde_status").(bool) && engine == "MySQL" {
tde_req := client.NewCommonRequest("POST", "polardb", "2024-01-30", "ModifyDBInstanceTDE", "")
tde_req.QueryParams["DBInstanceId"] = d.Id()
tde_req.QueryParams["TDEStatus"] = "Enabled"
bresponse, err := client.ProcessCommonRequest(tde_req)
if err != nil {
if bresponse == nil {
return errmsgs.WrapErrorf(err, "Process Common Request Failed")
}
errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_polardb_account", "DeleteAccount", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
stateConf := BuildStateConf([]string{"Disabled"}, []string{"Enabled"}, d.Timeout(schema.TimeoutCreate), 2*time.Minute, PolardbService.PolardbDBInstanceTdeStateRefreshFunc(d, client, d.Id(), []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
log.Print("Updated TDE")
}
if d.HasChange("enable_ssl") {
ssl := d.Get("enable_ssl").(bool)
ssl_req := client.NewCommonRequest("POST", "polardb", "2024-01-30", "ModifyDBInstanceSSL", "")
ssl_req.QueryParams["DBInstanceId"] = d.Id()
ssl_req.QueryParams["ConnectionString"] = d.Get("connection_string").(string)
var target, process string
engine := Trim(d.Get("engine").(string))
if ssl == true {
ssl_req.QueryParams["SSLEnabled"] = "1"
if engine == "MySQL" {
target = "Yes"
process = "No"
} else {
target = "on"
process = "off"
}
} else {
ssl_req.QueryParams["SSLEnabled"] = "0"
if engine == "MySQL" {
target = "off"
process = "on"
} else {
target = "No"
process = "Yes"
}
}
bresponse, err := client.ProcessCommonRequest(ssl_req)
if err != nil {
if bresponse == nil {
return errmsgs.WrapErrorf(err, "Process Common Request Failed")
}
errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_polardb_account", "DeleteAccount", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
stateConf := BuildStateConf([]string{process}, []string{target}, d.Timeout(schema.TimeoutCreate), 2*time.Minute, PolardbService.PolardbDBInstanceSslStateRefreshFunc(d, client, d.Id(), []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
if err := PolardbService.WaitForDBInstance(d, client, Running, DefaultLongTimeout); err != nil {
return errmsgs.WrapError(err)
}
if ssl == true {
log.Print("Updated SSL to true")
} else {
log.Print("Updated SSL to false")
}
}
return nil
}