Skip to content

Commit c34ac52

Browse files
committed
feat(tco): add resource_tc_organization_org_manage_policy_config
1 parent f9ad0df commit c34ac52

5 files changed

+302
-1
lines changed

.github/workflows/golangci-lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,5 @@ jobs:
4141
# version: v1.45.2
4242
version: v1.57.2
4343
working-directory: ./tencentcloud
44-
args: --new-from-rev=origin/master -v
44+
args: --skip-dirs=vendor --concurrency=4 --new-from-rev=origin/master -v
4545
#args: --enable-all --max-same-issues=0 --max-issues-per-linter=0 --new-from-rev=origin/master -v
Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
package tco
2+
3+
import (
4+
"context"
5+
"log"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331"
10+
11+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
12+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
13+
)
14+
15+
func ResourceTencentCloudOrganizationOrgManagePolicy() *schema.Resource {
16+
return &schema.Resource{
17+
Create: resourceTencentCloudOrganizationOrgManagePolicyCreate,
18+
Read: resourceTencentCloudOrganizationOrgManagePolicyRead,
19+
Update: resourceTencentCloudOrganizationOrgManagePolicyUpdate,
20+
Delete: resourceTencentCloudOrganizationOrgManagePolicyDelete,
21+
Importer: &schema.ResourceImporter{
22+
State: schema.ImportStatePassthrough,
23+
},
24+
Schema: map[string]*schema.Schema{
25+
"name": {
26+
Required: true,
27+
Type: schema.TypeString,
28+
Description: "Policy name.\nThe length is 1~128 characters, which can include Chinese characters, English letters, numbers, and underscores.",
29+
},
30+
31+
"content": {
32+
Required: true,
33+
Type: schema.TypeString,
34+
Description: "Policy content. Refer to the CAM policy syntax.",
35+
},
36+
37+
"type": {
38+
Required: true,
39+
Type: schema.TypeString,
40+
Description: "Policy type. Default value is SERVICE_CONTROL_POLICY.\nValid values:\n - `SERVICE_CONTROL_POLICY`: Service control policy.\n - `TAG_POLICY`: Tag policy.",
41+
},
42+
43+
"description": {
44+
Optional: true,
45+
Type: schema.TypeString,
46+
Description: "Policy description.",
47+
},
48+
},
49+
}
50+
}
51+
52+
func resourceTencentCloudOrganizationOrgManagePolicyCreate(d *schema.ResourceData, meta interface{}) error {
53+
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_manage_policy.create")()
54+
defer tccommon.InconsistentCheck(d, meta)()
55+
56+
logId := tccommon.GetLogId(tccommon.ContextNil)
57+
58+
var (
59+
request = organization.NewCreatePolicyRequest()
60+
response = organization.NewCreatePolicyResponse()
61+
)
62+
if v, ok := d.GetOk("name"); ok {
63+
request.Name = helper.String(v.(string))
64+
}
65+
66+
if v, ok := d.GetOk("content"); ok {
67+
request.Content = helper.String(v.(string))
68+
}
69+
70+
if v, ok := d.GetOk("type"); ok {
71+
request.Type = helper.String(v.(string))
72+
}
73+
74+
if v, ok := d.GetOk("description"); ok {
75+
request.Description = helper.String(v.(string))
76+
}
77+
78+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
79+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().CreatePolicy(request)
80+
if e != nil {
81+
return tccommon.RetryError(e)
82+
} else {
83+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
84+
}
85+
response = result
86+
return nil
87+
})
88+
if err != nil {
89+
log.Printf("[CRITAL]%s create organization OrgManagePolicy failed, reason:%+v", logId, err)
90+
return err
91+
}
92+
93+
d.SetId(helper.UInt64ToStr(*response.Response.PolicyId))
94+
95+
return resourceTencentCloudOrganizationOrgManagePolicyRead(d, meta)
96+
}
97+
98+
func resourceTencentCloudOrganizationOrgManagePolicyRead(d *schema.ResourceData, meta interface{}) error {
99+
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_manage_policy.read")()
100+
defer tccommon.InconsistentCheck(d, meta)()
101+
102+
logId := tccommon.GetLogId(tccommon.ContextNil)
103+
104+
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
105+
106+
service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
107+
108+
policyId := d.Id()
109+
110+
OrgManagePolicy, err := service.DescribeOrganizationOrgManagePolicyById(ctx, policyId)
111+
if err != nil {
112+
return err
113+
}
114+
115+
if OrgManagePolicy == nil {
116+
d.SetId("")
117+
log.Printf("[WARN]%s resource `OrganizationOrgManagePolicy` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
118+
return nil
119+
}
120+
121+
return nil
122+
}
123+
124+
func resourceTencentCloudOrganizationOrgManagePolicyUpdate(d *schema.ResourceData, meta interface{}) error {
125+
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_manage_policy.update")()
126+
defer tccommon.InconsistentCheck(d, meta)()
127+
128+
logId := tccommon.GetLogId(tccommon.ContextNil)
129+
130+
request := organization.NewUpdatePolicyRequest()
131+
132+
policyId := d.Id()
133+
134+
request.PolicyId = helper.StrToInt64Point(policyId)
135+
136+
needChange := false
137+
mutableArgs := []string{"name", "content", "type", "description"}
138+
for _, v := range mutableArgs {
139+
if d.HasChange(v) {
140+
needChange = true
141+
break
142+
}
143+
}
144+
145+
if needChange {
146+
if v, ok := d.GetOk("name"); ok {
147+
request.Name = helper.String(v.(string))
148+
}
149+
if v, ok := d.GetOk("content"); ok {
150+
request.Content = helper.String(v.(string))
151+
}
152+
if v, ok := d.GetOk("type"); ok {
153+
request.Type = helper.String(v.(string))
154+
}
155+
if v, ok := d.GetOk("description"); ok {
156+
request.Description = helper.String(v.(string))
157+
}
158+
159+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
160+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().UpdatePolicy(request)
161+
if e != nil {
162+
return tccommon.RetryError(e)
163+
} else {
164+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
165+
}
166+
return nil
167+
})
168+
if err != nil {
169+
log.Printf("[CRITAL]%s update organization OrgManagePolicy failed, reason:%+v", logId, err)
170+
return err
171+
}
172+
173+
}
174+
return resourceTencentCloudOrganizationOrgManagePolicyRead(d, meta)
175+
}
176+
177+
func resourceTencentCloudOrganizationOrgManagePolicyDelete(d *schema.ResourceData, meta interface{}) error {
178+
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_manage_policy.delete")()
179+
defer tccommon.InconsistentCheck(d, meta)()
180+
181+
logId := tccommon.GetLogId(tccommon.ContextNil)
182+
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
183+
184+
service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
185+
policyId := d.Id()
186+
187+
if err := service.DeleteOrganizationOrgManagePolicyById(ctx, policyId); err != nil {
188+
return err
189+
}
190+
191+
return nil
192+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
Provides a resource to create a organization org_manage_policy
2+
3+
Example Usage
4+
5+
```hcl
6+
resource "tencentcloud_organization_org_manage_policy" "org_manage_policy" {
7+
name = "FullAccessPolicy"
8+
content = "{"version":"2.0","statement":[{"effect":"allow","action":"*","resource":"*"}]}"
9+
type = "SERVICE_CONTROL_POLICY"
10+
description = "Full access policy"
11+
}
12+
```
13+
14+
Import
15+
16+
organization org_manage_policy can be imported using the id, e.g.
17+
18+
```
19+
terraform import tencentcloud_organization_org_manage_policy.org_manage_policy org_manage_policy_id
20+
```
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package tco_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 TestAccTencentCloudOrganizationOrgManagePolicyResource_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: testAccOrganizationOrgManagePolicy,
21+
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_organization_org_manage_policy.org_manage_policy", "id")),
22+
},
23+
{
24+
ResourceName: "tencentcloud_organization_org_manage_policy.org_manage_policy",
25+
ImportState: true,
26+
ImportStateVerify: true,
27+
},
28+
},
29+
})
30+
}
31+
32+
const testAccOrganizationOrgManagePolicy = `
33+
34+
resource "tencentcloud_organization_org_manage_policy" "org_manage_policy" {
35+
name = "FullAccessPolicy"
36+
content = "{"version":"2.0","statement":[{"effect":"allow","action":"*","resource":"*"}]}"
37+
type = "SERVICE_CONTROL_POLICY"
38+
description = "Full access policy"
39+
}
40+
41+
`

