Skip to content

Commit c8c3be8

Browse files
committed
add
1 parent 50f5aef commit c8c3be8

File tree

5 files changed

+385
-0
lines changed

5 files changed

+385
-0
lines changed

tencentcloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1573,6 +1573,7 @@ func Provider() *schema.Provider {
15731573
"tencentcloud_cam_set_policy_version_config": cam.ResourceTencentCloudCamSetPolicyVersionConfig(),
15741574
"tencentcloud_cam_user_permission_boundary_attachment": cam.ResourceTencentCloudCamUserPermissionBoundaryAttachment(),
15751575
"tencentcloud_cam_role_permission_boundary_attachment": cam.ResourceTencentCloudCamRolePermissionBoundaryAttachment(),
1576+
"tencentcloud_cam_message_receiver": cam.ResourceTencentCloudCamMessageReceiver(),
15761577
"tencentcloud_organization_quit_organization_operation": tco.ResourceTencentCloudOrganizationQuitOrganizationOperation(),
15771578
"tencentcloud_ciam_user_group": ciam.ResourceTencentCloudCiamUserGroup(),
15781579
"tencentcloud_ciam_user_store": ciam.ResourceTencentCloudCiamUserStore(),
Lines changed: 250 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,250 @@
1+
package cam
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
10+
camv20190116 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116"
11+
12+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
13+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
14+
)
15+
16+
func ResourceTencentCloudCamMessageReceiver() *schema.Resource {
17+
return &schema.Resource{
18+
Create: resourceTencentCloudCamMessageReceiverCreate,
19+
Read: resourceTencentCloudCamMessageReceiverRead,
20+
Delete: resourceTencentCloudCamMessageReceiverDelete,
21+
Importer: &schema.ResourceImporter{
22+
State: schema.ImportStatePassthrough,
23+
},
24+
Schema: map[string]*schema.Schema{
25+
"name": {
26+
Type: schema.TypeString,
27+
Required: true,
28+
ForceNew: true,
29+
Description: "Username of the message recipient.",
30+
},
31+
32+
"remark": {
33+
Type: schema.TypeString,
34+
Optional: true,
35+
ForceNew: true,
36+
Description: "Recipient's notes.",
37+
},
38+
39+
"country_code": {
40+
Type: schema.TypeString,
41+
Required: true,
42+
ForceNew: true,
43+
Description: "The international area code for mobile phone numbers is 86 for domestic areas.",
44+
},
45+
46+
"phone_number": {
47+
Type: schema.TypeString,
48+
Required: true,
49+
ForceNew: true,
50+
Description: "Mobile phone number, for example: 132****2492.",
51+
},
52+
53+
"email": {
54+
Type: schema.TypeString,
55+
Required: true,
56+
ForceNew: true,
57+
Description: "Email address, for example: 57*****@qq.com.",
58+
},
59+
60+
// computed
61+
"uid": {
62+
Type: schema.TypeInt,
63+
Computed: true,
64+
Description: "UID.",
65+
},
66+
67+
"is_receiver_owner": {
68+
Type: schema.TypeInt,
69+
Computed: true,
70+
Description: "Whether it is the primary contact person.",
71+
},
72+
73+
"phone_flag": {
74+
Type: schema.TypeInt,
75+
Computed: true,
76+
Description: "Whether the mobile phone number is verified.",
77+
},
78+
79+
"email_flag": {
80+
Type: schema.TypeInt,
81+
Computed: true,
82+
Description: "Whether the email is verified.",
83+
},
84+
85+
"wechat_flag": {
86+
Type: schema.TypeInt,
87+
Computed: true,
88+
Description: "Whether WeChat is allowed to receive notifications.",
89+
},
90+
91+
"uin": {
92+
Type: schema.TypeInt,
93+
Computed: true,
94+
Description: "Account uin.",
95+
},
96+
},
97+
}
98+
}
99+
100+
func resourceTencentCloudCamMessageReceiverCreate(d *schema.ResourceData, meta interface{}) error {
101+
defer tccommon.LogElapsed("resource.tencentcloud_cam_message_receiver.create")()
102+
defer tccommon.InconsistentCheck(d, meta)()
103+
104+
var (
105+
logId = tccommon.GetLogId(tccommon.ContextNil)
106+
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
107+
request = camv20190116.NewCreateMessageReceiverRequest()
108+
name string
109+
)
110+
111+
if v, ok := d.GetOk("name"); ok {
112+
request.Name = helper.String(v.(string))
113+
name = v.(string)
114+
}
115+
116+
if v, ok := d.GetOk("remark"); ok {
117+
request.Remark = helper.String(v.(string))
118+
}
119+
120+
if v, ok := d.GetOk("country_code"); ok {
121+
request.CountryCode = helper.String(v.(string))
122+
}
123+
124+
if v, ok := d.GetOk("phone_number"); ok {
125+
request.PhoneNumber = helper.String(v.(string))
126+
}
127+
128+
if v, ok := d.GetOk("email"); ok {
129+
request.Email = helper.String(v.(string))
130+
}
131+
132+
reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
133+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamV20190116Client().CreateMessageReceiverWithContext(ctx, request)
134+
if e != nil {
135+
return tccommon.RetryError(e)
136+
} else {
137+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
138+
}
139+
140+
if result == nil || result.Response == nil {
141+
return resource.NonRetryableError(fmt.Errorf("Create cam message receiver failed, Response is nil."))
142+
}
143+
144+
return nil
145+
})
146+
147+
if reqErr != nil {
148+
log.Printf("[CRITAL]%s create cam message receiver failed, reason:%+v", logId, reqErr)
149+
return reqErr
150+
}
151+
152+
d.SetId(name)
153+
return resourceTencentCloudCamMessageReceiverRead(d, meta)
154+
}
155+
156+
func resourceTencentCloudCamMessageReceiverRead(d *schema.ResourceData, meta interface{}) error {
157+
defer tccommon.LogElapsed("resource.tencentcloud_cam_message_receiver.read")()
158+
defer tccommon.InconsistentCheck(d, meta)()
159+
160+
var (
161+
logId = tccommon.GetLogId(tccommon.ContextNil)
162+
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
163+
service = CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
164+
name = d.Id()
165+
)
166+
167+
respData, err := service.DescribeCamMessageReceiverById(ctx, name)
168+
if err != nil {
169+
return err
170+
}
171+
172+
if respData == nil {
173+
log.Printf("[WARN]%s resource `tencentcloud_cam_message_receiver` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
174+
d.SetId("")
175+
return nil
176+
}
177+
178+
if respData.Name != nil {
179+
_ = d.Set("name", respData.Name)
180+
}
181+
182+
if respData.Remark != nil {
183+
_ = d.Set("remark", respData.Remark)
184+
}
185+
186+
if respData.PhoneNumber != nil {
187+
_ = d.Set("phone_number", respData.PhoneNumber)
188+
}
189+
190+
if respData.Email != nil {
191+
_ = d.Set("email", respData.Email)
192+
}
193+
194+
if respData.Uid != nil {
195+
_ = d.Set("uid", respData.Uid)
196+
}
197+
198+
if respData.IsReceiverOwner != nil {
199+
_ = d.Set("is_receiver_owner", respData.IsReceiverOwner)
200+
}
201+
202+
if respData.PhoneFlag != nil {
203+
_ = d.Set("phone_flag", respData.PhoneFlag)
204+
}
205+
206+
if respData.EmailFlag != nil {
207+
_ = d.Set("email_flag", respData.EmailFlag)
208+
}
209+
210+
if respData.WechatFlag != nil {
211+
_ = d.Set("wechat_flag", respData.WechatFlag)
212+
}
213+
214+
if respData.Uin != nil {
215+
_ = d.Set("uin", respData.Uin)
216+
}
217+
218+
return nil
219+
}
220+
221+
func resourceTencentCloudCamMessageReceiverDelete(d *schema.ResourceData, meta interface{}) error {
222+
defer tccommon.LogElapsed("resource.tencentcloud_cam_message_receiver.delete")()
223+
defer tccommon.InconsistentCheck(d, meta)()
224+
225+
var (
226+
logId = tccommon.GetLogId(tccommon.ContextNil)
227+
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
228+
request = camv20190116.NewDeleteMessageReceiverRequest()
229+
name = d.Id()
230+
)
231+
232+
request.Name = &name
233+
reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
234+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamV20190116Client().DeleteMessageReceiverWithContext(ctx, request)
235+
if e != nil {
236+
return tccommon.RetryError(e)
237+
} else {
238+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
239+
}
240+
241+
return nil
242+
})
243+
244+
if reqErr != nil {
245+
log.Printf("[CRITAL]%s delete cam message receiver failed, reason:%+v", logId, reqErr)
246+
return reqErr
247+
}
248+
249+
return nil
250+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
Provides a resource to create a CAM message receiver
2+
3+
Example Usage
4+
5+
```hcl
6+
resource "tencentcloud_cam_message_receiver" "example" {
7+
name = "tf-example"
8+
remark = "remark."
9+
country_code = "86"
10+
phone_number = "18123456789"
11+
email = "demo@qq.com"
12+
}
13+
```
14+
15+
Import
16+
17+
CAM message receiver can be imported using the id, e.g.
18+
19+
```
20+
terraform import tencentcloud_cam_message_receiver.example tf-example
21+
```
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package cam_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
8+
tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest"
9+
)
10+
11+
func TestAccTencentCloudCamMessageReceiverResource_basic(t *testing.T) {
12+
t.Parallel()
13+
resource.Test(t, resource.TestCase{
14+
PreCheck: func() {
15+
tcacctest.AccPreCheck(t)
16+
},
17+
Providers: tcacctest.AccProviders,
18+
Steps: []resource.TestStep{
19+
{
20+
Config: testAccCamMessageReceiver,
21+
Check: resource.ComposeTestCheckFunc(
22+
resource.TestCheckResourceAttrSet("tencentcloud_cam_message_receiver.example", "id"),
23+
resource.TestCheckResourceAttrSet("tencentcloud_cam_message_receiver.example", "name"),
24+
resource.TestCheckResourceAttrSet("tencentcloud_cam_message_receiver.example", "remark"),
25+
resource.TestCheckResourceAttrSet("tencentcloud_cam_message_receiver.example", "country_code"),
26+
resource.TestCheckResourceAttrSet("tencentcloud_cam_message_receiver.example", "phone_number"),
27+
resource.TestCheckResourceAttrSet("tencentcloud_cam_message_receiver.example", "email"),
28+
),
29+
},
30+
{
31+
ResourceName: "tencentcloud_cam_message_receiver.example",
32+
ImportState: true,
33+
ImportStateVerify: true,
34+
},
35+
},
36+
})
37+
}
38+
39+
const testAccCamMessageReceiver = `
40+
resource "tencentcloud_cam_message_receiver" "example" {
41+
name = "tf-example"
42+
remark = "remark."
43+
country_code = "86"
44+
phone_number = "18123456789"
45+
email = "demo@qq.com"
46+
}
47+
`

