Skip to content

Commit ae6458d

Browse files
author
hellertang
authored
support dnspod domain instance (#741)
1 parent 8a2e05e commit ae6458d

File tree

14 files changed

+5266
-5
lines changed

14 files changed

+5266
-5
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ require (
3434
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.199
3535
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.199
3636
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dc v1.0.199
37+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.294
3738
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.0.199
3839
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap v1.0.199
3940
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.199

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,10 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.199 h1:CzZEt6
481481
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.199/go.mod h1:pz4s3nOhoB9cY0+uWzifuwr7lfh/Gvi1rv0ADxpPzD4=
482482
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dc v1.0.199 h1:7ShREKvI8ik2YNtLF42JR9x2YEeZS/gZvhIRfpsI8T0=
483483
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dc v1.0.199/go.mod h1:5WGSrlIZJOhwIqPjjafb6vzrPEZieSHPhPMjjGPXOSU=
484+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.286 h1:daMss6AZ7UrzvfzRFtBp+0YdhSlZljlzRYE3XshU+MI=
485+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.286/go.mod h1:CuOaLxOQr477GhMWAQPYQFUJrsZbW+ZqkAgP2uHDZXg=
486+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.294 h1:VKP8TRlMSDUIJ32GuFKr4a0Fv/oi4LksRVOfJoK9CVc=
487+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.294/go.mod h1:CuOaLxOQr477GhMWAQPYQFUJrsZbW+ZqkAgP2uHDZXg=
484488
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.0.199 h1:qMFzKYXp1z7awrl3hhQM+sPb3XEtrR/4pW+6FXQTYcQ=
485489
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.0.199/go.mod h1:UegCt4vv9jAlzpgDu31ZJTuRP5T2BTV8w+jZBTsZIzg=
486490
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap v1.0.199 h1:tmjUPp0VBKuzjTqt0IQ5PT6iYt0yLmvM2DUzMFF7SGk=

tencentcloud/connectivity/client.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107"
3232
dayu "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu/v20180709"
3333
dc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dc/v20180410"
34+
dnspod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod/v20210323"
3435
es "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es/v20180416"
3536
gaap "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap/v20180529"
3637
kms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms/v20190118"
@@ -98,6 +99,7 @@ type TencentCloudClient struct {
9899
ssmConn *ssm.Client
99100
apiConn *api.Client
100101
clsConn *cls.Client
102+
dnsPodConn *dnspod.Client
101103
}
102104

103105
// NewClientProfile returns a new ClientProfile
@@ -635,3 +637,15 @@ func (me *TencentCloudClient) UseClsClient() *cls.Client {
635637

636638
return me.clsConn
637639
}
640+
641+
// UseDnsPodClient return DnsPod client for service
642+
func (me *TencentCloudClient) UseDnsPodClient() *dnspod.Client {
643+
if me.dnsPodConn != nil {
644+
return me.dnsPodConn
645+
}
646+
cpf := me.NewClientProfile(300)
647+
me.dnsPodConn, _ = dnspod.NewClient(me.Credential, me.Region, cpf)
648+
me.dnsPodConn.WithHttpTransport(&LogRoundTripper{})
649+
650+
return me.dnsPodConn
651+
}

tencentcloud/extension_dnspod.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package tencentcloud
2+
3+
const (
4+
DNSPOD_DOMAIN_MARK_YES = "yes"
5+
DNSPOD_DOMAIN_MARK_NO = "no"
6+
)
7+
8+
var DNSPOD_DOMAIN_MARK_TYPE = []string{
9+
DNSPOD_DOMAIN_MARK_YES,
10+
DNSPOD_DOMAIN_MARK_NO,
11+
}
12+
13+
const (
14+
DNSPOD_DOMAIN_STATUS_ENABLE = "enable"
15+
DNSPOD_DOMAIN_STATUS_DISABLE = "disable"
16+
)
17+
18+
var DNSPOD_DOMAIN_STATUS_TYPE = []string{
19+
DNSPOD_DOMAIN_STATUS_ENABLE,
20+
DNSPOD_DOMAIN_STATUS_DISABLE,
21+
}

tencentcloud/provider.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,10 @@ VPN
548548
tencentcloud_vpn_gateway
549549
tencentcloud_vpn_gateway_route
550550
tencentcloud_vpn_connection
551+
552+
DNSPOD
553+
Resource
554+
tencentcloud_dnspod_domain_instance
551555
*/
552556
package tencentcloud
553557

@@ -995,6 +999,7 @@ func Provider() terraform.ResourceProvider {
995999
"tencentcloud_ssm_secret": resourceTencentCloudSsmSecret(),
9961000
"tencentcloud_ssm_secret_version": resourceTencentCloudSsmSecretVersion(),
9971001
"tencentcloud_cdh_instance": resourceTencentCloudCdhInstance(),
1002+
"tencentcloud_dnspod_domain_instance": resourceTencentCloudDnspodDomainInstance(),
9981003
},
9991004

10001005
ConfigureFunc: providerConfigure,
Lines changed: 235 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,235 @@
1+
/*
2+
Provide a resource to create a DnsPod Domain instance.
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_dnspod_domain_instance" "foo" {
8+
domain = "hello.com"
9+
remark = "this is demo"
10+
}
11+
```
12+
13+
Import
14+
15+
DnsPod Domain instance can be imported, e.g.
16+
17+
```
18+
$ terraform import tencentcloud_dnspod_domain_instance.foo domain
19+
```
20+
*/
21+
package tencentcloud
22+
23+
import (
24+
"context"
25+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
26+
"log"
27+
28+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
29+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
30+
dnspod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod/v20210323"
31+
)
32+
33+
func resourceTencentCloudDnspodDomainInstance() *schema.Resource {
34+
return &schema.Resource{
35+
Create: resourceTencentCloudDnspodDomainInstanceCreate,
36+
Read: resourceTencentCloudDnspodDomainInstanceRead,
37+
Update: resourceTencentCloudDnspodDomainInstanceUpdate,
38+
Delete: resourceTencentCloudDnspodDomainInstanceDelete,
39+
Importer: &schema.ResourceImporter{
40+
State: schema.ImportStatePassthrough,
41+
},
42+
43+
Schema: map[string]*schema.Schema{
44+
"domain": {
45+
Type: schema.TypeString,
46+
Required: true,
47+
Description: "The Domain.",
48+
},
49+
"group_id": {
50+
Type: schema.TypeInt,
51+
Optional: true,
52+
ForceNew: true,
53+
Description: "The Group Id of Domain.",
54+
},
55+
"is_mark": {
56+
Type: schema.TypeString,
57+
Optional: true,
58+
Computed: true,
59+
ForceNew: true,
60+
ValidateFunc: validateAllowedStringValue(DNSPOD_DOMAIN_MARK_TYPE),
61+
Description: "Whether to Mark the Domain.",
62+
},
63+
"status": {
64+
Type: schema.TypeString,
65+
Optional: true,
66+
ValidateFunc: validateAllowedStringValue(DNSPOD_DOMAIN_STATUS_TYPE),
67+
Description: "The status of Domain.",
68+
},
69+
"remark": {
70+
Type: schema.TypeString,
71+
Optional: true,
72+
Description: "The remark of Domain.",
73+
},
74+
//computed
75+
"create_time": {
76+
Type: schema.TypeString,
77+
Computed: true,
78+
Description: "Create time of the domain.",
79+
},
80+
},
81+
}
82+
}
83+
84+
func resourceTencentCloudDnspodDomainInstanceCreate(d *schema.ResourceData, meta interface{}) error {
85+
defer logElapsed("resource.tencentcloud_dnspod_domain.create")()
86+
87+
logId := getLogId(contextNil)
88+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
89+
90+
request := dnspod.NewCreateDomainRequest()
91+
var (
92+
domain string
93+
groupId uint64
94+
isMark string
95+
response *dnspod.CreateDomainResponse
96+
)
97+
if v, ok := d.GetOk("domain"); ok {
98+
domain = v.(string)
99+
}
100+
if v, ok := d.GetOk("group_id"); ok {
101+
groupId = v.(uint64)
102+
}
103+
if v, ok := d.GetOk("is_mark"); ok {
104+
isMark = v.(string)
105+
}
106+
107+
request.Domain = &domain
108+
request.GroupId = &groupId
109+
request.IsMark = &isMark
110+
111+
result, err := meta.(*TencentCloudClient).apiV3Conn.UseDnsPodClient().CreateDomain(request)
112+
response = result
113+
114+
if err != nil {
115+
log.Printf("[CRITAL]%s create DnsPod Domain failed, reason:%s\n", logId, err.Error())
116+
return err
117+
}
118+
d.SetId(*response.Response.DomainInfo.Domain)
119+
120+
service := DnspodService{client: meta.(*TencentCloudClient).apiV3Conn}
121+
122+
if v, ok := d.GetOk("status"); ok {
123+
domainId := response.Response.DomainInfo.Domain
124+
status := v.(string)
125+
err := service.ModifyDnsPodDomainStatus(ctx, *domainId, status)
126+
if err != nil {
127+
log.Printf("[CRITAL]%s set DnsPod Domain status failed, reason:%s\n", logId, err.Error())
128+
return err
129+
}
130+
}
131+
132+
if v, ok := d.GetOk("remark"); ok {
133+
domainId := response.Response.DomainInfo.Domain
134+
remark := v.(string)
135+
err := service.ModifyDnsPodDomainRemark(ctx, *domainId, remark)
136+
if err != nil {
137+
log.Printf("[CRITAL]%s set DnsPod Domain remark failed, reason:%s\n", logId, err.Error())
138+
return err
139+
}
140+
}
141+
return resourceTencentCloudDnspodDomainInstanceRead(d, meta)
142+
}
143+
144+
func resourceTencentCloudDnspodDomainInstanceRead(d *schema.ResourceData, meta interface{}) error {
145+
defer logElapsed("resource.tencentcloud_dnspod_domain.read")()
146+
defer inconsistentCheck(d, meta)()
147+
148+
logId := getLogId(contextNil)
149+
150+
id := d.Id()
151+
152+
request := dnspod.NewDescribeDomainRequest()
153+
request.Domain = helper.String(id)
154+
155+
var response *dnspod.DescribeDomainResponse
156+
157+
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
158+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseDnsPodClient().DescribeDomain(request)
159+
if e != nil {
160+
return retryError(e)
161+
}
162+
163+
response = result
164+
info := response.Response.DomainInfo
165+
166+
d.SetId(*response.Response.DomainInfo.Domain)
167+
168+
_ = d.Set("domain", info.Domain)
169+
_ = d.Set("create_time", info.CreatedOn)
170+
_ = d.Set("is_mark", info.IsMark)
171+
172+
return nil
173+
})
174+
if err != nil {
175+
log.Printf("[CRITAL]%s read DnsPod Domain failed, reason:%s\n", logId, err.Error())
176+
return err
177+
}
178+
return nil
179+
}
180+
181+
func resourceTencentCloudDnspodDomainInstanceUpdate(d *schema.ResourceData, meta interface{}) error {
182+
defer logElapsed("resource.tencentcloud_dnspod_domain.update")()
183+
184+
logId := getLogId(contextNil)
185+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
186+
187+
id := d.Id()
188+
service := DnspodService{client: meta.(*TencentCloudClient).apiV3Conn}
189+
190+
if d.HasChange("status") {
191+
status := d.Get("status").(string)
192+
err := service.ModifyDnsPodDomainStatus(ctx, id, status)
193+
if err != nil {
194+
log.Printf("[CRITAL]%s modify DnsPod Domain status failed, reason:%s\n", logId, err.Error())
195+
return err
196+
}
197+
}
198+
199+
if d.HasChange("remark") {
200+
remark := d.Get("remark").(string)
201+
err := service.ModifyDnsPodDomainRemark(ctx, id, remark)
202+
if err != nil {
203+
log.Printf("[CRITAL]%s modify DnsPod Domain remark failed, reason:%s\n", logId, err.Error())
204+
return err
205+
}
206+
}
207+
208+
d.SetPartial("status")
209+
d.SetPartial("remark")
210+
211+
d.Partial(false)
212+
return resourceTencentCloudDnspodDomainInstanceRead(d, meta)
213+
}
214+
215+
func resourceTencentCloudDnspodDomainInstanceDelete(d *schema.ResourceData, meta interface{}) error {
216+
defer logElapsed("resource.tencentcloud_dnspod_domain.delete")()
217+
218+
logId := getLogId(contextNil)
219+
220+
request := dnspod.NewDeleteDomainRequest()
221+
request.Domain = helper.String(d.Id())
222+
223+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
224+
_, e := meta.(*TencentCloudClient).apiV3Conn.UseDnsPodClient().DeleteDomain(request)
225+
if e != nil {
226+
return retryError(e)
227+
}
228+
return nil
229+
})
230+
if err != nil {
231+
log.Printf("[CRITAL]%s delete DnsPod Domain failed, reason:%s\n", logId, err.Error())
232+
return err
233+
}
234+
return nil
235+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package tencentcloud
2+
3+
import (
4+
"context"
5+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
6+
"log"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
9+
dnspod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod/v20210323"
10+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity"
11+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit"
12+
)
13+
14+
// basic information
15+
16+
type DnspodService struct {
17+
client *connectivity.TencentCloudClient
18+
}
19+
20+
// ////////api
21+
func (me *DnspodService) ModifyDnsPodDomainStatus(ctx context.Context, domain string, status string) (errRet error) {
22+
logId := getLogId(ctx)
23+
request := dnspod.NewModifyDomainStatusRequest()
24+
defer func() {
25+
if errRet != nil {
26+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
27+
logId, request.GetAction(), request.ToJsonString(), errRet.Error())
28+
}
29+
}()
30+
request.Domain = helper.String(domain)
31+
request.Status = &status
32+
33+
if err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
34+
ratelimit.Check(request.GetAction())
35+
_, err := me.client.UseDnsPodClient().ModifyDomainStatus(request)
36+
if err != nil {
37+
return retryError(err, InternalError)
38+
}
39+
return nil
40+
}); err != nil {
41+
log.Printf("[CRITAL]%s modify dnspod domain status failed, reason: %v", logId, err)
42+
return err
43+
}
44+
return
45+
}
46+
47+
func (me *DnspodService) ModifyDnsPodDomainRemark(ctx context.Context, domain string, remark string) (errRet error) {
48+
logId := getLogId(ctx)
49+
request := dnspod.NewModifyDomainRemarkRequest()
50+
defer func() {
51+
if errRet != nil {
52+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
53+
logId, request.GetAction(), request.ToJsonString(), errRet.Error())
54+
}
55+
}()
56+
request.Domain = helper.String(domain)
57+
request.Remark = &remark
58+
59+
if err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
60+
ratelimit.Check(request.GetAction())
61+
_, err := me.client.UseDnsPodClient().ModifyDomainRemark(request)
62+
if err != nil {
63+
return retryError(err, InternalError)
64+
}
65+
return nil
66+
}); err != nil {
67+
log.Printf("[CRITAL]%s modify dnspod domain remark failed, reason: %v", logId, err)
68+
return err
69+
}
70+
return
71+
}

0 commit comments

Comments
 (0)