Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit e8199cd

Browse files
committedApr 29, 2024·
feat(tco): add resource_tc_organization_org_manage_policy_config
1 parent 4c027c3 commit e8199cd

7 files changed

+298
-2
lines changed
 

‎.github/workflows/golangci-lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232
with:
3333
go-version-file: .go-version
3434
#go-version: '1.21'
35-
cache: false
35+
cache: true
3636

3737
# Runs a set of commands using the runners shell
3838
- name: golangci-lint

‎tencentcloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1652,6 +1652,7 @@ func Provider() *schema.Provider {
16521652
"tencentcloud_organization_org_member_policy_attachment": tco.ResourceTencentCloudOrganizationOrgMemberPolicyAttachment(),
16531653
"tencentcloud_organization_org_manage_policy_config": tco.ResourceTencentCloudOrganizationOrgManagePolicyConfig(),
16541654
"tencentcloud_organization_org_manage_policy": tco.ResourceTencentCloudOrganizationOrgManagePolicy(),
1655+
"tencentcloud_organization_org_manage_policy_target": tco.ResourceTencentCloudOrganizationOrgManagePolicyTarget(),
16551656
"tencentcloud_dbbrain_sql_filter": dbbrain.ResourceTencentCloudDbbrainSqlFilter(),
16561657
"tencentcloud_dbbrain_security_audit_log_export_task": dbbrain.ResourceTencentCloudDbbrainSecurityAuditLogExportTask(),
16571658
"tencentcloud_dbbrain_db_diag_report_task": dbbrain.ResourceTencentCloudDbbrainDbDiagReportTask(),

‎tencentcloud/services/tco/resource_tc_organization_org_manage_policy.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ func ResourceTencentCloudOrganizationOrgManagePolicy() *schema.Resource {
3737
},
3838

3939
"type": {
40-
Required: true,
40+
Optional: true,
41+
Default: ServiceControlPolicyType,
4142
Type: schema.TypeString,
4243
Description: "Policy type. Default value is SERVICE_CONTROL_POLICY.\nValid values:\n - `SERVICE_CONTROL_POLICY`: Service control policy.\n - `TAG_POLICY`: Tag policy.",
4344
},
Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
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 ResourceTencentCloudOrganizationOrgManagePolicyTarget() *schema.Resource {
18+
return &schema.Resource{
19+
Create: resourceTencentCloudOrganizationOrgManagePolicyTargetCreate,
20+
Read: resourceTencentCloudOrganizationOrgManagePolicyTargetRead,
21+
Delete: resourceTencentCloudOrganizationOrgManagePolicyTargetDelete,
22+
Importer: &schema.ResourceImporter{
23+
State: schema.ImportStatePassthrough,
24+
},
25+
Schema: map[string]*schema.Schema{
26+
"target_id": {
27+
Required: true,
28+
ForceNew: true,
29+
Type: schema.TypeInt,
30+
Description: "Binding target ID of the policy. Member Uin or Department ID.",
31+
},
32+
33+
"target_type": {
34+
Required: true,
35+
ForceNew: true,
36+
Type: schema.TypeString,
37+
Description: "Target type.\nValid values:\n - `NODE`: Department.\n - `MEMBER`: Check Member.",
38+
},
39+
40+
"policy_id": {
41+
Required: true,
42+
ForceNew: true,
43+
Type: schema.TypeInt,
44+
Description: "Policy Id.",
45+
},
46+
47+
"policy_type": {
48+
Optional: true,
49+
ForceNew: true,
50+
Default: ServiceControlPolicyType,
51+
Type: schema.TypeString,
52+
Description: "Policy type. Default value is SERVICE_CONTROL_POLICY.\nValid values:\n - `SERVICE_CONTROL_POLICY`: Service control policy.\n - `TAG_POLICY`: Tag policy.",
53+
},
54+
},
55+
}
56+
}
57+
58+
func resourceTencentCloudOrganizationOrgManagePolicyTargetCreate(d *schema.ResourceData, meta interface{}) error {
59+
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_manage_policy_target.create")()
60+
defer tccommon.InconsistentCheck(d, meta)()
61+
62+
logId := tccommon.GetLogId(tccommon.ContextNil)
63+
64+
var (
65+
request = organization.NewAttachPolicyRequest()
66+
policyType string
67+
policyId int
68+
targetType string
69+
targetId int
70+
)
71+
if v, ok := d.GetOkExists("target_id"); ok {
72+
targetId = v.(int)
73+
request.TargetId = helper.IntUint64(v.(int))
74+
}
75+
76+
if v, ok := d.GetOk("target_type"); ok {
77+
targetType = v.(string)
78+
request.TargetType = helper.String(v.(string))
79+
}
80+
81+
if v, ok := d.GetOkExists("policy_id"); ok {
82+
policyId = v.(int)
83+
request.PolicyId = helper.IntUint64(v.(int))
84+
}
85+
86+
if v, ok := d.GetOk("policy_type"); ok {
87+
policyType = v.(string)
88+
request.Type = helper.String(v.(string))
89+
}
90+
91+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
92+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().AttachPolicy(request)
93+
if e != nil {
94+
return tccommon.RetryError(e)
95+
} else {
96+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
97+
}
98+
return nil
99+
})
100+
if err != nil {
101+
log.Printf("[CRITAL]%s create organization OrgManagePolicyTarget failed, reason:%+v", logId, err)
102+
return err
103+
}
104+
105+
d.SetId(strings.Join([]string{policyType, helper.Int64ToStr(int64(policyId)), targetType, helper.Int64ToStr(int64(targetId))}, tccommon.FILED_SP))
106+
107+
return resourceTencentCloudOrganizationOrgManagePolicyTargetRead(d, meta)
108+
}
109+
110+
func resourceTencentCloudOrganizationOrgManagePolicyTargetRead(d *schema.ResourceData, meta interface{}) error {
111+
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_manage_policy_target.read")()
112+
defer tccommon.InconsistentCheck(d, meta)()
113+
114+
logId := tccommon.GetLogId(tccommon.ContextNil)
115+
116+
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
117+
118+
service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
119+
120+
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
121+
122+
if len(idSplit) != 4 {
123+
return fmt.Errorf("id is broken,%s", d.Id())
124+
}
125+
126+
policyType := idSplit[0]
127+
128+
policyId := idSplit[1]
129+
130+
targetType := idSplit[2]
131+
132+
targetId := idSplit[3]
133+
134+
OrgManagePolicyTarget, err := service.DescribeOrganizationOrgManagePolicyTargetById(ctx, policyType, policyId, targetType, targetId)
135+
if err != nil {
136+
return err
137+
}
138+
139+
if OrgManagePolicyTarget == nil {
140+
d.SetId("")
141+
log.Printf("[WARN]%s resource `OrganizationOrgManagePolicyTarget` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
142+
return nil
143+
}
144+
145+
_ = d.Set("target_id", targetId)
146+
_ = d.Set("target_type", targetType)
147+
_ = d.Set("policy_id", policyId)
148+
_ = d.Set("policy_type", policyType)
149+
return nil
150+
}
151+
152+
func resourceTencentCloudOrganizationOrgManagePolicyTargetDelete(d *schema.ResourceData, meta interface{}) error {
153+
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_manage_policy_target.delete")()
154+
defer tccommon.InconsistentCheck(d, meta)()
155+
156+
logId := tccommon.GetLogId(tccommon.ContextNil)
157+
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
158+
159+
service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
160+
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
161+
162+
if len(idSplit) != 4 {
163+
return fmt.Errorf("id is broken,%s", d.Id())
164+
}
165+
166+
policyType := idSplit[0]
167+
168+
policyId := idSplit[1]
169+
170+
targetType := idSplit[2]
171+
172+
targetId := idSplit[3]
173+
174+
if err := service.DeleteOrganizationOrgManagePolicyTargetById(ctx, policyType, policyId, targetType, targetId); err != nil {
175+
return err
176+
}
177+
178+
return nil
179+
}
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_target
2+
3+
Example Usage
4+
5+
```hcl
6+
resource "tencentcloud_organization_org_manage_policy_target" "org_manage_policy_target" {
7+
target_id = 10001
8+
target_type = "NODE"
9+
policy_id = 100001
10+
policy_type = "SERVICE_CONTROL_POLICY"
11+
}
12+
```
13+
14+
Import
15+
16+
organization org_manage_policy_target can be imported using the id, e.g.
17+
18+
```
19+
terraform import tencentcloud_organization_org_manage_policy_target.org_manage_policy_target org_manage_policy_target_id
20+
```
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package tco
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 TestAccTencentCloudOrganizationOrgManagePolicyTargetResource_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: testAccOrganizationOrgManagePolicyTarget,
21+
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_organization_org_manage_policy_target.org_manage_policy_target", "id")),
22+
},
23+
{
24+
ResourceName: "tencentcloud_organization_org_manage_policy_target.org_manage_policy_target",
25+
ImportState: true,
26+
ImportStateVerify: true,
27+
},
28+
},
29+
})
30+
}
31+
32+
const testAccOrganizationOrgManagePolicyTarget = `
33+
34+
resource "tencentcloud_organization_org_manage_policy_target" "org_manage_policy_target" {
35+
target_id = 10001
36+
target_type = "NODE"
37+
policy_id = 100001
38+
policy_type = "SERVICE_CONTROL_POLICY"
39+
}
40+
41+
`

