Skip to content

Commit 9b0484b

Browse files
authored
feat: add datasource: tencentcloud_user_info (#883)
* feat: add datasource: tencentcloud_user_info * fix: move api invoke logic to datasource file
1 parent 6783562 commit 9b0484b

File tree

13 files changed

+3192
-92
lines changed

13 files changed

+3192
-92
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ require (
2121
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/api v1.0.285
2222
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway v1.0.199
2323
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.0.199
24-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.199
24+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.357
2525
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.0.199
2626
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.199
2727
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.199
@@ -30,7 +30,7 @@ require (
3030
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.283
3131
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.199
3232
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.291
33-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.353
33+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.357
3434
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.351
3535
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.199
3636
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.0.199 h1:6g9q97yB
458458
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.0.199/go.mod h1:boLdxUceAK+98OfetsfVEX6RV1leu/JGyEtsrTf4kIY=
459459
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.199 h1:caDwMPzGsG+WUZ9tJVnTxbD7nc6Uj8K+xop5xxvV0DQ=
460460
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.199/go.mod h1:ys+65P4jdhUP5rQFSPI9O8/5s0lNcPycl5IPOTaZyVU=
461+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.357 h1:USpuZLFRHacOVo4urhDJcCIH2hb6DqNx0YmLvLt+w2Y=
462+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.357/go.mod h1:Whw7AWuWHNYQIdgwhl0/cf2DQ2N7JD9HUj9PvgiwRrQ=
461463
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.0.199 h1:MkIdFgEGF+baYAU9Z/PUmudfuamCGtLsedQpopwyHNU=
462464
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.0.199/go.mod h1:PTp058qpOV//RukBVdYQT962rZg71lIt6eHLK1zdvEc=
463465
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.199 h1:7ReZOKl95X+9SkPPtrAoUt4ZPJSIjiSxq4g/M54JmtU=
@@ -489,6 +491,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.351 h1:BpVJ
489491
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.351/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
490492
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.353 h1:rFkcKuLFxt2xolSWbyeznetTBw9Cyhe1ycILmEkE1Pk=
491493
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.353/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
494+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.357 h1:uaMtRfV/OYPolAldcOuChMPAnmYnG+CONdDAFcaOQGU=
495+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.357/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
492496
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.199 h1:ajgJogYSIQ5u1PIbiV5nsvr5K0fYpm1/T7Dy+mxEM6U=
493497
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.199/go.mod h1:AqyM/ZZMD7q5mHBqNY9YImbSpEpoEe7E/vrTbUWX+po=
494498
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.351 h1:zqJsH5pxGT57La7NAOOyMQxsuM11pupNBwV1dzXcT24=
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
/*
2+
Use this data source to query user appid, uin and ownerUin.
3+
4+
Example Usage
5+
6+
```hcl
7+
data "tencentcloud_user_info" "foo" {}
8+
```
9+
10+
*/
11+
package tencentcloud
12+
13+
import (
14+
"context"
15+
"fmt"
16+
"log"
17+
"math/rand"
18+
"strconv"
19+
20+
cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116"
21+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit"
22+
23+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
24+
)
25+
26+
func datasourceTencentCloudUserInfo() *schema.Resource {
27+
return &schema.Resource{
28+
Read: datasourceTencentCloudUserInfoRead,
29+
30+
Importer: &schema.ResourceImporter{
31+
State: schema.ImportStatePassthrough,
32+
},
33+
Schema: map[string]*schema.Schema{
34+
"app_id": {
35+
Type: schema.TypeString,
36+
Computed: true,
37+
Description: "Current account App ID.",
38+
},
39+
40+
"uin": {
41+
Type: schema.TypeString,
42+
Computed: true,
43+
Description: "Current account UIN.",
44+
},
45+
46+
"owner_uin": {
47+
Type: schema.TypeString,
48+
Computed: true,
49+
Description: "Current account OwnerUIN.",
50+
},
51+
"result_output_file": {
52+
Type: schema.TypeString,
53+
Optional: true,
54+
Description: "Used for save results.",
55+
},
56+
},
57+
}
58+
}
59+
60+
func datasourceTencentCloudUserInfoRead(d *schema.ResourceData, meta interface{}) error {
61+
defer logElapsed("datasource.tencentcloud_user_info.read")()
62+
defer inconsistentCheck(d, meta)()
63+
64+
logId := getLogId(contextNil)
65+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
66+
67+
client := meta.(*TencentCloudClient).apiV3Conn
68+
69+
logId = getLogId(ctx)
70+
request := cam.NewGetUserAppIdRequest()
71+
72+
ratelimit.Check(request.GetAction())
73+
response, err := client.UseCamClient().GetUserAppId(request)
74+
75+
if err != nil {
76+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
77+
logId, request.GetAction(), request.ToJsonString(), err.Error())
78+
return err
79+
}
80+
81+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
82+
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
83+
84+
if err != nil {
85+
return err
86+
}
87+
88+
result := response.Response
89+
90+
if result == nil {
91+
return fmt.Errorf("get user appid error: empty response")
92+
}
93+
94+
appId := strconv.FormatUint(*result.AppId, 10)
95+
uin := *result.Uin
96+
ownerUin := *result.OwnerUin
97+
98+
d.SetId(fmt.Sprintf("user-%s-%s-%d", uin, appId, rand.Intn(10000)))
99+
100+
_ = d.Set("app_id", appId)
101+
_ = d.Set("uin", uin)
102+
_ = d.Set("owner_uin", ownerUin)
103+
104+
output, ok := d.GetOk("result_output_file")
105+
if ok && output.(string) != "" {
106+
if e := writeToFile(output.(string), map[string]interface{}{
107+
"app_id": appId,
108+
"uin": uin,
109+
"ownerUin": ownerUin,
110+
}); e != nil {
111+
return e
112+
}
113+
}
114+
115+
return nil
116+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
7+
)
8+
9+
func TestAccTencentCloudDataSourceUserInfo(t *testing.T) {
10+
t.Parallel()
11+
resource.Test(t, resource.TestCase{
12+
PreCheck: func() { testAccPreCheck(t) },
13+
Providers: testAccProviders,
14+
Steps: []resource.TestStep{
15+
{
16+
Config: testAccDataUserInfoBasic,
17+
Check: resource.ComposeAggregateTestCheckFunc(
18+
resource.TestCheckResourceAttrSet("data.tencentcloud_user_info.info", "app_id"),
19+
resource.TestCheckResourceAttrSet("data.tencentcloud_user_info.info", "uin"),
20+
resource.TestCheckResourceAttrSet("data.tencentcloud_user_info.info", "owner_uin"),
21+
),
22+
},
23+
},
24+
})
25+
}
26+
27+
const testAccDataUserInfoBasic = `
28+
data "tencentcloud_user_info" "info" {}
29+
`

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ Cloud Access Management(CAM)
153153
tencentcloud_cam_saml_providers
154154
tencentcloud_cam_user_policy_attachments
155155
tencentcloud_cam_users
156+
tencentcloud_user_info
156157
157158
Resource
158159
tencentcloud_cam_role
@@ -807,6 +808,7 @@ func Provider() terraform.ResourceProvider {
807808
"tencentcloud_cam_user_policy_attachments": dataSourceTencentCloudCamUserPolicyAttachments(),
808809
"tencentcloud_cam_group_policy_attachments": dataSourceTencentCloudCamGroupPolicyAttachments(),
809810
"tencentcloud_cam_saml_providers": dataSourceTencentCloudCamSAMLProviders(),
811+
"tencentcloud_user_info": datasourceTencentCloudUserInfo(),
810812
"tencentcloud_cdn_domains": dataSourceTencentCloudCdnDomains(),
811813
"tencentcloud_scf_functions": dataSourceTencentCloudScfFunctions(),
812814
"tencentcloud_scf_namespaces": dataSourceTencentCloudScfNamespaces(),

0 commit comments

Comments
 (0)