Skip to content

Commit 01b6ee6

Browse files
committed
support sms
1 parent 7c49bbe commit 01b6ee6

File tree

16 files changed

+5049
-6
lines changed

16 files changed

+5049
-6
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ require (
6767
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.199
6868
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.515
6969
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199
70+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.0.486
7071
github.com/tencentyun/cos-go-sdk-v5 v0.7.38
7172
github.com/yangwenmai/ratelimit v0.0.0-20180104140304-44221c2292e1
7273
github.com/zclconf/go-cty v1.4.2 // indirect

go.sum

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,7 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.413/go.mod
490490
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.414/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
491491
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.445/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
492492
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.466/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
493+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.486/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
493494
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.488/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
494495
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.490/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
495496
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.493/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
@@ -537,6 +538,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis v1.0.490 h1:JEW8+
537538
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis v1.0.490/go.mod h1:1yBtZUeKla8GNnVnJ1JOgMVBi/YgjEuQgzO4uNmisdI=
538539
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf v1.0.275 h1:hn5RrN/qkcObnyKfJ+raey/riVeRqHJFvY34l2YgELs=
539540
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf v1.0.275/go.mod h1:Pew6DV5oBGrzHYWZ8ssiHeJS/Z39ggVv1y5ADGWdO4s=
541+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.0.486 h1:eHLaL+hl5X5f8Apuf2SGVclO3MRev/E3AfA/0aZQGUA=
542+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.0.486/go.mod h1:MSsho0YlAsoPCOMqdBfwqGd/SMQ0FTGh0a6emBy2X+g=
540543
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver v1.0.406 h1:lGhXUN20TcPf/1cY/VAAGq0xf31/erGVoeDzKnxxyhM=
541544
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver v1.0.406/go.mod h1:fYnZ8Er9N+E+iqF29HOTknro1fbVg7KObvxy05ISDsM=
542545
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl v1.0.199 h1:UkF3qBxMbpOf2VjxgzMgqvBCS+Hqr8XXSrtRd+rABMk=

tencentcloud/connectivity/client.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ import (
4949
privatedns "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns/v20201028"
5050
redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412"
5151
scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416"
52+
sms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms/v20210111"
5253
sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328"
5354
sslCertificate "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205"
5455
ssm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm/v20190923"
@@ -124,6 +125,7 @@ type TencentCloudClient struct {
124125
temConn *tem.Client
125126
teoConn *teo.Client
126127
tcmConn *tcm.Client
128+
smsConn *sms.Client
127129
}
128130

129131
// NewClientProfile returns a new ClientProfile
@@ -777,6 +779,19 @@ func (me *TencentCloudClient) UseTcmClient() *tcm.Client {
777779
return me.tcmConn
778780
}
779781

782+
// UseSmsClient returns teo client for service
783+
func (me *TencentCloudClient) UseSmsClient() *sms.Client {
784+
if me.smsConn != nil {
785+
return me.smsConn
786+
}
787+
788+
cpf := me.NewClientProfile(300)
789+
me.smsConn, _ = sms.NewClient(me.Credential, me.Region, cpf)
790+
me.smsConn.WithHttpTransport(&LogRoundTripper{})
791+
792+
return me.smsConn
793+
}
794+
780795
func getEnvDefault(key string, defVal int) int {
781796
val, ex := os.LookupEnv(key)
782797
if !ex {

tencentcloud/provider.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -705,6 +705,10 @@ Security Token Service(STS)
705705
Data Source
706706
tencentcloud_sts_caller_identity
707707
708+
Short Message Service(SMS)
709+
Resource
710+
tencentcloud_sms_sign
711+
708712
*/
709713
package tencentcloud
710714

@@ -1025,6 +1029,8 @@ func Provider() terraform.ResourceProvider {
10251029
"tencentcloud_vpc": resourceTencentCloudVpcInstance(),
10261030
"tencentcloud_vpc_acl": resourceTencentCloudVpcACL(),
10271031
"tencentcloud_vpc_acl_attachment": resourceTencentCloudVpcAclAttachment(),
1032+
"tencentcloud_vpc_bandwidth_package": resourceTencentCloudVpcBandwidthPackage(),
1033+
"tencentcloud_vpc_bandwidth_package_attachment": resourceTencentCloudVpcBandwidthPackageAttachment(),
10281034
"tencentcloud_subnet": resourceTencentCloudVpcSubnet(),
10291035
"tencentcloud_route_entry": resourceTencentCloudRouteEntry(),
10301036
"tencentcloud_route_table_entry": resourceTencentCloudVpcRouteEntry(),
@@ -1262,12 +1268,10 @@ func Provider() terraform.ResourceProvider {
12621268
"tencentcloud_teo_ddos_policy": resourceTencentCloudTeoDdosPolicy(),
12631269
"tencentcloud_teo_security_policy": resourceTencentCloudTeoSecurityPolicy(),
12641270
"tencentcloud_teo_custom_error_page": resourceTencentCloudTeoCustomErrorPage(),
1265-
// "tencentcloud_teo_host_certificate": resourceTencentCloudTeoHostCertificate(),
1266-
// "tencentcloud_teo_default_certificate": resourceTencentCloudTeoDefaultCertificate(),
1267-
"tencentcloud_tcm_mesh": resourceTencentCloudTcmMesh(),
1268-
"tencentcloud_tcm_cluster_attachment": resourceTencentCloudTcmClusterAttachment(),
1269-
"tencentcloud_vpc_bandwidth_package": resourceTencentCloudVpcBandwidthPackage(),
1270-
"tencentcloud_vpc_bandwidth_package_attachment": resourceTencentCloudVpcBandwidthPackageAttachment(),
1271+
"tencentcloud_tcm_mesh": resourceTencentCloudTcmMesh(),
1272+
"tencentcloud_tcm_cluster_attachment": resourceTencentCloudTcmClusterAttachment(),
1273+
"tencentcloud_sms_sign": resourceTencentCloudSmsSign(),
1274+
"tencentcloud_sms_template": resourceTencentCloudSmsTemplate(),
12711275
},
12721276

12731277
ConfigureFunc: providerConfigure,
Lines changed: 294 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,294 @@
1+
/*
2+
Provides a resource to create a sms sign
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_sms_sign" "sign" {
8+
sign_name = "SignName"
9+
sign_type = 0
10+
document_type = 0
11+
international = 0
12+
sign_purpose = 0
13+
proof_image = ""
14+
commission_image = ""
15+
remark = ""
16+
}
17+
18+
```
19+
Import
20+
21+
sms sign can be imported using the id, e.g.
22+
```
23+
$ terraform import tencentcloud_sms_sign.sign sign_id
24+
```
25+
*/
26+
package tencentcloud
27+
28+
import (
29+
"context"
30+
"fmt"
31+
"log"
32+
33+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
34+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
35+
sms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms/v20210111"
36+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
37+
)
38+
39+
func resourceTencentCloudSmsSign() *schema.Resource {
40+
return &schema.Resource{
41+
Read: resourceTencentCloudSmsSignRead,
42+
Create: resourceTencentCloudSmsSignCreate,
43+
Update: resourceTencentCloudSmsSignUpdate,
44+
Delete: resourceTencentCloudSmsSignDelete,
45+
Importer: &schema.ResourceImporter{
46+
State: schema.ImportStatePassthrough,
47+
},
48+
Schema: map[string]*schema.Schema{
49+
"sign_name": {
50+
Type: schema.TypeString,
51+
Required: true,
52+
Description: "Sms sign name, unique.",
53+
},
54+
55+
"sign_type": {
56+
Type: schema.TypeInt,
57+
Required: true,
58+
Description: "Sms sign type: 0, 1, 2, 3, 4, 5, 6.",
59+
},
60+
61+
"document_type": {
62+
Type: schema.TypeInt,
63+
Required: true,
64+
Description: "DocumentType is used for enterprise authentication, or website, app authentication, etc. DocumentType: 0, 1, 2, 3, 4, 5, 6, 7, 8.",
65+
},
66+
67+
"international": {
68+
Type: schema.TypeInt,
69+
Required: true,
70+
Description: "Whether it is Global SMS: 0: Mainland China SMS; 1: Global SMS.",
71+
},
72+
73+
"sign_purpose": {
74+
Type: schema.TypeInt,
75+
Required: true,
76+
Description: "Signature purpose: 0: for personal use; 1: for others.",
77+
},
78+
79+
"proof_image": {
80+
Type: schema.TypeString,
81+
Required: true,
82+
Description: "You should Base64-encode the image of the identity certificate corresponding to the signature first, remove the prefix data:image/jpeg;base64, from the resulted string, and then use it as the value of this parameter.",
83+
},
84+
85+
"commission_image": {
86+
Type: schema.TypeString,
87+
Optional: true,
88+
Description: "Power of attorney, which should be submitted if SignPurpose is for use by others. You should Base64-encode the image first, remove the prefix data:image/jpeg;base64, from the resulted string, and then use it as the value of this parameter. Note: this field will take effect only when SignPurpose is 1 (for user by others).",
89+
},
90+
91+
"remark": {
92+
Type: schema.TypeString,
93+
Optional: true,
94+
Description: "Signature application remarks.",
95+
},
96+
},
97+
}
98+
}
99+
100+
func resourceTencentCloudSmsSignCreate(d *schema.ResourceData, meta interface{}) error {
101+
defer logElapsed("resource.tencentcloud_sms_sign.create")()
102+
defer inconsistentCheck(d, meta)()
103+
104+
logId := getLogId(contextNil)
105+
106+
var (
107+
request = sms.NewAddSmsSignRequest()
108+
response *sms.AddSmsSignResponse
109+
signId uint64
110+
)
111+
112+
if v, ok := d.GetOk("sign_name"); ok {
113+
request.SignName = helper.String(v.(string))
114+
}
115+
116+
if v, _ := d.GetOk("sign_type"); v != nil {
117+
request.SignType = helper.IntUint64(v.(int))
118+
}
119+
120+
if v, _ := d.GetOk("document_type"); v != nil {
121+
request.DocumentType = helper.IntUint64(v.(int))
122+
}
123+
124+
if v, _ := d.GetOk("international"); v != nil {
125+
request.International = helper.IntUint64(v.(int))
126+
}
127+
128+
if v, _ := d.GetOk("sign_purpose"); v != nil {
129+
request.SignPurpose = helper.IntUint64(v.(int))
130+
}
131+
132+
if v, ok := d.GetOk("proof_image"); ok {
133+
request.ProofImage = helper.String(v.(string))
134+
}
135+
136+
if v, ok := d.GetOk("commission_image"); ok {
137+
request.CommissionImage = helper.String(v.(string))
138+
}
139+
140+
if v, ok := d.GetOk("remark"); ok {
141+
request.Remark = helper.String(v.(string))
142+
}
143+
144+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
145+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseSmsClient().AddSmsSign(request)
146+
if e != nil {
147+
return retryError(e)
148+
} else {
149+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
150+
logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
151+
}
152+
response = result
153+
return nil
154+
})
155+
156+
if err != nil {
157+
log.Printf("[CRITAL]%s create sms sign failed, reason:%+v", logId, err)
158+
return err
159+
}
160+
161+
signId = *response.Response.AddSignStatus.SignId
162+
d.SetId(helper.UInt64ToStr(signId))
163+
return resourceTencentCloudSmsSignRead(d, meta)
164+
}
165+
166+
func resourceTencentCloudSmsSignRead(d *schema.ResourceData, meta interface{}) error {
167+
defer logElapsed("resource.tencentcloud_sms_sign.read")()
168+
defer inconsistentCheck(d, meta)()
169+
170+
logId := getLogId(contextNil)
171+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
172+
173+
service := SmsService{client: meta.(*TencentCloudClient).apiV3Conn}
174+
175+
signId := d.Id()
176+
177+
sign, err := service.DescribeSmsSign(ctx, signId)
178+
179+
if err != nil {
180+
return err
181+
}
182+
183+
if sign == nil {
184+
d.SetId("")
185+
return fmt.Errorf("resource `sign` %s does not exist", signId)
186+
}
187+
188+
if sign.SignName != nil {
189+
_ = d.Set("sign_name", sign.SignName)
190+
}
191+
192+
if sign.International != nil {
193+
_ = d.Set("international", sign.International)
194+
}
195+
196+
return nil
197+
}
198+
199+
func resourceTencentCloudSmsSignUpdate(d *schema.ResourceData, meta interface{}) error {
200+
defer logElapsed("resource.tencentcloud_sms_sign.update")()
201+
defer inconsistentCheck(d, meta)()
202+
203+
logId := getLogId(contextNil)
204+
205+
request := sms.NewModifySmsSignRequest()
206+
207+
signId := d.Id()
208+
209+
request.SignId = helper.Uint64(helper.StrToUInt64(signId))
210+
211+
if d.HasChange("sign_name") {
212+
if v, ok := d.GetOk("sign_name"); ok {
213+
request.SignName = helper.String(v.(string))
214+
}
215+
}
216+
217+
if d.HasChange("sign_type") {
218+
if v, _ := d.GetOk("sign_type"); v != nil {
219+
request.SignType = helper.IntUint64(v.(int))
220+
}
221+
}
222+
223+
if d.HasChange("document_type") {
224+
if v, _ := d.GetOk("document_type"); v != nil {
225+
request.DocumentType = helper.IntUint64(v.(int))
226+
}
227+
}
228+
229+
if d.HasChange("international") {
230+
if v, _ := d.GetOk("international"); v != nil {
231+
request.International = helper.IntUint64(v.(int))
232+
}
233+
}
234+
235+
if d.HasChange("sign_purpose") {
236+
if v, _ := d.GetOk("sign_purpose"); v != nil {
237+
request.SignPurpose = helper.IntUint64(v.(int))
238+
}
239+
}
240+
241+
if d.HasChange("proof_image") {
242+
if v, ok := d.GetOk("proof_image"); ok {
243+
request.ProofImage = helper.String(v.(string))
244+
}
245+
}
246+
247+
if d.HasChange("commission_image") {
248+
if v, ok := d.GetOk("commission_image"); ok {
249+
request.CommissionImage = helper.String(v.(string))
250+
}
251+
}
252+
253+
if d.HasChange("remark") {
254+
if v, ok := d.GetOk("remark"); ok {
255+
request.Remark = helper.String(v.(string))
256+
}
257+
}
258+
259+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
260+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseSmsClient().ModifySmsSign(request)
261+
if e != nil {
262+
return retryError(e)
263+
} else {
264+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
265+
logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
266+
}
267+
return nil
268+
})
269+
270+
if err != nil {
271+
log.Printf("[CRITAL]%s create sms sign failed, reason:%+v", logId, err)
272+
return err
273+
}
274+
275+
return resourceTencentCloudSmsSignRead(d, meta)
276+
}
277+
278+
func resourceTencentCloudSmsSignDelete(d *schema.ResourceData, meta interface{}) error {
279+
defer logElapsed("resource.tencentcloud_sms_sign.delete")()
280+
defer inconsistentCheck(d, meta)()
281+
282+
logId := getLogId(contextNil)
283+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
284+
285+
service := SmsService{client: meta.(*TencentCloudClient).apiV3Conn}
286+
287+
signId := d.Id()
288+
289+
if err := service.DeleteSmsSignById(ctx, signId); err != nil {
290+
return err
291+
}
292+
293+
return nil
294+
}

0 commit comments

Comments
 (0)