Skip to content

Commit ebac086

Browse files
WeiMengXSWeiMengXS
andauthored
Feat/cam role (#2211)
* feat: add resource * feat: add resource * feat: add resource * feat: add resource * feat: e2e * feat: param --------- Co-authored-by: WeiMengXS <nickcchen@tencent.com>
1 parent cc74c03 commit ebac086

10 files changed

+818
-0
lines changed

.changelog/2211.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
```release-note:new-data-source
2+
tencentcloud_cam_list_entities_for_policy
3+
```
4+
5+
```release-note:new-resource
6+
tencentcloud_cam_policy_version
7+
```
Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
/*
2+
Use this data source to query detailed information of cam list_entities_for_policy
3+
4+
Example Usage
5+
6+
```hcl
7+
data "tencentcloud_cam_list_entities_for_policy" "list_entities_for_policy" {
8+
policy_id = 1
9+
entity_filter = "All"
10+
}
11+
```
12+
*/
13+
package tencentcloud
14+
15+
import (
16+
"context"
17+
18+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
19+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
20+
cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116"
21+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
22+
)
23+
24+
func dataSourceTencentCloudCamListEntitiesForPolicy() *schema.Resource {
25+
return &schema.Resource{
26+
Read: dataSourceTencentCloudCamListEntitiesForPolicyRead,
27+
Schema: map[string]*schema.Schema{
28+
"policy_id": {
29+
Required: true,
30+
Type: schema.TypeInt,
31+
Description: "Policy Id.",
32+
},
33+
34+
"rp": {
35+
Optional: true,
36+
Type: schema.TypeInt,
37+
Description: "Per page size, default value is 20.",
38+
},
39+
40+
"entity_filter": {
41+
Optional: true,
42+
Type: schema.TypeString,
43+
Description: "Can take values of &amp;amp;#39;All&amp;amp;#39;, &amp;amp;#39;User&amp;amp;#39;, &amp;amp;#39;Group&amp;amp;#39;, and &amp;amp;#39;Role&amp;amp;#39;. &amp;amp;#39;All&amp;amp;#39; represents obtaining all entity types, &amp;amp;#39;User&amp;amp;#39; represents only obtaining sub accounts, &amp;amp;#39;Group&amp;amp;#39; represents only obtaining user groups, and &amp;amp;#39;Role&amp;amp;#39; represents only obtaining roles. The default value is&amp;amp;#39; All &amp;amp;#39;.",
44+
},
45+
46+
"list": {
47+
Computed: true,
48+
Type: schema.TypeList,
49+
Description: "Entity ListNote: This field may return null, indicating that a valid value cannot be obtained.",
50+
Elem: &schema.Resource{
51+
Schema: map[string]*schema.Schema{
52+
"id": {
53+
Type: schema.TypeString,
54+
Computed: true,
55+
Description: "Entity ID.",
56+
},
57+
"name": {
58+
Type: schema.TypeString,
59+
Computed: true,
60+
Description: "Entity NameNote: This field may return null, indicating that a valid value cannot be obtained.",
61+
},
62+
"uin": {
63+
Type: schema.TypeInt,
64+
Computed: true,
65+
Description: "Entity UinNote: This field may return null, indicating that a valid value cannot be obtained.",
66+
},
67+
"related_type": {
68+
Type: schema.TypeInt,
69+
Computed: true,
70+
Description: "Association type. 1. User association; 2 User Group Association.",
71+
},
72+
"attachment_time": {
73+
Type: schema.TypeString,
74+
Computed: true,
75+
Description: "Policy association timeNote: This field may return null, indicating that a valid value cannot be obtained.",
76+
},
77+
},
78+
},
79+
},
80+
81+
"result_output_file": {
82+
Type: schema.TypeString,
83+
Optional: true,
84+
Description: "Used to save results.",
85+
},
86+
},
87+
}
88+
}
89+
90+
func dataSourceTencentCloudCamListEntitiesForPolicyRead(d *schema.ResourceData, meta interface{}) error {
91+
defer logElapsed("data_source.tencentcloud_cam_list_entities_for_policy.read")()
92+
defer inconsistentCheck(d, meta)()
93+
94+
logId := getLogId(contextNil)
95+
96+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
97+
98+
paramMap := make(map[string]interface{})
99+
if v, _ := d.GetOk("policy_id"); v != nil {
100+
paramMap["PolicyId"] = helper.IntUint64(v.(int))
101+
}
102+
103+
if v, _ := d.GetOk("rp"); v != nil {
104+
paramMap["Rp"] = helper.IntUint64(v.(int))
105+
}
106+
107+
if v, ok := d.GetOk("entity_filter"); ok {
108+
paramMap["EntityFilter"] = helper.String(v.(string))
109+
}
110+
111+
service := CamService{client: meta.(*TencentCloudClient).apiV3Conn}
112+
113+
var listEntitiesForPolicy []*cam.AttachEntityOfPolicy
114+
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
115+
result, e := service.DescribeCamListEntitiesForPolicyByFilter(ctx, paramMap)
116+
if e != nil {
117+
return retryError(e)
118+
}
119+
listEntitiesForPolicy = result
120+
return nil
121+
})
122+
if err != nil {
123+
return err
124+
}
125+
126+
ids := make([]string, 0, len(listEntitiesForPolicy))
127+
tmpList := make([]map[string]interface{}, 0)
128+
129+
if listEntitiesForPolicy != nil {
130+
for _, attachEntityOfPolicy := range listEntitiesForPolicy {
131+
attachEntityOfPolicyMap := map[string]interface{}{}
132+
133+
if attachEntityOfPolicy.Id != nil {
134+
attachEntityOfPolicyMap["id"] = attachEntityOfPolicy.Id
135+
}
136+
137+
if attachEntityOfPolicy.Name != nil {
138+
attachEntityOfPolicyMap["name"] = attachEntityOfPolicy.Name
139+
}
140+
141+
if attachEntityOfPolicy.Uin != nil {
142+
attachEntityOfPolicyMap["uin"] = attachEntityOfPolicy.Uin
143+
}
144+
145+
if attachEntityOfPolicy.RelatedType != nil {
146+
attachEntityOfPolicyMap["related_type"] = attachEntityOfPolicy.RelatedType
147+
}
148+
149+
if attachEntityOfPolicy.AttachmentTime != nil {
150+
attachEntityOfPolicyMap["attachment_time"] = attachEntityOfPolicy.AttachmentTime
151+
}
152+
153+
ids = append(ids, helper.UInt64ToStr(*attachEntityOfPolicy.Uin))
154+
tmpList = append(tmpList, attachEntityOfPolicyMap)
155+
}
156+
157+
_ = d.Set("list", tmpList)
158+
}
159+
160+
d.SetId(helper.DataResourceIdsHash(ids))
161+
output, ok := d.GetOk("result_output_file")
162+
if ok && output.(string) != "" {
163+
if e := writeToFile(output.(string), tmpList); e != nil {
164+
return e
165+
}
166+
}
167+
return nil
168+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
)
8+
9+
func TestAccTencentCloudCamListEntitiesForPolicyDataSource_basic(t *testing.T) {
10+
t.Parallel()
11+
resource.Test(t, resource.TestCase{
12+
PreCheck: func() {
13+
testAccPreCheck(t)
14+
},
15+
Providers: testAccProviders,
16+
Steps: []resource.TestStep{
17+
{
18+
Config: testAccCamListEntitiesForPolicyDataSource,
19+
Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cam_list_entities_for_policy.list_entities_for_policy"),
20+
resource.TestCheckResourceAttrSet("data.tencentcloud_cam_list_entities_for_policy.list_entities_for_policy", "policy_id"),
21+
resource.TestCheckResourceAttrSet("data.tencentcloud_cam_list_entities_for_policy.list_entities_for_policy", "entity_filter"),
22+
),
23+
},
24+
},
25+
})
26+
}
27+
28+
const testAccCamListEntitiesForPolicyDataSource = `
29+
30+
data "tencentcloud_cam_list_entities_for_policy" "list_entities_for_policy" {
31+
policy_id = 1
32+
entity_filter = "All"
33+
}
34+
35+
`