‎tencentcloud/services/tco/service_tencentcloud_organization.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,3 +1090,57 @@ func (me *OrganizationService) DeleteOrganizationOrgManagePolicyById(ctx context
10901090

10911091
return
10921092
}
1093+
1094+
func (me *OrganizationService) DescribeOrganizationOrgManagePolicyTargetById(ctx context.Context, policyType string, policyId string, targetType string, targetId string) (OrgManagePolicyTarget *organization.ListTargetsForPolicyResponseParams, errRet error) {
1095+
logId := tccommon.GetLogId(ctx)
1096+
1097+
request := organization.NewListTargetsForPolicyRequest()
1098+
request.PolicyType = &policyType
1099+
request.PolicyId = helper.StrToUint64Point(policyId)
1100+
request.TargetType = &targetType
1101+
1102+
defer func() {
1103+
if errRet != nil {
1104+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
1105+
}
1106+
}()
1107+
1108+
ratelimit.Check(request.GetAction())
1109+
1110+
response, err := me.client.UseOrganizationClient().ListTargetsForPolicy(request)
1111+
if err != nil {
1112+
errRet = err
1113+
return
1114+
}
1115+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1116+
1117+
OrgManagePolicyTarget = response.Response
1118+
return
1119+
}
1120+
1121+
func (me *OrganizationService) DeleteOrganizationOrgManagePolicyTargetById(ctx context.Context, policyType string, policyId string, targetType string, targetId string) (errRet error) {
1122+
logId := tccommon.GetLogId(ctx)
1123+
1124+
request := organization.NewDetachPolicyRequest()
1125+
request.Type = &policyType
1126+
request.PolicyId = helper.StrToUint64Point(policyId)
1127+
request.TargetType = &targetType
1128+
request.TargetId = helper.StrToUint64Point(targetId)
1129+
1130+
defer func() {
1131+
if errRet != nil {
1132+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
1133+
}
1134+
}()
1135+
1136+
ratelimit.Check(request.GetAction())
1137+
1138+
response, err := me.client.UseOrganizationClient().DetachPolicy(request)
1139+
if err != nil {
1140+
errRet = err
1141+
return
1142+
}
1143+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1144+
1145+
return
1146+
}

0 commit comments

Comments
 (0)
Please sign in to comment.