diff --git a/.changelog/2682.txt b/.changelog/2682.txt new file mode 100644 index 0000000000..dd9b062435 --- /dev/null +++ b/.changelog/2682.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_postgresql_instance: Fix the issue of failed instance creation read +``` \ No newline at end of file diff --git a/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go b/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go index 729857ac4d..79a52e563e 100644 --- a/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go +++ b/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go @@ -10,7 +10,6 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - svccrs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/crs" svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" postgresql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312" @@ -970,19 +969,16 @@ func resourceTencentCloudPostgresqlInstanceUpdate(d *schema.ResourceData, meta i } if d.HasChange("security_groups") { - - // Only redis service support modify Generic DB instance security groups - service := svccrs.NewRedisService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) ids := d.Get("security_groups").(*schema.Set).List() var sgIds []*string for _, id := range ids { sgIds = append(sgIds, helper.String(id.(string))) } - err := service.ModifyDBInstanceSecurityGroups(ctx, "postgres", d.Id(), sgIds) + + err := postgresqlService.ModifyDBInstanceSecurityGroupsById(ctx, d.Id(), sgIds) if err != nil { return err } - } if d.HasChange("backup_plan") { @@ -1258,9 +1254,7 @@ func resourceTencentCloudPostgresqlInstanceRead(d *schema.ResourceData, meta int _ = d.Set("public_access_switch", public_access_switch) // security groups - // Only redis service support modify Generic DB instance security groups - redisService := svccrs.NewRedisService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) - sg, err := redisService.DescribeDBSecurityGroups(ctx, "postgres", d.Id()) + sg, err := postgresqlService.DescribeDBInstanceSecurityGroupsById(ctx, d.Id()) if err != nil { return err } diff --git a/tencentcloud/services/postgresql/resource_tc_postgresql_instance_test.go b/tencentcloud/services/postgresql/resource_tc_postgresql_instance_test.go index b1a481ec33..e84657deb7 100644 --- a/tencentcloud/services/postgresql/resource_tc_postgresql_instance_test.go +++ b/tencentcloud/services/postgresql/resource_tc_postgresql_instance_test.go @@ -652,7 +652,7 @@ resource "tencentcloud_postgresql_instance" "test" { vpc_id = tencentcloud_vpc.vpc.id subnet_id = tencentcloud_subnet.subnet.id engine_version = "13.3" - root_username = "tf-user" + root_user = "tf_user" root_password = "t1qaA2k1wgvfa3?ZZZ" charset = "LATIN1" memory = 4 @@ -688,7 +688,7 @@ resource "tencentcloud_postgresql_instance" "test" { vpc_id = tencentcloud_vpc.vpc.id subnet_id = tencentcloud_subnet.subnet.id engine_version = "13.3" - root_username = "tf-user" + root_user = "tf_user" root_password = "t1qaA2k1wgvfa3?ZZZ3daw" charset = "LATIN1" memory = 8 diff --git a/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go b/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go index 7fde1882ef..ba557b3e59 100644 --- a/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go +++ b/tencentcloud/services/postgresql/service_tencentcloud_postgresql.go @@ -459,6 +459,63 @@ func (me *PostgresqlService) DescribePostgresqlInstanceById(ctx context.Context, return } +func (me *PostgresqlService) DescribeDBInstanceSecurityGroupsById(ctx context.Context, instanceId string) (sg []string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := postgresql.NewDescribeDBInstanceSecurityGroupsRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + + request.DBInstanceId = &instanceId + ratelimit.Check(request.GetAction()) + var iacExtInfo connectivity.IacExtInfo + iacExtInfo.InstanceId = instanceId + response, err := me.client.UsePostgresqlClient(iacExtInfo).DescribeDBInstanceSecurityGroups(request) + if err != nil { + errRet = err + return + } + + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + return + } + + groups := response.Response.SecurityGroupSet + if len(groups) > 0 { + for i := range groups { + sg = append(sg, *groups[i].SecurityGroupId) + } + } + return +} + +func (me *PostgresqlService) ModifyDBInstanceSecurityGroupsById(ctx context.Context, instanceId string, securityGroupIds []*string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := postgresql.NewModifyDBInstanceSecurityGroupsRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + + request.DBInstanceId = &instanceId + request.SecurityGroupIdSet = securityGroupIds + ratelimit.Check(request.GetAction()) + var iacExtInfo connectivity.IacExtInfo + iacExtInfo.InstanceId = instanceId + response, err := me.client.UsePostgresqlClient(iacExtInfo).ModifyDBInstanceSecurityGroups(request) + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } + + errRet = err + return +} + func (me *PostgresqlService) DescribePostgresqlInstanceHAConfigById(ctx context.Context, instanceId string) (haConfig *postgresql.DescribeDBInstanceHAConfigResponseParams, errRet error) { logId := tccommon.GetLogId(ctx) request := postgresql.NewDescribeDBInstanceHAConfigRequest()