Skip to content

Commit b5d60f9

Browse files
authored
fix: dnspod unit update (#1301)
Co-authored-by: arunma <arunma@tencent.com>
1 parent ce39754 commit b5d60f9

File tree

2 files changed

+147
-2
lines changed

2 files changed

+147
-2
lines changed
Lines changed: 90 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,61 @@
11
package tencentcloud
22

33
import (
4+
"context"
5+
"fmt"
46
"testing"
57

8+
"github.com/hashicorp/terraform-plugin-sdk/terraform"
9+
610
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
711
)
812

13+
const Domain = "terraformer.com"
14+
15+
func init() {
16+
// go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_dnspod_domain_instance
17+
resource.AddTestSweepers("tencentcloud_dnspod_domain_instance", &resource.Sweeper{
18+
Name: "tencentcloud_dnspod_domain_instance",
19+
F: testSweepDnspodDoamin,
20+
})
21+
}
22+
func testSweepDnspodDoamin(region string) error {
23+
logId := getLogId(contextNil)
24+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
25+
cli, _ := sharedClientForRegion(region)
26+
client := cli.(*TencentCloudClient).apiV3Conn
27+
service := DnspodService{client}
28+
29+
response, err := service.DescribeDomain(ctx, Domain)
30+
if err != nil {
31+
return err
32+
}
33+
34+
domainInfo := response.Response.DomainInfo
35+
if domainInfo == nil {
36+
return nil
37+
}
38+
39+
err = service.DeleteDomain(ctx, Domain)
40+
if err != nil {
41+
return err
42+
}
43+
44+
return nil
45+
}
46+
47+
// go test -i; go test -test.run TestAccTencentCloudDnspodDoamin -v
948
func TestAccTencentCloudDnspodDoamin(t *testing.T) {
1049
t.Parallel()
1150
resource.Test(t, resource.TestCase{
12-
Providers: testAccProviders,
51+
PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) },
52+
Providers: testAccProviders,
53+
CheckDestroy: testAccCheckDnspodDomainDestroy,
1354
Steps: []resource.TestStep{
1455
{
1556
Config: testAccTencentCloudDnspodDomain,
1657
Check: resource.ComposeTestCheckFunc(
58+
testAccCheckDnspodDomainExists("tencentcloud_dnspod_domain_instance.domain"),
1759
resource.TestCheckResourceAttr("tencentcloud_dnspod_domain_instance.domain", "domain", "terraformer.com"),
1860
resource.TestCheckResourceAttr("tencentcloud_dnspod_domain_instance.domain", "is_mark", "no"),
1961
),
@@ -22,9 +64,55 @@ func TestAccTencentCloudDnspodDoamin(t *testing.T) {
2264
})
2365
}
2466

67+
func testAccCheckDnspodDomainDestroy(s *terraform.State) error {
68+
logId := getLogId(contextNil)
69+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
70+
dnspodService := DnspodService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn}
71+
for _, rs := range s.RootModule().Resources {
72+
if rs.Type != "tencentcloud_dnspod_domain_instance" {
73+
continue
74+
}
75+
76+
response, err := dnspodService.DescribeDomain(ctx, rs.Primary.ID)
77+
if err != nil {
78+
return nil
79+
}
80+
if response.Response.DomainInfo != nil {
81+
return fmt.Errorf("record rule %s still exists", rs.Primary.ID)
82+
}
83+
}
84+
return nil
85+
}
86+
87+
func testAccCheckDnspodDomainExists(r string) resource.TestCheckFunc {
88+
return func(s *terraform.State) error {
89+
logId := getLogId(contextNil)
90+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
91+
92+
rs, ok := s.RootModule().Resources[r]
93+
if !ok {
94+
return fmt.Errorf("resource %s is not found", r)
95+
}
96+
if rs.Primary.ID == "" {
97+
return fmt.Errorf("domain id is not set")
98+
}
99+
100+
dnspodService := DnspodService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn}
101+
response, err := dnspodService.DescribeDomain(ctx, rs.Primary.ID)
102+
if err != nil {
103+
return err
104+
}
105+
if response.Response.DomainInfo == nil {
106+
return fmt.Errorf("dnspod domain %s is not found", rs.Primary.ID)
107+
}
108+
109+
return nil
110+
}
111+
}
112+
25113
const testAccTencentCloudDnspodDomain = `
26114
resource "tencentcloud_dnspod_domain_instance" "domain" {
27-
domain = "terraformer.com"
115+
domain = "` + Domain + `"
28116
is_mark = "no"
29117
}
30118
`

tencentcloud/service_tencentcloud_dnspod.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package tencentcloud
22

33
import (
44
"context"
5+
"fmt"
56
"log"
67

78
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
@@ -70,3 +71,59 @@ func (me *DnspodService) ModifyDnsPodDomainRemark(ctx context.Context, domain st
7071
}
7172
return
7273
}
74+
75+
func (me *DnspodService) DescribeDomain(ctx context.Context, domain string) (ret *dnspod.DescribeDomainResponse, errRet error) {
76+
77+
logId := getLogId(ctx)
78+
request := dnspod.NewDescribeDomainRequest()
79+
80+
defer func() {
81+
if errRet != nil {
82+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
83+
logId, request.GetAction(), request.ToJsonString(), errRet.Error())
84+
}
85+
}()
86+
87+
request.Domain = helper.String(domain)
88+
89+
response, err := me.client.UseDnsPodClient().DescribeDomain(request)
90+
91+
if err != nil {
92+
errRet = err
93+
return
94+
}
95+
96+
if response == nil || response.Response == nil {
97+
return nil, fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction())
98+
}
99+
100+
return response, nil
101+
}
102+
103+
func (me *DnspodService) DeleteDomain(ctx context.Context, domain string) (errRet error) {
104+
105+
logId := getLogId(ctx)
106+
request := dnspod.NewDeleteDomainRequest()
107+
ratelimit.Check(request.GetAction())
108+
request.Domain = helper.String(domain)
109+
110+
response, err := me.client.UseDnsPodClient().DeleteDomain(request)
111+
112+
defer func() {
113+
if errRet != nil {
114+
responseStr := ""
115+
if response != nil {
116+
responseStr = response.ToJsonString()
117+
}
118+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n",
119+
logId,
120+
request.GetAction(),
121+
request.ToJsonString(),
122+
responseStr,
123+
errRet.Error())
124+
}
125+
}()
126+
127+
errRet = err
128+
return
129+
}

0 commit comments

Comments
 (0)