diff --git a/.changelog/3324.txt b/.changelog/3324.txt new file mode 100644 index 0000000000..7a99cd3632 --- /dev/null +++ b/.changelog/3324.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_postgresql_readonly_instance: fixed the issue of returning an empty id when creating +``` \ No newline at end of file diff --git a/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance.go b/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance.go index a7d8a28069..8356bf7d78 100644 --- a/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance.go +++ b/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance.go @@ -324,7 +324,28 @@ func resourceTencentCloudPostgresqlReadOnlyInstanceCreate(d *schema.ResourceData if err != nil { return err } - instanceId := *response.Response.DBInstanceIdSet[0] + var instanceId string + if len(response.Response.DBInstanceIdSet) == 0 { + if len(response.Response.DealNames) == 0 { + return fmt.Errorf("TencentCloud SDK returns empty postgresql ID and Deals") + } + dealId := response.Response.DealNames[0] + service := PostgresqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + deals, err := service.DescribeOrders(ctx, []*string{dealId}) + if err != nil { + return err + } + if len(deals) > 0 && len(deals[0].DBInstanceIdSet) > 0 { + if deals[0].DBInstanceIdSet[0] != nil { + instanceId = *deals[0].DBInstanceIdSet[0] + } + } + } else { + if response.Response.DBInstanceIdSet[0] != nil { + instanceId = *response.Response.DBInstanceIdSet[0] + } + } d.SetId(instanceId) // check creation done diff --git a/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance_test.go b/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance_test.go index a23deddded..19a5cf86a3 100644 --- a/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance_test.go +++ b/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance_test.go @@ -132,6 +132,24 @@ func TestAccTencentCloudPostgresqlReadonlyInstanceResource_update_ro_group(t *te }) } +func TestAccTencentCloudPostgresqlReadonlyInstanceResource_prepaid(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccPostgresqlReadonlyInstanceInstance_prepaid, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet(testPostgresqlReadonlyInstanceResourceKey, "id"), + resource.TestCheckResourceAttr(testPostgresqlReadonlyInstanceResourceKey, "instance_charge_type", "PREPAID"), + ), + }, + }, + }) +} + const testAccPostgresqlReadonlyInstanceInstance_basic_without_rogroup string = tcacctest.OperationPresetPGSQL + tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` resource "tencentcloud_postgresql_readonly_instance" "instance" { auto_renew_flag = 0 @@ -244,3 +262,22 @@ const testAccPostgresqlReadonlyInstanceInstance_update_rogroup string = tcacctes min_delay_eliminate_reserve = 1 } ` + +const testAccPostgresqlReadonlyInstanceInstance_prepaid = ` +resource "tencentcloud_postgresql_readonly_instance" "instance" { + db_version = "17.0" + instance_charge_type = "PREPAID" + period = 1 + master_db_instance_id = "postgres-25816pex" + memory = 4 + cpu = 2 + name = "tf_ro_instance_test_rog" + need_support_ipv6 = 0 + project_id = 0 + security_groups_ids = ["sg-kensue7b"] + storage = 20 + vpc_id = "vpc-48tmc13b" + subnet_id = "subnet-96hw3j18" + zone = "ap-guangzhou-3" +} +`