Skip to content

Commit 4488f39

Browse files
authored
feat(cam): [126176657] add new resource (#3469)
* add * add * add * add * add * add
1 parent 50f5aef commit 4488f39

File tree

12 files changed

+702
-54
lines changed

12 files changed

+702
-54
lines changed

.changelog/3469.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_cam_message_receiver
3+
```

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ require (
3232
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apm v1.0.825
3333
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.1.4
3434
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/bi v1.0.824
35-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.1071
35+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.1.27
3636
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cat v1.0.825
3737
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.1.0
3838
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.1.27

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -835,6 +835,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/billing v1.1.0 h1:tfTh+
835835
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/billing v1.1.0/go.mod h1:OKowLuHQjXN5pk3KnYnbmZLQucfBUUEpqWsa/3Cl+jY=
836836
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.1071 h1:2CeivXYc7PtD2kgZEJXk9/SDQA9dzLejH5FmNzAW3QU=
837837
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.1071/go.mod h1:UAjX3Vq52SQLKTe6o2HyGA/841Rnc+f4ZRATEsFHJDM=
838+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.1.27 h1:Jo/5JV8oiPbXKXQg2xv3ZeKxLst/xXl3nWUgXalq9eg=
839+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.1.27/go.mod h1:b+R+rbsbjSNyoBSD/xNkxpvOq3flK2Y3cPOYdpV3b0g=
838840
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cat v1.0.825 h1:TgO9L1yNPkWeXqrvys/9RL3u958xx9dcTAy4WmaxBnE=
839841
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cat v1.0.825/go.mod h1:1yCKeIioX4D0bcIDHs3JCS5lbyzndXh1E8wHyHaCjxY=
840842
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.1.0 h1:XhA8+gNAkNfLvfogIbQxipIpHeS0cDV0tybiyxLS210=
@@ -942,6 +944,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.30 h1:zUdoy
942944
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.30/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
943945
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.31 h1:PKa4c2BLYbW5LUOWGNXt20+rV9L8JnLqBXZjnOXsHKQ=
944946
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.31/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
947+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.27 h1:FG3AiNSNW5tG+mtTSE+dBc5ZhHwlYUW0Z6oSkfAWV0A=
948+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.27/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
945949
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ=
946950
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY=
947951
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=

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: 254 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
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.CountryCode != nil {
187+
_ = d.Set("country_code", respData.CountryCode)
188+
}
189+
190+
if respData.PhoneNumber != nil {
191+
_ = d.Set("phone_number", respData.PhoneNumber)
192+
}
193+
194+
if respData.Email != nil {
195+
_ = d.Set("email", respData.Email)
196+
}
197+
198+
if respData.Uid != nil {
199+
_ = d.Set("uid", respData.Uid)
200+
}
201+
202+
if respData.IsReceiverOwner != nil {
203+
_ = d.Set("is_receiver_owner", respData.IsReceiverOwner)
204+
}
205+
206+
if respData.PhoneFlag != nil {
207+
_ = d.Set("phone_flag", respData.PhoneFlag)
208+
}
209+
210+
if respData.EmailFlag != nil {
211+
_ = d.Set("email_flag", respData.EmailFlag)
212+
}
213+
214+
if respData.WechatFlag != nil {
215+
_ = d.Set("wechat_flag", respData.WechatFlag)
216+
}
217+
218+
if respData.Uin != nil {
219+
_ = d.Set("uin", respData.Uin)
220+
}
221+
222+
return nil
223+
}
224+
225+
func resourceTencentCloudCamMessageReceiverDelete(d *schema.ResourceData, meta interface{}) error {
226+
defer tccommon.LogElapsed("resource.tencentcloud_cam_message_receiver.delete")()
227+
defer tccommon.InconsistentCheck(d, meta)()
228+
229+
var (
230+
logId = tccommon.GetLogId(tccommon.ContextNil)
231+
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
232+
request = camv20190116.NewDeleteMessageReceiverRequest()
233+
name = d.Id()
234+
)
235+
236+
request.Name = &name
237+
reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
238+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamV20190116Client().DeleteMessageReceiverWithContext(ctx, request)
239+
if e != nil {
240+
return tccommon.RetryError(e)
241+
} else {
242+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
243+
}
244+
245+
return nil
246+
})
247+
248+
if reqErr != nil {
249+
log.Printf("[CRITAL]%s delete cam message receiver failed, reason:%+v", logId, reqErr)
250+
return reqErr
251+
}
252+
253+
return nil
254+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
Provides a resource to create a CAM message receiver
2+
3+
~> **NOTE:** For security reasons, the CAM will return the `email` and `phone_number` parameter values in encrypted form. Please use the `ignore_changes` function in Terraform's `lifecycle` to include these two parameters.
4+
5+
Example Usage
6+
7+
```hcl
8+
resource "tencentcloud_cam_message_receiver" "example" {
9+
name = "tf-example"
10+
remark = "remark."
11+
country_code = "86"
12+
phone_number = "18123456789"
13+
email = "demo@qq.com"
14+
15+
lifecycle {
16+
ignore_changes = [ email, phone_number ]
17+
}
18+
}
19+
```
20+
21+
Import
22+
23+
CAM message receiver can be imported using the id, e.g.
24+
25+
```
26+
terraform import tencentcloud_cam_message_receiver.example tf-example
27+
```
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
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+
lifecycle {
48+
ignore_changes = [ email, phone_number ]
49+
}
50+
}
51+
`

0 commit comments

Comments
 (0)