@@ -385,7 +385,7 @@ func resourceTencentCloudPostgresqlInstanceCreate(d *schema.ResourceData, meta i
385
385
cpu = v .(int )
386
386
}
387
387
388
- if v , ok := d .GetOk ("period" ); ok {
388
+ if v , ok := d .GetOkExists ("period" ); ok {
389
389
log .Printf ("period set" )
390
390
period = v .(int )
391
391
} else {
@@ -404,7 +404,7 @@ func resourceTencentCloudPostgresqlInstanceCreate(d *schema.ResourceData, meta i
404
404
dbKernelVersion = v .(string )
405
405
}
406
406
407
- if v , ok := d .GetOk ("need_support_tde" ); ok {
407
+ if v , ok := d .GetOkExists ("need_support_tde" ); ok {
408
408
needSupportTde = v .(int )
409
409
}
410
410
@@ -416,12 +416,12 @@ func resourceTencentCloudPostgresqlInstanceCreate(d *schema.ResourceData, meta i
416
416
kmsRegion = v .(string )
417
417
}
418
418
419
- if v , ok := d .Get ("auto_renew_flag" ).( int ); ok {
420
- autoRenewFlag = v
419
+ if v , ok := d .GetOkExists ("auto_renew_flag" ); ok {
420
+ autoRenewFlag = v .( int )
421
421
}
422
422
423
- if v , ok := d .Get ("auto_voucher" ).( int ); ok {
424
- autoVoucher = v
423
+ if v , ok := d .GetOkExists ("auto_voucher" ); ok {
424
+ autoVoucher = v .( int )
425
425
}
426
426
427
427
if v , ok := d .GetOk ("voucher_ids" ); ok {
@@ -1004,10 +1004,7 @@ func resourceTencentCloudPostgresqlInstanceUpdate(d *schema.ResourceData, meta i
1004
1004
d .Partial (true )
1005
1005
1006
1006
if err := helper .ImmutableArgsChek (d ,
1007
- // "charge_type",
1008
- // "period",
1009
- // "auto_renew_flag",
1010
- // "auto_voucher",
1007
+ "auto_voucher" ,
1011
1008
"voucher_ids" ,
1012
1009
"root_user" ,
1013
1010
); err != nil {
@@ -1023,18 +1020,11 @@ func resourceTencentCloudPostgresqlInstanceUpdate(d *schema.ResourceData, meta i
1023
1020
waitSwitch = v .(int )
1024
1021
}
1025
1022
1026
- if d .HasChange ("period" ) && ! d .HasChange ("charge_type" ) {
1027
- return fmt .Errorf ("The `period` field can be changed only when updating the charge type from `POSTPAID_BY_HOUR` to `PREPAID`." )
1028
- }
1029
-
1030
1023
if d .HasChange ("charge_type" ) {
1031
1024
var (
1025
+ request = postgresql .NewModifyDBInstanceChargeTypeRequest ()
1032
1026
chargeTypeOld string
1033
1027
chargeTypeNew string
1034
- period = 1
1035
- autoRenew = 0
1036
- autoVoucher = 0
1037
- request = postgresql .NewModifyDBInstanceChargeTypeRequest ()
1038
1028
)
1039
1029
1040
1030
old , new := d .GetChange ("charge_type" )
@@ -1050,34 +1040,81 @@ func resourceTencentCloudPostgresqlInstanceUpdate(d *schema.ResourceData, meta i
1050
1040
return fmt .Errorf ("It only support to update the charge type from `POSTPAID_BY_HOUR` to `PREPAID`." )
1051
1041
}
1052
1042
1053
- if v , ok := d .GetOk ("period" ); ok {
1054
- log .Printf ("period set" )
1055
- period = v .(int )
1056
- } else {
1057
- log .Printf ("period not set" )
1043
+ request .DBInstanceId = & instanceId
1044
+ request .InstanceChargeType = & chargeTypeNew
1045
+ request .Period = helper .IntInt64 (1 )
1046
+ err := resource .Retry (tccommon .WriteRetryTimeout , func () * resource.RetryError {
1047
+ result , e := meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().UsePostgresqlClient ().ModifyDBInstanceChargeType (request )
1048
+ if e != nil {
1049
+ return tccommon .RetryError (e )
1050
+ } else {
1051
+ log .Printf ("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n " , logId , request .GetAction (), request .ToJsonString (), result .ToJsonString ())
1052
+ }
1053
+
1054
+ return nil
1055
+ })
1056
+
1057
+ if err != nil {
1058
+ log .Printf ("[CRITAL]%s operate postgresql ModifyDbInstanceChargeType failed, reason:%+v" , logId , err )
1059
+ return err
1058
1060
}
1059
1061
1060
- if v , ok := d . GetOk ( "auto_renew_flag" ); ok {
1061
- log . Printf ( "auto_renew_flag set" )
1062
- autoRenew = v .( int )
1063
- } else {
1064
- log . Printf ( "auto_renew_flag not set" )
1062
+ // wait unit charge type changing operation of instance done
1063
+ service := PostgresqlService { client : meta .(tccommon. ProviderMeta ). GetAPIV3Conn ()}
1064
+ conf := tccommon . BuildStateChangeConf ([] string {}, [] string { "running" }, 2 * tccommon . ReadRetryTimeout , time . Second , service . PostgresqlDBInstanceStateRefreshFunc ( instanceId , [] string {}) )
1065
+ if _ , e := conf . WaitForState (); e != nil {
1066
+ return e
1065
1067
}
1068
+ }
1066
1069
1067
- if v , ok := d .GetOk ("auto_voucher" ); ok {
1068
- log .Printf ("auto_voucher set" )
1069
- autoVoucher = v .(int )
1070
- } else {
1071
- log .Printf ("auto_voucher not set" )
1070
+ if d .HasChange ("auto_renew_flag" ) {
1071
+ request := postgresql .NewSetAutoRenewFlagRequest ()
1072
+ request .DBInstanceIdSet = helper .Strings ([]string {instanceId })
1073
+ if v , ok := d .GetOkExists ("auto_renew_flag" ); ok {
1074
+ request .AutoRenewFlag = helper .IntInt64 (v .(int ))
1075
+ }
1076
+
1077
+ err := resource .Retry (tccommon .WriteRetryTimeout , func () * resource.RetryError {
1078
+ result , e := meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().UsePostgresqlClient ().SetAutoRenewFlag (request )
1079
+ if e != nil {
1080
+ return tccommon .RetryError (e )
1081
+ } else {
1082
+ log .Printf ("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n " , logId , request .GetAction (), request .ToJsonString (), result .ToJsonString ())
1083
+ }
1084
+
1085
+ return nil
1086
+ })
1087
+
1088
+ if err != nil {
1089
+ log .Printf ("[CRITAL]%s operate postgresql SetAutoRenewFlag failed, reason:%+v" , logId , err )
1090
+ return err
1091
+ }
1092
+
1093
+ // wait unit charge type changing operation of instance done
1094
+ service := PostgresqlService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
1095
+ conf := tccommon .BuildStateChangeConf ([]string {}, []string {"running" }, 2 * tccommon .ReadRetryTimeout , time .Second , service .PostgresqlDBInstanceStateRefreshFunc (instanceId , []string {}))
1096
+ if _ , e := conf .WaitForState (); e != nil {
1097
+ return e
1072
1098
}
1099
+ }
1073
1100
1101
+ if d .HasChange ("period" ) {
1102
+ request := postgresql .NewRenewInstanceRequest ()
1074
1103
request .DBInstanceId = & instanceId
1075
- request .InstanceChargeType = & chargeTypeNew
1076
- request .Period = helper .IntInt64 (period )
1077
- request .AutoRenewFlag = helper .IntInt64 (autoRenew )
1078
- request .AutoVoucher = helper .IntInt64 (autoVoucher )
1104
+ if v , ok := d .GetOkExists ("period" ); ok {
1105
+ request .Period = helper .IntInt64 (v .(int ))
1106
+ }
1107
+
1108
+ if v , ok := d .GetOkExists ("auto_voucher" ); ok {
1109
+ request .AutoVoucher = helper .IntInt64 (v .(int ))
1110
+ }
1111
+
1112
+ if v , ok := d .GetOk ("voucher_ids" ); ok {
1113
+ request .VoucherIds = helper .InterfacesStringsPoint (v .([]interface {}))
1114
+ }
1115
+
1079
1116
err := resource .Retry (tccommon .WriteRetryTimeout , func () * resource.RetryError {
1080
- result , e := meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().UsePostgresqlClient ().ModifyDBInstanceChargeType (request )
1117
+ result , e := meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().UsePostgresqlClient ().RenewInstance (request )
1081
1118
if e != nil {
1082
1119
return tccommon .RetryError (e )
1083
1120
} else {
@@ -1088,7 +1125,7 @@ func resourceTencentCloudPostgresqlInstanceUpdate(d *schema.ResourceData, meta i
1088
1125
})
1089
1126
1090
1127
if err != nil {
1091
- log .Printf ("[CRITAL]%s operate postgresql ModifyDbInstanceChargeType failed, reason:%+v" , logId , err )
1128
+ log .Printf ("[CRITAL]%s operate postgresql RenewInstance failed, reason:%+v" , logId , err )
1092
1129
return err
1093
1130
}
1094
1131
0 commit comments