tencentcloud/services/tco/service_tencentcloud_organization.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1010,3 +1010,51 @@ func (me *OrganizationService) DeleteOrganizationOrgManagePolicyConfigById(ctx c
10101010

10111011
return
10121012
}
1013+
1014+
func (me *OrganizationService) DescribeOrganizationOrgManagePolicyById(ctx context.Context, policyId string) (OrgManagePolicy *organization.ListPoliciesResponseParams, errRet error) {
1015+
logId := tccommon.GetLogId(ctx)
1016+
1017+
request := organization.NewListPoliciesRequest()
1018+
1019+
defer func() {
1020+
if errRet != nil {
1021+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
1022+
}
1023+
}()
1024+
1025+
ratelimit.Check(request.GetAction())
1026+
1027+
response, err := me.client.UseOrganizationClient().ListPolicies(request)
1028+
if err != nil {
1029+
errRet = err
1030+
return
1031+
}
1032+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1033+
1034+
OrgManagePolicy = response.Response
1035+
return
1036+
}
1037+
1038+
func (me *OrganizationService) DeleteOrganizationOrgManagePolicyById(ctx context.Context, policyId string) (errRet error) {
1039+
logId := tccommon.GetLogId(ctx)
1040+
1041+
request := organization.NewDeletePolicyRequest()
1042+
request.PolicyId = helper.StrToUint64Point(policyId)
1043+
1044+
defer func() {
1045+
if errRet != nil {
1046+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
1047+
}
1048+
}()
1049+
1050+
ratelimit.Check(request.GetAction())
1051+
1052+
response, err := me.client.UseOrganizationClient().DeletePolicy(request)
1053+
if err != nil {
1054+
errRet = err
1055+
return
1056+
}
1057+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1058+
1059+
return
1060+
}

0 commit comments

Comments
 (0)