Skip to content

Commit 0711f1c

Browse files
authored
feat(dnspod): custom line (#2280)
* feat(dnspod): custom line * feat(dnspod): custom line * feat(dnspod): custom line * docs(dnspod): cumstom lin
1 parent a48f768 commit 0711f1c

File tree

14 files changed

+1347
-82
lines changed

14 files changed

+1347
-82
lines changed

.changelog/2280.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-resource
2+
tencentcloud_dnspod_custom_line
3+
```

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ require (
4646
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.693
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.711
49-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.779
49+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.781
5050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
5252
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.692
@@ -55,7 +55,7 @@ require (
5555
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dc v1.0.633
5656
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dcdb v1.0.673
5757
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dlc v1.0.777
58-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.765
58+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.781
5959
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/domain v1.0.414
6060
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dts v1.0.628
6161
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/eb v1.0.760

go.sum

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -864,14 +864,14 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.760/go.mod
864864
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.762/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
865865
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.763/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
866866
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.764/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
867-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.765/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
868867
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.770/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
869868
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.771/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
870869
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.772/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
871870
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.775/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
872871
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.777/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
873-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.779 h1:dg6AIayETwnAyeSVGXAfxscytoVLyttGiFx3qu+pUJU=
874872
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.779/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
873+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.781 h1:ZLcrm4Mp3pWZnlHh61oKx4LrNeZ6Dmdu4RxWMloULJw=
874+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.781/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
875875
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624 h1:nEZqsoqt1pEoaP9JjkHQy3/H00suCfzlHW1qOm2nYD8=
876876
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624/go.mod h1:+TXSVyeKwt1IhZRqKPbTREteBcP+K07Q846/ilNzLWA=
877877
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762 h1:2egy69SP/wPsmnfozcQVZ6tUY6F6N/TpEe/7xtXrc/8=
@@ -888,8 +888,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dcdb v1.0.673 h1:YyjGLj
888888
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dcdb v1.0.673/go.mod h1:hXPMop1kJFqAvHj+7TyxxxXS/HGUP4SuKx5gGoAl0Zc=
889889
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dlc v1.0.777 h1:3fuNSFtYzAa7pR9/xhGiirOfZIwVTPRw0DKWi/Ar5bw=
890890
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dlc v1.0.777/go.mod h1:Zr9BUBp00uOgu0zS43wT8wKZul08iQmZ3WjJ1St1ENc=
891-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.765 h1:46VxMLFcM3mWr+GdOHmMCXsQM8Mle7pOip1z2RWmubU=
892-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.765/go.mod h1:EYfCXcZvLWidtpSNYsR2pvrBCUmOza39kox80Ud6PZg=
891+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.781 h1:rtHjLafb2uko1yiEhNJ9/WubfGYUOdLB6NB25kQxDYA=
892+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.781/go.mod h1:VK9QaPb0RIRLBciYTKqj+Enfq6ZUfv0mmhtM6bTwwAk=
893893
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/domain v1.0.414 h1:egwjvOEUKBaxsoRVn/YSEhp2E8qdh77Ous9A/wftDo0=
894894
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/domain v1.0.414/go.mod h1:LRWnBUNRxs/Ee8MzJJd3eHzydlqyB5qmia975Ca/Ox0=
895895
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dts v1.0.628 h1:cnhe9uh8tSyBfiPUckfqNI6t51YNZG9POupTrqWG9lM=
@@ -900,16 +900,12 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.762 h1:P5F8iay
900900
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.762/go.mod h1:8RFnUUZiVWlGt55IF+Bkw0bNoPxmvgMS7uxuGBNrsYA=
901901
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.0.777 h1:G1eX/DkiznhSjNVF97BAQyycFXOiPHxeTxgOadp5J/o=
902902
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.0.777/go.mod h1:ehbc9eaNknF/VU/kPTFLZbIUmkL06vQ/JYydu6yeXp4=
903-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap v1.0.760 h1:Fs6q2kYxWAZPbeAs8t5edzhRX7iiyXvHR0qaCHMZgDU=
904-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap v1.0.760/go.mod h1:yVviYUc0zcxhibofZpMTIUGh4wCgya9derdkIVlUQLo=
905903
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap v1.0.771 h1:hdd41TtqgVqdsq68NMEWTKRvJLRPN+Jae9kNvExvRdw=
906904
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap v1.0.771/go.mod h1:SzBYz5GyZvZlBHLhKKQ7X/1YaJu73ehlJRx4WK/V7hQ=
907905
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.563 h1:FoX+MK4vHThvPO6FbP5q98zD8S3n+d5+DbtK7skl++c=
908906
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.563/go.mod h1:uom4Nvi9W+Qkom0exYiJ9VWJjXwyxtPYTkKkaLMlfE0=
909907
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/lighthouse v1.0.729 h1:WQpzm3x27Jo/5uh6/Yqe/gbJ7r2ui9hc9ST7Ml2eP9Y=
910908
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/lighthouse v1.0.729/go.mod h1:lLoyD7Z6OQQDFxDGGTe8wmirhUFZ36l5OaxzP75853Y=
911-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live v1.0.756 h1:uwlWCqnsEXlafj/SixOJyyJojgEsjxkGtVOFGRhKk5I=
912-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live v1.0.756/go.mod h1:MWQuFxqztpy6xLJ/XXuAxjBXcjpCLbyN42P3eub1yEs=
913909
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live v1.0.777 h1:8nSy6GAXc4lHj7jpSimcM2eM1wE1r7PQJM9WVzY82+U=
914910
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live v1.0.777/go.mod h1:Nsd3yEpXQqXrWbN3mJbrk+A2KcdxHVW5xIRFAyIvlAE=
915911
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mariadb v1.0.672 h1:sR3MyM9RBw1PNRdWoBrtK+2M9Qbb0i6DfQSrvZ4/4os=

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1236,6 +1236,7 @@ DNSPOD
12361236
tencentcloud_dnspod_domain_alias
12371237
tencentcloud_dnspod_record
12381238
tencentcloud_dnspod_record_group
1239+
tencentcloud_dnspod_custom_line
12391240
12401241
Data Source
12411242
tencentcloud_dnspod_records
@@ -3331,6 +3332,7 @@ func Provider() *schema.Provider {
33313332
"tencentcloud_dnspod_domain_alias": resourceTencentCloudDnspodDomainAlias(),
33323333
"tencentcloud_dnspod_record": resourceTencentCloudDnspodRecord(),
33333334
"tencentcloud_dnspod_record_group": resourceTencentCloudDnspodRecordGroup(),
3335+
"tencentcloud_dnspod_custom_line": resourceTencentCloudDnspodCustomLine(),
33343336
"tencentcloud_private_dns_zone": resourceTencentCloudPrivateDnsZone(),
33353337
"tencentcloud_private_dns_record": resourceTencentCloudPrivateDnsRecord(),
33363338
"tencentcloud_private_dns_zone_vpc_attachment": resourceTencentCloudPrivateDnsZoneVpcAttachment(),
Lines changed: 225 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,225 @@
1+
/*
2+
Provides a resource to create a dnspod custom_line
3+
4+
~> **NOTE:** Terraform uses the combined id of doamin and name when importing. When the name changes, the combined id will also change.
5+
6+
Example Usage
7+
8+
```hcl
9+
resource "tencentcloud_dnspod_custom_line" "custom_line" {
10+
domain = "dnspod.com"
11+
name = "testline8"
12+
area = "6.6.6.1-6.6.6.2"
13+
}
14+
```
15+
16+
Import
17+
18+
dnspod custom_line can be imported using the id, e.g.
19+
20+
```
21+
terraform import tencentcloud_dnspod_custom_line.custom_line domain#name
22+
```
23+
*/
24+
package tencentcloud
25+
26+
import (
27+
"context"
28+
"fmt"
29+
"log"
30+
"strings"
31+
32+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
33+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
34+
dnspod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod/v20210323"
35+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
36+
)
37+
38+
func resourceTencentCloudDnspodCustomLine() *schema.Resource {
39+
return &schema.Resource{
40+
Create: resourceTencentCloudDnspodCustomLineCreate,
41+
Read: resourceTencentCloudDnspodCustomLineRead,
42+
Update: resourceTencentCloudDnspodCustomLineUpdate,
43+
Delete: resourceTencentCloudDnspodCustomLineDelete,
44+
Importer: &schema.ResourceImporter{
45+
State: schema.ImportStatePassthrough,
46+
},
47+
Schema: map[string]*schema.Schema{
48+
"domain": {
49+
Required: true,
50+
ForceNew: true,
51+
Type: schema.TypeString,
52+
Description: "Domain.",
53+
},
54+
55+
"name": {
56+
Required: true,
57+
Type: schema.TypeString,
58+
Description: "The Name of custom line.",
59+
},
60+
61+
"area": {
62+
Required: true,
63+
Type: schema.TypeString,
64+
Description: "The IP segment of custom line, split with `-`.",
65+
},
66+
},
67+
}
68+
}
69+
70+
func resourceTencentCloudDnspodCustomLineCreate(d *schema.ResourceData, meta interface{}) error {
71+
defer logElapsed("resource.tencentcloud_dnspod_custom_line.create")()
72+
defer inconsistentCheck(d, meta)()
73+
74+
logId := getLogId(contextNil)
75+
76+
var (
77+
request = dnspod.NewCreateDomainCustomLineRequest()
78+
domain string
79+
name string
80+
)
81+
if v, ok := d.GetOk("domain"); ok {
82+
domain = v.(string)
83+
request.Domain = helper.String(v.(string))
84+
}
85+
86+
if v, ok := d.GetOk("name"); ok {
87+
name = v.(string)
88+
request.Name = helper.String(v.(string))
89+
}
90+
91+
if v, ok := d.GetOk("area"); ok {
92+
request.Area = helper.String(v.(string))
93+
}
94+
95+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
96+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseDnsPodClient().CreateDomainCustomLine(request)
97+
if e != nil {
98+
return retryError(e)
99+
} else {
100+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
101+
}
102+
return nil
103+
})
104+
if err != nil {
105+
log.Printf("[CRITAL]%s create dnspod custom_line failed, reason:%+v", logId, err)
106+
return err
107+
}
108+
109+
d.SetId(strings.Join([]string{domain, name}, FILED_SP))
110+
111+
return resourceTencentCloudDnspodCustomLineRead(d, meta)
112+
}
113+
114+
func resourceTencentCloudDnspodCustomLineRead(d *schema.ResourceData, meta interface{}) error {
115+
defer logElapsed("resource.tencentcloud_dnspod_custom_line.read")()
116+
defer inconsistentCheck(d, meta)()
117+
118+
logId := getLogId(contextNil)
119+
120+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
121+
122+
service := DnspodService{client: meta.(*TencentCloudClient).apiV3Conn}
123+
124+
idSplit := strings.Split(d.Id(), FILED_SP)
125+
if len(idSplit) != 2 {
126+
return fmt.Errorf("id is broken,%s", d.Id())
127+
}
128+
domain := idSplit[0]
129+
name := idSplit[1]
130+
131+
customLineInfo, err := service.DescribeDnspodCustomLineById(ctx, domain, name)
132+
if err != nil {
133+
return err
134+
}
135+
136+
if customLineInfo == nil {
137+
d.SetId("")
138+
log.Printf("[WARN]%s resource `DnspodCustom_line` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
139+
return nil
140+
}
141+
142+
_ = d.Set("domain", domain)
143+
_ = d.Set("name", name)
144+
145+
if customLineInfo.Area != nil {
146+
_ = d.Set("area", customLineInfo.Area)
147+
}
148+
149+
return nil
150+
}
151+
152+
func resourceTencentCloudDnspodCustomLineUpdate(d *schema.ResourceData, meta interface{}) error {
153+
defer logElapsed("resource.tencentcloud_dnspod_custom_line.update")()
154+
defer inconsistentCheck(d, meta)()
155+
156+
logId := getLogId(contextNil)
157+
158+
request := dnspod.NewModifyDomainCustomLineRequest()
159+
160+
var (
161+
newName string
162+
)
163+
164+
idSplit := strings.Split(d.Id(), FILED_SP)
165+
if len(idSplit) != 2 {
166+
return fmt.Errorf("id is broken,%s", d.Id())
167+
}
168+
domain := idSplit[0]
169+
name := idSplit[1]
170+
171+
request.Domain = &domain
172+
request.Name = &name
173+
174+
if v, ok := d.GetOk("name"); ok {
175+
newName = v.(string)
176+
request.PreName = helper.String(name)
177+
request.Name = helper.String(v.(string))
178+
}
179+
180+
if v, ok := d.GetOk("area"); ok {
181+
request.Area = helper.String(v.(string))
182+
}
183+
184+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
185+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseDnsPodClient().ModifyDomainCustomLine(request)
186+
if e != nil {
187+
return retryError(e)
188+
} else {
189+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
190+
}
191+
return nil
192+
})
193+
if err != nil {
194+
log.Printf("[CRITAL]%s update dnspod custom_line failed, reason:%+v", logId, err)
195+
return err
196+
}
197+
198+
if d.HasChange("name") {
199+
d.SetId(strings.Join([]string{domain, newName}, FILED_SP))
200+
}
201+
202+
return resourceTencentCloudDnspodCustomLineRead(d, meta)
203+
}
204+
205+
func resourceTencentCloudDnspodCustomLineDelete(d *schema.ResourceData, meta interface{}) error {
206+
defer logElapsed("resource.tencentcloud_dnspod_custom_line.delete")()
207+
defer inconsistentCheck(d, meta)()
208+
209+
logId := getLogId(contextNil)
210+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
211+
212+
service := DnspodService{client: meta.(*TencentCloudClient).apiV3Conn}
213+
idSplit := strings.Split(d.Id(), FILED_SP)
214+
if len(idSplit) != 2 {
215+
return fmt.Errorf("id is broken,%s", d.Id())
216+
}
217+
domain := idSplit[0]
218+
name := idSplit[1]
219+
220+
if err := service.DeleteDnspodCustomLineById(ctx, domain, name); err != nil {
221+
return err
222+
}
223+
224+
return nil
225+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
)
8+
9+
func TestAccTencentCloudDnspodCustomLineResource_basic(t *testing.T) {
10+
t.Parallel()
11+
resource.Test(t, resource.TestCase{
12+
PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) },
13+
Providers: testAccProviders,
14+
Steps: []resource.TestStep{
15+
{
16+
Config: testAccDnspodCustomLine,
17+
Check: resource.ComposeTestCheckFunc(
18+
resource.TestCheckResourceAttr("tencentcloud_dnspod_custom_line.custom_line", "domain", "iac-tf.cloud"),
19+
resource.TestCheckResourceAttr("tencentcloud_dnspod_custom_line.custom_line", "name", "testline8"),
20+
resource.TestCheckResourceAttr("tencentcloud_dnspod_custom_line.custom_line", "area", "6.6.6.1-6.6.6.3"),
21+
),
22+
},
23+
{
24+
Config: testAccDnspodCustomLineUp,
25+
Check: resource.ComposeTestCheckFunc(
26+
resource.TestCheckResourceAttr("tencentcloud_dnspod_custom_line.custom_line", "domain", "iac-tf.cloud"),
27+
resource.TestCheckResourceAttr("tencentcloud_dnspod_custom_line.custom_line", "name", "testline9"),
28+
resource.TestCheckResourceAttr("tencentcloud_dnspod_custom_line.custom_line", "area", "6.6.6.1-6.6.6.2"),
29+
),
30+
},
31+
{
32+
ResourceName: "tencentcloud_dnspod_custom_line.custom_line",
33+
ImportState: true,
34+
ImportStateVerify: true,
35+
},
36+
},
37+
})
38+
}
39+
40+
const testAccDnspodCustomLine = `
41+
42+
resource "tencentcloud_dnspod_custom_line" "custom_line" {
43+
domain = "iac-tf.cloud"
44+
name = "testline8"
45+
area = "6.6.6.1-6.6.6.3"
46+
}
47+
48+
`
49+
50+
const testAccDnspodCustomLineUp = `
51+
52+
resource "tencentcloud_dnspod_custom_line" "custom_line" {
53+
domain = "iac-tf.cloud"
54+
name = "testline9"
55+
area = "6.6.6.1-6.6.6.2"
56+
}
57+
58+
`

0 commit comments

Comments
 (0)