tencentcloud/services/cam/service_tencentcloud_cam.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2032,3 +2032,69 @@ func (me *CamService) DescribeCamRoleDetailByFilter(ctx context.Context, param m
20322032
ret = response.Response
20332033
return
20342034
}
2035+
2036+
func (me *CamService) DescribeCamMessageReceiverById(ctx context.Context, name string) (ret *cam.Receiver, errRet error) {
2037+
logId := tccommon.GetLogId(ctx)
2038+
2039+
request := cam.NewListReceiverRequest()
2040+
response := cam.NewListReceiverResponse()
2041+
2042+
defer func() {
2043+
if errRet != nil {
2044+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
2045+
}
2046+
}()
2047+
2048+
var (
2049+
offset uint64 = 0
2050+
limit uint64 = 200
2051+
receivers []*cam.Receiver
2052+
)
2053+
2054+
for {
2055+
request.Offset = &offset
2056+
request.Limit = &limit
2057+
2058+
errRet = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
2059+
ratelimit.Check(request.GetAction())
2060+
result, e := me.client.UseCamV20190116Client().ListReceiver(request)
2061+
if e != nil {
2062+
return tccommon.RetryError(e)
2063+
} else {
2064+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
2065+
}
2066+
2067+
if result == nil || result.Response == nil {
2068+
return resource.NonRetryableError(fmt.Errorf("Describe receiver failed, Response is nil."))
2069+
}
2070+
2071+
response = result
2072+
return nil
2073+
})
2074+
2075+
if errRet != nil {
2076+
log.Printf("[CRITAL]%s describe receiver failed, reason:%+v", logId, errRet)
2077+
return nil, errRet
2078+
}
2079+
2080+
if len(response.Response.Receivers) < 1 {
2081+
break
2082+
}
2083+
2084+
receivers = append(receivers, response.Response.Receivers...)
2085+
if len(response.Response.Receivers) < int(limit) {
2086+
break
2087+
}
2088+
2089+
offset += limit
2090+
}
2091+
2092+
for _, item := range receivers {
2093+
if item.Name != nil && *item.Name == name {
2094+
ret = item
2095+
break
2096+
}
2097+
}
2098+
2099+
return
2100+
}

0 commit comments

Comments
 (0)