tencentcloud/provider.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ Cloud Access Management(CAM)
223223
tencentcloud_cam_user_policy_attachments
224224
tencentcloud_cam_users
225225
tencentcloud_user_info
226+
tencentcloud_cam_list_entities_for_policy
226227
227228
Resource
228229
tencentcloud_cam_role
@@ -243,6 +244,7 @@ Cloud Access Management(CAM)
243244
tencentcloud_cam_mfa_flag
244245
tencentcloud_cam_access_key
245246
tencentcloud_cam_user_saml_config
247+
tencentcloud_cam_policy_version
246248
tencentcloud_cam_user_permission_boundary_attachment
247249
248250
Customer Identity and Access Management(CIAM)
@@ -2177,6 +2179,7 @@ func Provider() *schema.Provider {
21772179
"tencentcloud_cam_user_policy_attachments": dataSourceTencentCloudCamUserPolicyAttachments(),
21782180
"tencentcloud_cam_group_policy_attachments": dataSourceTencentCloudCamGroupPolicyAttachments(),
21792181
"tencentcloud_cam_saml_providers": dataSourceTencentCloudCamSAMLProviders(),
2182+
"tencentcloud_cam_list_entities_for_policy": dataSourceTencentCloudCamListEntitiesForPolicy(),
21802183
"tencentcloud_user_info": datasourceTencentCloudUserInfo(),
21812184
"tencentcloud_cdn_domains": dataSourceTencentCloudCdnDomains(),
21822185
"tencentcloud_cdn_domain_verifier": dataSourceTencentCloudCdnDomainVerifyRecord(),
@@ -2837,6 +2840,7 @@ func Provider() *schema.Provider {
28372840
"tencentcloud_cam_mfa_flag": resourceTencentCloudCamMfaFlag(),
28382841
"tencentcloud_cam_access_key": resourceTencentCloudCamAccessKey(),
28392842
"tencentcloud_cam_user_saml_config": resourceTencentCloudCamUserSamlConfig(),
2843+
"tencentcloud_cam_policy_version": resourceTencentCloudCamPolicyVersion(),
28402844
"tencentcloud_cam_user_permission_boundary_attachment": resourceTencentCloudCamUserPermissionBoundaryAttachment(),
28412845
"tencentcloud_ciam_user_group": resourceTencentCloudCiamUserGroup(),
28422846
"tencentcloud_ciam_user_store": resourceTencentCloudCiamUserStore(),

0 commit comments

Comments
 (0)