in alibabacloudstack/resource_apsarastack_mongodb_instance.go [366:601]
func resourceAlibabacloudStackMongoDBInstanceUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
ddsService := MongoDBService{client}
d.Partial(true)
if !d.IsNewResource() && (d.HasChange("instance_charge_type") && d.Get("instance_charge_type").(string) == "PrePaid") {
prePaidRequest := dds.CreateTransformToPrePaidRequest()
client.InitRpcRequest(*prePaidRequest.RpcRequest)
prePaidRequest.InstanceId = d.Id()
prePaidRequest.AutoPay = requests.NewBoolean(true)
prePaidRequest.Period = requests.NewInteger(d.Get("period").(int))
raw, err := client.WithDdsClient(func(client *dds.Client) (interface{}, error) {
return client.TransformToPrePaid(prePaidRequest)
})
if err != nil {
errmsg := ""
if bresponse, ok := raw.(*dds.TransformToPrePaidResponse); ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), prePaidRequest.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
addDebug(prePaidRequest.GetActionName(), raw, prePaidRequest.RpcRequest, prePaidRequest)
// wait instance status is running after modifying
stateConf := BuildStateConf([]string{"DBInstanceClassChanging", "DBInstanceNetTypeChanging"}, []string{"Running"}, d.Timeout(schema.TimeoutUpdate), 0, ddsService.RdsMongodbDBInstanceStateRefreshFunc(d.Id(), []string{"Deleting"}))
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapError(err)
}
//d.SetPartial("instance_charge_type")
//d.SetPartial("period")
}
if d.HasChanges("preferred_backup_time", "preferred_backup_period", "backup_time", "backup_period"){
if err := ddsService.MotifyMongoDBBackupPolicy(d); err != nil {
return errmsgs.WrapError(err)
}
//d.SetPartial("preferred_backup_time")
//d.SetPartial("preferred_backup_period")
}
if d.HasChange("tde_status") {
request := dds.CreateModifyDBInstanceTDERequest()
client.InitRpcRequest(*request.RpcRequest)
request.DBInstanceId = d.Id()
request.TDEStatus = d.Get("tde_status").(string)
raw, err := client.WithDdsClient(func(client *dds.Client) (interface{}, error) {
return client.ModifyDBInstanceTDE(request)
})
if err != nil {
errmsg := ""
if bresponse, ok := raw.(*dds.ModifyDBInstanceTDEResponse); ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
//d.SetPartial("tde_status")
}
if d.HasChanges("maintain_start_time", "maintain_end_time") {
request := dds.CreateModifyDBInstanceMaintainTimeRequest()
client.InitRpcRequest(*request.RpcRequest)
request.DBInstanceId = d.Id()
request.MaintainStartTime = d.Get("maintain_start_time").(string)
request.MaintainEndTime = d.Get("maintain_end_time").(string)
raw, err := client.WithDdsClient(func(client *dds.Client) (interface{}, error) {
return client.ModifyDBInstanceMaintainTime(request)
})
if err != nil {
errmsg := ""
if bresponse, ok := raw.(*dds.ModifyDBInstanceMaintainTimeResponse); ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
//d.SetPartial("maintain_start_time")
//d.SetPartial("maintain_end_time")
}
if d.HasChange("security_group_id") {
request := dds.CreateModifySecurityGroupConfigurationRequest()
client.InitRpcRequest(*request.RpcRequest)
request.DBInstanceId = d.Id()
request.SecurityGroupId = d.Get("security_group_id").(string)
raw, err := client.WithDdsClient(func(client *dds.Client) (interface{}, error) {
return client.ModifySecurityGroupConfiguration(request)
})
if err != nil {
errmsg := ""
if bresponse, ok := raw.(*dds.ModifySecurityGroupConfigurationResponse); ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
//d.SetPartial("security_group_id")
}
if err := ddsService.setInstanceTags(d); err != nil {
return errmsgs.WrapError(err)
}
if d.IsNewResource() {
d.Partial(false)
return nil
}
if d.HasChanges("db_instance_description", "name"){
request := dds.CreateModifyDBInstanceDescriptionRequest()
client.InitRpcRequest(*request.RpcRequest)
request.DBInstanceId = d.Id()
request.DBInstanceDescription = connectivity.GetResourceData(d, "db_instance_description", "name").(string)
raw, err := client.WithDdsClient(func(ddsClient *dds.Client) (interface{}, error) {
return ddsClient.ModifyDBInstanceDescription(request)
})
if err != nil {
errmsg := ""
if bresponse, ok := raw.(*dds.ModifyDBInstanceDescriptionResponse); ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
//d.SetPartial("db_instance_description")
}
if d.HasChange("security_ip_list") {
ipList := expandStringList(d.Get("security_ip_list").(*schema.Set).List())
ipstr := strings.Join(ipList[:], COMMA_SEPARATED)
// default disable connect from outside
if ipstr == "" {
ipstr = LOCAL_HOST_IP
}
if err := ddsService.ModifyMongoDBSecurityIps(d.Id(), ipstr); err != nil {
return errmsgs.WrapError(err)
}
//d.SetPartial("security_ip_list")
}
if d.HasChanges("account_password", "kms_encrypted_password") {
var accountPassword string
if accountPassword = d.Get("account_password").(string); accountPassword != "" {
//d.SetPartial("account_password")
} else if kmsPassword := d.Get("kms_encrypted_password").(string); kmsPassword != "" {
kmsService := KmsService{meta.(*connectivity.AlibabacloudStackClient)}
decryptResp, err := kmsService.Decrypt(kmsPassword, d.Get("kms_encryption_context").(map[string]interface{}))
if err != nil {
return errmsgs.WrapError(err)
}
accountPassword = decryptResp.Plaintext
//d.SetPartial("kms_encrypted_password")
//d.SetPartial("kms_encryption_context")
}
err := ddsService.ResetAccountPassword(d, accountPassword)
if err != nil {
return errmsgs.WrapError(err)
}
}
if d.HasChange("ssl_action") {
request := dds.CreateModifyDBInstanceSSLRequest()
client.InitRpcRequest(*request.RpcRequest)
request.DBInstanceId = d.Id()
request.SSLAction = d.Get("ssl_action").(string)
raw, err := client.WithDdsClient(func(ddsClient *dds.Client) (interface{}, error) {
return ddsClient.ModifyDBInstanceSSL(request)
})
if err != nil {
errmsg := ""
if bresponse, ok := raw.(*dds.ModifyDBInstanceSSLResponse); ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
//d.SetPartial("ssl_action")
}
if d.HasChange("db_instance_storage") ||
d.HasChange("db_instance_class") ||
d.HasChange("replication_factor") {
request := dds.CreateModifyDBInstanceSpecRequest()
client.InitRpcRequest(*request.RpcRequest)
request.DBInstanceId = d.Id()
request.DBInstanceClass = d.Get("db_instance_class").(string)
request.DBInstanceStorage = strconv.Itoa(d.Get("db_instance_storage").(int))
request.ReplicationFactor = strconv.Itoa(d.Get("replication_factor").(int))
// wait instance status is running before modifying
stateConf := BuildStateConf([]string{"DBInstanceClassChanging", "DBInstanceNetTypeChanging"}, []string{"Running"}, d.Timeout(schema.TimeoutUpdate), 1*time.Minute, ddsService.RdsMongodbDBInstanceStateRefreshFunc(d.Id(), []string{"Deleting"}))
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapError(err)
}
raw, err := client.WithDdsClient(func(ddsClient *dds.Client) (interface{}, error) {
return ddsClient.ModifyDBInstanceSpec(request)
})
if err != nil {
errmsg := ""
if bresponse, ok := raw.(*dds.ModifyDBInstanceSpecResponse); ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapError(err)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
//d.SetPartial("db_instance_class")
//d.SetPartial("db_instance_storage")
//d.SetPartial("replication_factor")
// wait instance status is running after modifying
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapError(err)
}
}
d.Partial(false)
return nil
}