Skip to content

Commit f04641b

Browse files
authored
feat: organization add resource (#2521)
* feat: add resource tencentcloud_organization_org_share_unit * feat: add resource tencentcloud_organization_org_share_unit * feat: add resource tencentcloud_organization_org_share_unit * feat: add resource tencentcloud_organization_org_share_unit * feat: add resource tencentcloud_organization_org_share_unit * feat: add resource tencentcloud_organization_org_share_unit * feat: add resource tencentcloud_organization_org_share_unit * feat: add resource tencentcloud_organization_org_share_unit * feat: add resource tencentcloud_organization_org_share_unit * feat: add resource tencentcloud_organization_org_share_unit * feat: add resource tencentcloud_organization_org_share_unit * feat: add resource tencentcloud_organization_org_share_unit * feat: add resource tencentcloud_organization_org_share_unit
1 parent a72cdb4 commit f04641b

13 files changed

+795
-0
lines changed

.changelog/2521.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
3+
```
4+
5+
```release-note:new-resource
6+
tencentcloud_organization_org_share_unit_member
7+
```

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1946,6 +1946,8 @@ func Provider() *schema.Provider {
19461946
"tencentcloud_vpc_peer_connect_manager": vpc.ResourceTencentCloudVpcPeerConnectManager(),
19471947
"tencentcloud_vpc_peer_connect_accept_operation": vpc.ResourceTencentCloudVpcPeerConnectAcceptOperation(),
19481948
"tencentcloud_vpc_peer_connect_reject_operation": vpc.ResourceTencentCloudVpcPeerConnectRejectOperation(),
1949+
"tencentcloud_organization_org_share_unit_member": tco.ResourceTencentCloudOrganizationOrgShareUnitMember(),
1950+
"tencentcloud_organization_org_share_unit": tco.ResourceTencentCloudOrganizationOrgShareUnit(),
19491951
},
19501952

19511953
ConfigureFunc: providerConfigure,

tencentcloud/provider.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1642,6 +1642,8 @@ Tencent Cloud Organization (TCO)
16421642
tencentcloud_organization_org_member_policy_attachment
16431643
tencentcloud_organization_policy_sub_account_attachment
16441644
tencentcloud_organization_quit_organization_operation
1645+
tencentcloud_organization_org_share_unit
1646+
tencentcloud_organization_org_share_unit_member
16451647

16461648
TDSQL-C for PostgreSQL(TDCPG)
16471649
Data Source
Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
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+
)
16+
17+
func ResourceTencentCloudOrganizationOrgShareUnit() *schema.Resource {
18+
return &schema.Resource{
19+
Create: resourceTencentCloudOrganizationOrgShareUnitCreate,
20+
Read: resourceTencentCloudOrganizationOrgShareUnitRead,
21+
Update: resourceTencentCloudOrganizationOrgShareUnitUpdate,
22+
Delete: resourceTencentCloudOrganizationOrgShareUnitDelete,
23+
Importer: &schema.ResourceImporter{
24+
State: schema.ImportStatePassthrough,
25+
},
26+
Schema: map[string]*schema.Schema{
27+
"name": {
28+
Required: true,
29+
Type: schema.TypeString,
30+
Description: "Shared unit name. It only supports a combination of uppercase and lowercase letters, numbers, -, and _, with a length of 3-128 characters.",
31+
},
32+
33+
"area": {
34+
Required: true,
35+
Type: schema.TypeString,
36+
Description: "Shared unit region. The regions that support sharing can be obtained through the DescribeShareAreas interface.",
37+
},
38+
39+
"description": {
40+
Optional: true,
41+
Type: schema.TypeString,
42+
Description: "Shared unit description. Up to 128 characters.",
43+
},
44+
45+
"unit_id": {
46+
Computed: true,
47+
Type: schema.TypeString,
48+
Description: "Shared unit region. The regions that support sharing can be obtained through the DescribeShareAreas interface.",
49+
},
50+
},
51+
}
52+
}
53+
54+
func resourceTencentCloudOrganizationOrgShareUnitCreate(d *schema.ResourceData, meta interface{}) error {
55+
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_share_unit.create")()
56+
defer tccommon.InconsistentCheck(d, meta)()
57+
58+
logId := tccommon.GetLogId(tccommon.ContextNil)
59+
60+
var (
61+
request = organization.NewAddShareUnitRequest()
62+
response = organization.NewAddShareUnitResponse()
63+
unitId string
64+
area string
65+
)
66+
if v, ok := d.GetOk("name"); ok {
67+
request.Name = helper.String(v.(string))
68+
}
69+
70+
if v, ok := d.GetOk("area"); ok {
71+
request.Area = helper.String(v.(string))
72+
area = v.(string)
73+
}
74+
75+
if v, ok := d.GetOk("description"); ok {
76+
request.Description = helper.String(v.(string))
77+
}
78+
79+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
80+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().AddShareUnit(request)
81+
if e != nil {
82+
return tccommon.RetryError(e)
83+
} else {
84+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
85+
}
86+
response = result
87+
return nil
88+
})
89+
if err != nil {
90+
log.Printf("[CRITAL]%s create organization orgShareUnit failed, reason:%+v", logId, err)
91+
return err
92+
}
93+
94+
unitId = *response.Response.UnitId
95+
d.SetId(area + tccommon.FILED_SP + unitId)
96+
97+
return resourceTencentCloudOrganizationOrgShareUnitRead(d, meta)
98+
}
99+
100+
func resourceTencentCloudOrganizationOrgShareUnitRead(d *schema.ResourceData, meta interface{}) error {
101+
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_share_unit.read")()
102+
defer tccommon.InconsistentCheck(d, meta)()
103+
104+
logId := tccommon.GetLogId(tccommon.ContextNil)
105+
106+
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
107+
108+
service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
109+
110+
split := strings.Split(d.Id(), tccommon.FILED_SP)
111+
if len(split) != 2 {
112+
return fmt.Errorf("id is broken,%s", d.Id())
113+
}
114+
area := split[0]
115+
unitId := split[1]
116+
orgShareUnit, err := service.DescribeOrganizationOrgShareUnitById(ctx, area, unitId)
117+
if err != nil {
118+
return err
119+
}
120+
121+
if orgShareUnit == nil {
122+
d.SetId("")
123+
log.Printf("[WARN]%s resource `OrganizationOrgShareUnit` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
124+
return nil
125+
}
126+
127+
if orgShareUnit.Name != nil {
128+
_ = d.Set("name", orgShareUnit.Name)
129+
}
130+
131+
if orgShareUnit.Area != nil {
132+
_ = d.Set("area", orgShareUnit.Area)
133+
}
134+
135+
if orgShareUnit.UnitId != nil {
136+
_ = d.Set("unit_id", orgShareUnit.UnitId)
137+
}
138+
139+
if orgShareUnit.Description != nil {
140+
_ = d.Set("description", orgShareUnit.Description)
141+
}
142+
143+
return nil
144+
}
145+
146+
func resourceTencentCloudOrganizationOrgShareUnitUpdate(d *schema.ResourceData, meta interface{}) error {
147+
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_share_unit.update")()
148+
defer tccommon.InconsistentCheck(d, meta)()
149+
150+
logId := tccommon.GetLogId(tccommon.ContextNil)
151+
152+
request := organization.NewUpdateShareUnitRequest()
153+
154+
split := strings.Split(d.Id(), tccommon.FILED_SP)
155+
if len(split) != 2 {
156+
return fmt.Errorf("id is broken,%s", d.Id())
157+
}
158+
unitId := split[1]
159+
request.UnitId = &unitId
160+
immutableArgs := []string{"area", "unit_id"}
161+
for _, v := range immutableArgs {
162+
if d.HasChange(v) {
163+
return fmt.Errorf("argument `%s` cannot be changed", v)
164+
}
165+
}
166+
167+
needChange := false
168+
mutableArgs := []string{"name", "description"}
169+
for _, v := range mutableArgs {
170+
if d.HasChange(v) {
171+
needChange = true
172+
break
173+
}
174+
}
175+
176+
if needChange {
177+
if v, ok := d.GetOk("name"); ok {
178+
request.Name = helper.String(v.(string))
179+
}
180+
if v, ok := d.GetOk("description"); ok {
181+
request.Description = helper.String(v.(string))
182+
}
183+
184+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
185+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().UpdateShareUnit(request)
186+
if e != nil {
187+
return tccommon.RetryError(e)
188+
} else {
189+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
190+
}
191+
return nil
192+
})
193+
if err != nil {
194+
log.Printf("[CRITAL]%s update organization orgShareUnit failed, reason:%+v", logId, err)
195+
return err
196+
}
197+
198+
}
199+
return resourceTencentCloudOrganizationOrgShareUnitRead(d, meta)
200+
}
201+
202+
func resourceTencentCloudOrganizationOrgShareUnitDelete(d *schema.ResourceData, meta interface{}) error {
203+
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_share_unit.delete")()
204+
defer tccommon.InconsistentCheck(d, meta)()
205+
206+
logId := tccommon.GetLogId(tccommon.ContextNil)
207+
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
208+
209+
service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
210+
split := strings.Split(d.Id(), tccommon.FILED_SP)
211+
if len(split) != 2 {
212+
return fmt.Errorf("id is broken,%s", d.Id())
213+
}
214+
unitId := split[1]
215+
if err := service.DeleteOrganizationOrgShareUnitById(ctx, unitId); err != nil {
216+
return err
217+
}
218+
219+
return nil
220+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
Provides a resource to create a organization org_share_unit
2+
3+
Example Usage
4+
5+
```hcl
6+
resource "tencentcloud_organization_org_share_unit" "org_share_unit" {
7+
name = "iac-test"
8+
area = "ap-guangzhou"
9+
description = "iac-test"
10+
}
11+
```
12+
13+
Import
14+
15+
organization org_share_unit can be imported using the id, e.g.
16+
17+
```
18+
terraform import tencentcloud_organization_org_share_unit.org_share_unit area#unit_id
19+
```

0 commit comments

Comments
 (0)