From 0b4206f52ddc0d1984d7c272e737d372d9854dd1 Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Fri, 2 May 2025 16:03:20 +0800 Subject: [PATCH 1/3] add --- .../resource_tc_private_dns_record.go | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/tencentcloud/services/privatedns/resource_tc_private_dns_record.go b/tencentcloud/services/privatedns/resource_tc_private_dns_record.go index 2dc2dedf9b..ab2aff476a 100644 --- a/tencentcloud/services/privatedns/resource_tc_private_dns_record.go +++ b/tencentcloud/services/privatedns/resource_tc_private_dns_record.go @@ -72,6 +72,8 @@ func resourceTencentCloudDPrivateDnsRecordCreate(d *schema.ResourceData, meta in var ( logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = PrivateDnsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = privatedns.NewCreatePrivateZoneRecordRequest() response = privatedns.NewCreatePrivateZoneRecordResponse() zoneId string @@ -114,8 +116,8 @@ func resourceTencentCloudDPrivateDnsRecordCreate(d *schema.ResourceData, meta in log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } - if result == nil { - e = fmt.Errorf("create PrivateDns record failed") + if result == nil || result.Response == nil || result.Response.RecordId == nil { + e = fmt.Errorf("create PrivateDns record failed, Response is nil.") return resource.NonRetryableError(e) } @@ -129,6 +131,37 @@ func resourceTencentCloudDPrivateDnsRecordCreate(d *schema.ResourceData, meta in } recordId := *response.Response.RecordId + + // wait + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + records, e := service.DescribePrivateDnsRecordByFilter(ctx, zoneId, nil) + if e != nil { + return tccommon.RetryError(e) + } + + if len(records) < 1 { + return resource.NonRetryableError(fmt.Errorf("[WARN]%s resource `PrivateDnsRecord` [%s] not found, please check if it has been deleted.\n", logId, recordId)) + } + + var record *privatedns.PrivateZoneRecord + for _, item := range records { + if *item.RecordId == recordId { + record = item + } + } + + if record != nil { + return nil + } + + return resource.RetryableError(fmt.Errorf("[WARN]%s resource `PrivateDnsRecord` [%s] wait creating...\n", logId, recordId)) + }) + + if err != nil { + log.Printf("[CRITAL]%s describe PrivateDns record failed, reason:%s\n", logId, err.Error()) + return err + } + d.SetId(strings.Join([]string{zoneId, recordId}, tccommon.FILED_SP)) return resourceTencentCloudDPrivateDnsRecordRead(d, meta) From 450ea028089f5b5dfb54e4662b97fd3bab9780ff Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Fri, 2 May 2025 16:10:30 +0800 Subject: [PATCH 2/3] add --- .changelog/3344.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/3344.txt diff --git a/.changelog/3344.txt b/.changelog/3344.txt new file mode 100644 index 0000000000..08b1f9364a --- /dev/null +++ b/.changelog/3344.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_private_dns_record: Optimize the creation logic +``` \ No newline at end of file From b613a9d6f398489f464b77d988b7e41906a9830f Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Sat, 3 May 2025 21:07:01 +0800 Subject: [PATCH 3/3] add --- .../services/privatedns/resource_tc_private_dns_record.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tencentcloud/services/privatedns/resource_tc_private_dns_record.go b/tencentcloud/services/privatedns/resource_tc_private_dns_record.go index ab2aff476a..889bba03c6 100644 --- a/tencentcloud/services/privatedns/resource_tc_private_dns_record.go +++ b/tencentcloud/services/privatedns/resource_tc_private_dns_record.go @@ -140,12 +140,12 @@ func resourceTencentCloudDPrivateDnsRecordCreate(d *schema.ResourceData, meta in } if len(records) < 1 { - return resource.NonRetryableError(fmt.Errorf("[WARN]%s resource `PrivateDnsRecord` [%s] not found, please check if it has been deleted.\n", logId, recordId)) + return resource.RetryableError(fmt.Errorf("[WARN]%s resource `PrivateDnsRecord` [%s] wait creating...\n", logId, zoneId)) } var record *privatedns.PrivateZoneRecord for _, item := range records { - if *item.RecordId == recordId { + if item.RecordId != nil && *item.RecordId == recordId { record = item } } @@ -198,7 +198,7 @@ func resourceTencentCloudDPrivateDnsRecordRead(d *schema.ResourceData, meta inte var record *privatedns.PrivateZoneRecord for _, item := range records { - if *item.RecordId == recordId { + if item.RecordId != nil && *item.RecordId == recordId { record = item } }