@@ -1181,13 +1181,40 @@ func resourceRedisNodeSetModify(ctx context.Context, service *RedisService, d *s
11811181 ZoneId : helper .IntUint64 (zoneId ),
11821182 })
11831183 }
1184- err = resource .Retry (tccommon .WriteRetryTimeout , func () * resource.RetryError {
1185- _ , err := service .UpgradeInstance (ctx , d .Id (), memSize , shardNum , redisReplicaCount + len (adds ), addNodes )
1186- if err != nil {
1187- return tccommon .RetryError (err , redis .FAILEDOPERATION_UNKNOWN )
1184+ if redisReplicaCount + len (adds ) == 0 && len (adds ) == 1 {
1185+ // Processing the change from a single-AZ instance to a multi-AZ instance
1186+ request := redis .NewModifyInstanceAvailabilityZonesRequest ()
1187+ if v , ok := d .GetOkExists ("wait_switch" ); ok {
1188+ request .SwitchOption = helper .IntInt64 (v .(int ))
1189+ } else {
1190+ request .SwitchOption = helper .IntInt64 (2 )
11881191 }
1189- return nil
1190- })
1192+ request .InstanceId = & id
1193+ request .NodeSet = append (request .NodeSet ,
1194+ & redis.RedisNodeInfo {
1195+ NodeType : helper .IntInt64 (1 ),
1196+ ZoneId : helper .IntUint64 (adds [0 ]),
1197+ },
1198+ & redis.RedisNodeInfo {
1199+ NodeType : helper .IntInt64 (0 ),
1200+ ZoneId : helper .IntUint64 (int (* info .ZoneId )),
1201+ })
1202+ err = resource .Retry (tccommon .WriteRetryTimeout , func () * resource.RetryError {
1203+ _ , err := service .client .UseRedisClient ().ModifyInstanceAvailabilityZones (request )
1204+ if err != nil {
1205+ return tccommon .RetryError (err , redis .INTERNALERROR )
1206+ }
1207+ return nil
1208+ })
1209+ } else {
1210+ err = resource .Retry (tccommon .WriteRetryTimeout , func () * resource.RetryError {
1211+ _ , err := service .UpgradeInstance (ctx , d .Id (), memSize , shardNum , redisReplicaCount + len (adds ), addNodes )
1212+ if err != nil {
1213+ return tccommon .RetryError (err , redis .FAILEDOPERATION_UNKNOWN )
1214+ }
1215+ return nil
1216+ })
1217+ }
11911218 if err != nil {
11921219 return err
11931220 }
0 commit comments