Skip to content

Commit 4189294

Browse files
authored
feat(tco): [127836521] add new resource (#3543)
* add * add * add * add * add
1 parent ce15f8b commit 4189294

12 files changed

+682
-20
lines changed

.changelog/3543.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
```release-note:new-resource
2+
tencentcloud_organization_org_share_unit_member_v2
3+
```
4+
5+
```release-note:enhancement
6+
resource/tencentcloud_organization_org_share_unit_member: This resource has been deprecated, please use `tencentcloud_organization_org_share_unit_member_v2` instead.
7+
```

tencentcloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2351,6 +2351,7 @@ func Provider() *schema.Provider {
23512351
"tencentcloud_ha_vip_instance_attachment": vpc.ResourceTencentCloudHaVipInstanceAttachment(),
23522352
"tencentcloud_csip_risk_center": csip.ResourceTencentCloudCsipRiskCenter(),
23532353
"tencentcloud_organization_org_share_unit_member": tco.ResourceTencentCloudOrganizationOrgShareUnitMember(),
2354+
"tencentcloud_organization_org_share_unit_member_v2": tco.ResourceTencentCloudOrganizationOrgShareUnitMemberV2(),
23542355
"tencentcloud_organization_org_share_unit": tco.ResourceTencentCloudOrganizationOrgShareUnit(),
23552356
"tencentcloud_organization_org_share_unit_resource": tco.ResourceTencentCloudOrganizationOrgShareUnitResource(),
23562357
"tencentcloud_accept_join_share_unit_invitation_operation": tco.ResourceTencentCloudAcceptJoinShareUnitInvitationOperation(),

tencentcloud/provider.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1781,6 +1781,7 @@ tencentcloud_organization_policy_sub_account_attachment
17811781
tencentcloud_organization_quit_organization_operation
17821782
tencentcloud_organization_org_share_unit
17831783
tencentcloud_organization_org_share_unit_member
1784+
tencentcloud_organization_org_share_unit_member_v2
17841785
tencentcloud_organization_service_assign
17851786
tencentcloud_identity_center_user
17861787
tencentcloud_identity_center_group

tencentcloud/services/tco/resource_tc_organization_org_share_unit_member.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ import (
1616

1717
func ResourceTencentCloudOrganizationOrgShareUnitMember() *schema.Resource {
1818
return &schema.Resource{
19-
Create: resourceTencentCloudOrganizationOrgShareUnitMemberCreate,
20-
Read: resourceTencentCloudOrganizationOrgShareUnitMemberRead,
21-
Delete: resourceTencentCloudOrganizationOrgShareUnitMemberDelete,
19+
DeprecationMessage: "This resource has been deprecated in Terraform TencentCloud provider version 1.82.28, Please use `tencentcloud_organization_org_share_unit_member_v2` instead.",
20+
Create: resourceTencentCloudOrganizationOrgShareUnitMemberCreate,
21+
Read: resourceTencentCloudOrganizationOrgShareUnitMemberRead,
22+
Delete: resourceTencentCloudOrganizationOrgShareUnitMemberDelete,
2223
Importer: &schema.ResourceImporter{
2324
State: schema.ImportStatePassthrough,
2425
},
Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
1-
Provides a resource to create a organization org_share_unit_member
1+
Provides a resource to create a Organization share unit member
2+
3+
~> **NOTE:** This resource has been deprecated in Terraform TencentCloud provider version 1.82.28, Please use `tencentcloud_organization_org_share_unit_member_v2` instead.
24

35
Example Usage
46

57
```hcl
6-
resource "tencentcloud_organization_org_share_unit" "org_share_unit" {
7-
name = "iac-test"
8-
area = "ap-guangzhou"
9-
description = "iac-test"
8+
resource "tencentcloud_organization_org_share_unit" "example" {
9+
name = "tf-example"
10+
area = "ap-guangzhou"
11+
description = "description."
1012
}
11-
resource "tencentcloud_organization_org_share_unit_member" "org_share_unit_member" {
12-
unit_id = tencentcloud_organization_org_share_unit.org_share_unit.unit_id
13-
area = tencentcloud_organization_org_share_unit.org_share_unit.area
13+
14+
resource "tencentcloud_organization_org_share_unit_member" "example" {
15+
unit_id = tencentcloud_organization_org_share_unit.example.unit_id
16+
area = tencentcloud_organization_org_share_unit.example.area
1417
members {
15-
share_member_uin=100035309479
18+
share_member_uin = 100035309479
1619
}
1720
}
1821
```
Lines changed: 281 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,281 @@
1+
package tco
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log"
7+
"strings"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11+
organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331"
12+
13+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
14+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
15+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit"
16+
)
17+
18+
// max length is 10
19+
var batchSize = 10
20+
21+
func ResourceTencentCloudOrganizationOrgShareUnitMemberV2() *schema.Resource {
22+
return &schema.Resource{
23+
Create: resourceTencentCloudOrganizationOrgShareUnitMemberV2Create,
24+
Read: resourceTencentCloudOrganizationOrgShareUnitMemberV2Read,
25+
Update: resourceTencentCloudOrganizationOrgShareUnitMemberV2Update,
26+
Delete: resourceTencentCloudOrganizationOrgShareUnitMemberV2Delete,
27+
Importer: &schema.ResourceImporter{
28+
State: schema.ImportStatePassthrough,
29+
},
30+
Schema: map[string]*schema.Schema{
31+
"unit_id": {
32+
Required: true,
33+
ForceNew: true,
34+
Type: schema.TypeString,
35+
Description: "Shared unit ID.",
36+
},
37+
38+
"area": {
39+
Required: true,
40+
ForceNew: true,
41+
Type: schema.TypeString,
42+
Description: "Shared unit region.",
43+
},
44+
45+
"members": {
46+
Required: true,
47+
Type: schema.TypeSet,
48+
Description: "Shared member list.",
49+
Elem: &schema.Resource{
50+
Schema: map[string]*schema.Schema{
51+
"share_member_uin": {
52+
Type: schema.TypeInt,
53+
Required: true,
54+
Description: "Member uin.",
55+
},
56+
},
57+
},
58+
},
59+
},
60+
}
61+
}
62+
63+
func resourceTencentCloudOrganizationOrgShareUnitMemberV2Create(d *schema.ResourceData, meta interface{}) error {
64+
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_share_unit_member_v2.create")()
65+
defer tccommon.InconsistentCheck(d, meta)()
66+
67+
var (
68+
logId = tccommon.GetLogId(tccommon.ContextNil)
69+
request = organization.NewAddShareUnitMembersRequest()
70+
unitId string
71+
area string
72+
)
73+
74+
if v, ok := d.GetOk("unit_id"); ok {
75+
request.UnitId = helper.String(v.(string))
76+
unitId = v.(string)
77+
}
78+
79+
if v, ok := d.GetOk("area"); ok {
80+
request.Area = helper.String(v.(string))
81+
area = v.(string)
82+
}
83+
84+
orgShareUnitMembers := make([]*organization.ShareMember, 0, 10)
85+
if v, ok := d.GetOk("members"); ok {
86+
for _, item := range v.(*schema.Set).List() {
87+
if dMap, ok := item.(map[string]interface{}); ok {
88+
if v, ok := dMap["share_member_uin"]; ok {
89+
shareMember := organization.ShareMember{}
90+
shareMember.ShareMemberUin = helper.IntInt64(v.(int))
91+
orgShareUnitMembers = append(orgShareUnitMembers, &shareMember)
92+
}
93+
}
94+
}
95+
}
96+
97+
for i := 0; i < len(orgShareUnitMembers); i += batchSize {
98+
end := i + batchSize
99+
if end > len(orgShareUnitMembers) {
100+
end = len(orgShareUnitMembers)
101+
}
102+
103+
batch := orgShareUnitMembers[i:end]
104+
// clear Members value
105+
request.Members = nil
106+
for _, item := range batch {
107+
shareMember := organization.ShareMember{}
108+
shareMember.ShareMemberUin = item.ShareMemberUin
109+
request.Members = append(request.Members, &shareMember)
110+
}
111+
112+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
113+
ratelimit.Check(request.GetAction())
114+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().AddShareUnitMembers(request)
115+
if e != nil {
116+
return tccommon.RetryError(e)
117+
} else {
118+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
119+
}
120+
121+
return nil
122+
})
123+
124+
if err != nil {
125+
log.Printf("[CRITAL]%s create organization share unit member failed, reason:%+v", logId, err)
126+
return err
127+
}
128+
}
129+
130+
d.SetId(strings.Join([]string{unitId, area}, tccommon.FILED_SP))
131+
return resourceTencentCloudOrganizationOrgShareUnitMemberV2Read(d, meta)
132+
}
133+
134+
func resourceTencentCloudOrganizationOrgShareUnitMemberV2Read(d *schema.ResourceData, meta interface{}) error {
135+
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_share_unit_member_v2.read")()
136+
defer tccommon.InconsistentCheck(d, meta)()
137+
138+
var (
139+
logId = tccommon.GetLogId(tccommon.ContextNil)
140+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
141+
service = OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
142+
)
143+
144+
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
145+
if len(idSplit) != 2 {
146+
return fmt.Errorf("id is broken,%s", d.Id())
147+
}
148+
149+
unitId := idSplit[0]
150+
area := idSplit[1]
151+
152+
orgShareUnitMember, err := service.DescribeOrganizationOrgShareUnitMemberV2ById(ctx, unitId, area)
153+
if err != nil {
154+
return err
155+
}
156+
157+
if len(orgShareUnitMember) < 1 {
158+
log.Printf("[WARN]%s resource `tencentcloud_organization_org_share_unit_member_v2` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
159+
d.SetId("")
160+
return nil
161+
}
162+
163+
_ = d.Set("unit_id", unitId)
164+
_ = d.Set("area", area)
165+
166+
tmpList := make([]interface{}, 0, len(orgShareUnitMember))
167+
for _, item := range orgShareUnitMember {
168+
shareMember := map[string]interface{}{
169+
"share_member_uin": *item.ShareMemberUin,
170+
}
171+
172+
tmpList = append(tmpList, shareMember)
173+
}
174+
175+
_ = d.Set("members", tmpList)
176+
177+
return nil
178+
}
179+
180+
func resourceTencentCloudOrganizationOrgShareUnitMemberV2Update(d *schema.ResourceData, meta interface{}) error {
181+
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_share_unit_member_v2.update")()
182+
defer tccommon.InconsistentCheck(d, meta)()
183+
184+
var (
185+
logId = tccommon.GetLogId(tccommon.ContextNil)
186+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
187+
service = OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
188+
)
189+
190+
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
191+
if len(idSplit) != 2 {
192+
return fmt.Errorf("id is broken,%s", d.Id())
193+
}
194+
195+
unitId := idSplit[0]
196+
area := idSplit[1]
197+
198+
if d.HasChange("members") {
199+
oldInterface, newInterface := d.GetChange("members")
200+
oldInstances := oldInterface.(*schema.Set)
201+
newInstances := newInterface.(*schema.Set)
202+
remove := oldInstances.Difference(newInstances).List()
203+
add := newInstances.Difference(oldInstances).List()
204+
205+
if len(add) > 0 {
206+
tmpList := make([]*organization.ShareUnitMember, 0, len(add))
207+
for _, item := range add {
208+
if dMap, ok := item.(map[string]interface{}); ok {
209+
if v, ok := dMap["share_member_uin"]; ok {
210+
shareMember := organization.ShareUnitMember{}
211+
shareMember.ShareMemberUin = helper.IntInt64(v.(int))
212+
tmpList = append(tmpList, &shareMember)
213+
}
214+
}
215+
}
216+
217+
err := service.AddOrganizationOrgShareUnitMemberV2ById(ctx, unitId, area, tmpList)
218+
if err != nil {
219+
return err
220+
}
221+
}
222+
223+
if len(remove) > 0 {
224+
tmpList := make([]*organization.ShareUnitMember, 0, len(remove))
225+
for _, item := range remove {
226+
if dMap, ok := item.(map[string]interface{}); ok {
227+
if v, ok := dMap["share_member_uin"]; ok {
228+
shareMember := organization.ShareUnitMember{}
229+
shareMember.ShareMemberUin = helper.IntInt64(v.(int))
230+
tmpList = append(tmpList, &shareMember)
231+
}
232+
}
233+
}
234+
235+
err := service.DeleteOrganizationOrgShareUnitMemberV2ById(ctx, unitId, area, tmpList)
236+
if err != nil {
237+
return err
238+
}
239+
}
240+
241+
}
242+
243+
return nil
244+
}
245+
246+
func resourceTencentCloudOrganizationOrgShareUnitMemberV2Delete(d *schema.ResourceData, meta interface{}) error {
247+
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_share_unit_member_v2.delete")()
248+
defer tccommon.InconsistentCheck(d, meta)()
249+
250+
var (
251+
logId = tccommon.GetLogId(tccommon.ContextNil)
252+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
253+
service = OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
254+
)
255+
256+
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
257+
if len(idSplit) != 2 {
258+
return fmt.Errorf("id is broken,%s", d.Id())
259+
}
260+
261+
unitId := idSplit[0]
262+
area := idSplit[1]
263+
264+
// get all members
265+
orgShareUnitMembers, err := service.DescribeOrganizationOrgShareUnitMemberV2ById(ctx, unitId, area)
266+
if err != nil {
267+
return err
268+
}
269+
270+
if len(orgShareUnitMembers) < 1 {
271+
log.Printf("[WARN]%s resource `tencentcloud_organization_org_share_unit_member_v2` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
272+
return nil
273+
}
274+
275+
// delete all members
276+
if err := service.DeleteOrganizationOrgShareUnitMemberV2ById(ctx, unitId, area, orgShareUnitMembers); err != nil {
277+
return err
278+
}
279+
280+
return nil
281+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
Provides a resource to create a Organization share unit member
2+
3+
~> **NOTE:** ~> **NOTE:** This resource must exclusive in one share unit, do not declare additional members resources of this share unit elsewhere.
4+
5+
Example Usage
6+
7+
```hcl
8+
resource "tencentcloud_organization_org_share_unit" "example" {
9+
name = "tf-example"
10+
area = "ap-guangzhou"
11+
description = "description."
12+
}
13+
14+
resource "tencentcloud_organization_org_share_unit_member_v2" "example" {
15+
unit_id = tencentcloud_organization_org_share_unit.example.unit_id
16+
area = tencentcloud_organization_org_share_unit.example.area
17+
members {
18+
share_member_uin = 100042257812
19+
}
20+
21+
members {
22+
share_member_uin = 100043990767
23+
}
24+
25+
members {
26+
share_member_uin = 100042234123
27+
}
28+
}
29+
```
30+
31+
Import
32+
33+
Organization share unit member can be imported using the unitId#area, e.g.
34+
35+
```
36+
terraform import tencentcloud_organization_org_share_unit_member_v2.example shareUnit-switt8i4s4#ap-guangzhou
37+
```

0 commit comments

Comments
 (0)