Skip to content

Commit 5786aba

Browse files
authored
feat(organization): [126176676] new data source (#3475)
* add * add * add * add
1 parent 01dfb82 commit 5786aba

16 files changed

+1153
-253
lines changed

.changelog/3475.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-data-source
2+
tencentcloud_organization_resource_to_share_member
3+
```

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ require (
4646
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.1107
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.1033
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.1148
49-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.5
49+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.8
5050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1153
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
5252
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1161
@@ -69,7 +69,7 @@ require (
6969
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.1096
7070
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.1149
7171
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.853
72-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.1038
72+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.1.8
7373
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.1156
7474
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.1038
7575
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/pts v1.0.762

go.sum

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -938,6 +938,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.4 h1:OSHvdW
938938
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.4/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
939939
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.5 h1:o96wtYe9H2a1aZI1pO4Cr9V5WOPd5JDf6O9YK7Ek64Q=
940940
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.5/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
941+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.8 h1:Qxwajpf0YHFDcDJ0crRzK2QOaWTG5+UNZivhbBbq88w=
942+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.1.8/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
941943
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ=
942944
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY=
943945
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
@@ -999,6 +1001,10 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/oceanus v1.0.831 h1:oya
9991001
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/oceanus v1.0.831/go.mod h1:2WuTlTnKCnZoa6l0JxY9GNfo0UG6nU7AEsljF8rMMsM=
10001002
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.1038 h1:BJqvIa+Z7bt1Y2VN9wZSye7Bq2RaVrRw1Rt50TwsgsM=
10011003
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.1038/go.mod h1:ZcauOIKWXstNwe6IlD3iBBxzljEWdQjZbTc6PfwsPxQ=
1004+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.1.0 h1:XfXfv0+492qXulFnIX7Hwb833tPNQwG9/kAkc7Sw36M=
1005+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.1.0/go.mod h1:aJQSSfZOC9JLE19cH0ypZuipGaTQLMazzf6BGyqCl+0=
1006+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.1.8 h1:8jEpC3Oa4s3B94ME97URLw4Qufwv1x8WS284nZAWNoI=
1007+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.1.8/go.mod h1:5j1DRgOuOlxM54zVCDtiLM8WMYvFyhOuQM/PzWugUqA=
10021008
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.1156 h1:zf/4a8G7E7RlVaGCVyjVkljX5P4gjNJymQkHoEzhjs4=
10031009
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.1156/go.mod h1:B1+7f2z0qF8G2EjFzPXtqHK3tPbzqb2y725eW1wIkaM=
10041010
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.1038 h1:4rzyVxkDB27v73jDXPr5eGAwjN859R7SsqniCt+46XE=

tencentcloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1198,6 +1198,7 @@ func Provider() *schema.Provider {
11981198
"tencentcloud_organization_org_share_units": tco.DataSourceTencentCloudOrganizationOrgShareUnits(),
11991199
"tencentcloud_organization_org_share_unit_members": tco.DataSourceTencentCloudOrganizationOrgShareUnitMembers(),
12001200
"tencentcloud_role_configuration_provisionings": tco.DataSourceTencentCloudRoleConfigurationProvisionings(),
1201+
"tencentcloud_organization_resource_to_share_member": tco.DataSourceTencentCloudOrganizationResourceToShareMember(),
12011202
"tencentcloud_pts_scenario_with_jobs": pts.DataSourceTencentCloudPtsScenarioWithJobs(),
12021203
"tencentcloud_cam_list_attached_user_policy": cam.DataSourceTencentCloudCamListAttachedUserPolicy(),
12031204
"tencentcloud_cam_secret_last_used_time": cam.DataSourceTencentCloudCamSecretLastUsedTime(),

tencentcloud/provider.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1761,6 +1761,7 @@ tencentcloud_organization_org_share_unit_resources
17611761
tencentcloud_organization_org_share_units
17621762
tencentcloud_organization_org_share_unit_members
17631763
tencentcloud_role_configuration_provisionings
1764+
tencentcloud_organization_resource_to_share_member
17641765
Resource
17651766
tencentcloud_organization_instance
17661767
tencentcloud_organization_org_node
Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
package tco
2+
3+
import (
4+
"context"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
8+
organizationv20210331 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331"
9+
10+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
11+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
12+
)
13+
14+
func DataSourceTencentCloudOrganizationResourceToShareMember() *schema.Resource {
15+
return &schema.Resource{
16+
Read: dataSourceTencentCloudOrganizationResourceToShareMemberRead,
17+
Schema: map[string]*schema.Schema{
18+
"area": {
19+
Type: schema.TypeString,
20+
Required: true,
21+
Description: "Area.",
22+
},
23+
24+
"search_key": {
25+
Type: schema.TypeString,
26+
Optional: true,
27+
Description: "Search keywords, support business resource ID search.",
28+
},
29+
30+
"type": {
31+
Type: schema.TypeString,
32+
Optional: true,
33+
Description: "Resource Type.",
34+
},
35+
36+
"product_resource_ids": {
37+
Type: schema.TypeSet,
38+
Optional: true,
39+
Description: "Business resource ID. Maximum 50.",
40+
Elem: &schema.Schema{Type: schema.TypeString},
41+
},
42+
43+
"items": {
44+
Type: schema.TypeList,
45+
Computed: true,
46+
Description: "Details.",
47+
Elem: &schema.Resource{
48+
Schema: map[string]*schema.Schema{
49+
"resource_id": {
50+
Type: schema.TypeString,
51+
Required: true,
52+
Description: "Resource ID.",
53+
},
54+
"type": {
55+
Type: schema.TypeString,
56+
Required: true,
57+
Description: "Resource type.",
58+
},
59+
"unit_id": {
60+
Type: schema.TypeString,
61+
Required: true,
62+
Description: "Shared unit ID.",
63+
},
64+
"unit_name": {
65+
Type: schema.TypeString,
66+
Required: true,
67+
Description: "Shared unit name.",
68+
},
69+
"create_time": {
70+
Type: schema.TypeString,
71+
Required: true,
72+
Description: "Create time.",
73+
},
74+
"product_resource_id": {
75+
Type: schema.TypeString,
76+
Required: true,
77+
Description: "Business resource ID.",
78+
},
79+
"share_manager_uin": {
80+
Type: schema.TypeInt,
81+
Required: true,
82+
Description: "Shared Administrator uin.",
83+
},
84+
},
85+
},
86+
},
87+
88+
"result_output_file": {
89+
Type: schema.TypeString,
90+
Optional: true,
91+
Description: "Used to save results.",
92+
},
93+
},
94+
}
95+
}
96+
97+
func dataSourceTencentCloudOrganizationResourceToShareMemberRead(d *schema.ResourceData, meta interface{}) error {
98+
defer tccommon.LogElapsed("data_source.tencentcloud_organization_resource_to_share_member.read")()
99+
defer tccommon.InconsistentCheck(d, meta)()
100+
101+
var (
102+
logId = tccommon.GetLogId(nil)
103+
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
104+
service = OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
105+
)
106+
107+
paramMap := make(map[string]interface{})
108+
if v, ok := d.GetOk("area"); ok {
109+
paramMap["Area"] = helper.String(v.(string))
110+
}
111+
112+
if v, ok := d.GetOk("search_key"); ok {
113+
paramMap["SearchKey"] = helper.String(v.(string))
114+
}
115+
116+
if v, ok := d.GetOk("type"); ok {
117+
paramMap["Type"] = helper.String(v.(string))
118+
}
119+
120+
if v, ok := d.GetOk("product_resource_ids"); ok {
121+
productResourceIdsList := []*string{}
122+
productResourceIdsSet := v.(*schema.Set).List()
123+
for i := range productResourceIdsSet {
124+
productResourceIds := productResourceIdsSet[i].(string)
125+
productResourceIdsList = append(productResourceIdsList, helper.String(productResourceIds))
126+
}
127+
128+
paramMap["ProductResourceIds"] = productResourceIdsList
129+
}
130+
131+
var respData []*organizationv20210331.ShareResourceToMember
132+
reqErr := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
133+
result, e := service.DescribeOrganizationResourceToShareMemberByFilter(ctx, paramMap)
134+
if e != nil {
135+
return tccommon.RetryError(e)
136+
}
137+
138+
respData = result
139+
return nil
140+
})
141+
142+
if reqErr != nil {
143+
return reqErr
144+
}
145+
146+
ids := make([]string, 0, len(respData))
147+
itemsList := make([]map[string]interface{}, 0, len(respData))
148+
if respData != nil {
149+
for _, items := range respData {
150+
itemsMap := map[string]interface{}{}
151+
if items.ResourceId != nil {
152+
itemsMap["resource_id"] = items.ResourceId
153+
}
154+
155+
if items.Type != nil {
156+
itemsMap["type"] = items.Type
157+
}
158+
159+
if items.UnitId != nil {
160+
itemsMap["unit_id"] = items.UnitId
161+
}
162+
163+
if items.UnitName != nil {
164+
itemsMap["unit_name"] = items.UnitName
165+
}
166+
167+
if items.CreateTime != nil {
168+
itemsMap["create_time"] = items.CreateTime
169+
}
170+
171+
if items.ProductResourceId != nil {
172+
itemsMap["product_resource_id"] = items.ProductResourceId
173+
}
174+
175+
if items.ShareManagerUin != nil {
176+
itemsMap["share_manager_uin"] = items.ShareManagerUin
177+
}
178+
179+
itemsList = append(itemsList, itemsMap)
180+
}
181+
182+
_ = d.Set("items", itemsList)
183+
}
184+
185+
d.SetId(helper.DataResourceIdsHash(ids))
186+
output, ok := d.GetOk("result_output_file")
187+
if ok && output.(string) != "" {
188+
if e := tccommon.WriteToFile(output.(string), itemsList); e != nil {
189+
return e
190+
}
191+
}
192+
193+
return nil
194+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
Use this data source to query detailed information of Organization resource to share member
2+
3+
Example Usage
4+
5+
```hcl
6+
data "tencentcloud_organization_resource_to_share_member" "example" {
7+
area = "ap-guangzhou"
8+
search_key = "tf-example"
9+
type = "CVM"
10+
product_resource_ids = ["ins-69hg2ze0", "ins-0cxjwrog"]
11+
}
12+
```
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
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 TestAccTencentCloudOrganizationResourceToShareMemberDataSource_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+
Config: testAccOrganizationResourceToShareMemberDataSource,
20+
Check: resource.ComposeTestCheckFunc(
21+
tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_organization_resource_to_share_member.example"),
22+
resource.TestCheckResourceAttr("data.tencentcloud_organization_resource_to_share_member.example", "items.#", "1"),
23+
),
24+
}},
25+
})
26+
}
27+
28+
const testAccOrganizationResourceToShareMemberDataSource = `
29+
data "tencentcloud_organization_resource_to_share_member" "example" {
30+
area = "ap-guangzhou"
31+
search_key = "tf-example"
32+
type = "CVM"
33+
product_resource_ids = ["ins-69hg2ze0", "ins-0cxjwrog"]
34+
}
35+
`

tencentcloud/services/tco/service_tencentcloud_organization.go

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2257,3 +2257,78 @@ func (me *OrganizationService) DescribeRoleConfigurationProvisioningsByFilter(ct
22572257

22582258
return
22592259
}
2260+
2261+
func (me *OrganizationService) DescribeOrganizationResourceToShareMemberByFilter(ctx context.Context, param map[string]interface{}) (ret []*organization.ShareResourceToMember, errRet error) {
2262+
var (
2263+
logId = tccommon.GetLogId(ctx)
2264+
request = organization.NewDescribeResourceToShareMemberRequest()
2265+
response = organization.NewDescribeResourceToShareMemberResponse()
2266+
)
2267+
2268+
defer func() {
2269+
if errRet != nil {
2270+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
2271+
}
2272+
}()
2273+
2274+
for k, v := range param {
2275+
if k == "Area" {
2276+
request.Area = v.(*string)
2277+
}
2278+
2279+
if k == "SearchKey" {
2280+
request.SearchKey = v.(*string)
2281+
}
2282+
2283+
if k == "Type" {
2284+
request.Type = v.(*string)
2285+
}
2286+
2287+
if k == "ProductResourceIds" {
2288+
request.ProductResourceIds = v.([]*string)
2289+
}
2290+
}
2291+
2292+
var (
2293+
offset uint64 = 0
2294+
limit uint64 = 50
2295+
)
2296+
2297+
for {
2298+
request.Offset = &offset
2299+
request.Limit = &limit
2300+
errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
2301+
ratelimit.Check(request.GetAction())
2302+
result, e := me.client.UseOrganizationClient().DescribeResourceToShareMember(request)
2303+
if e != nil {
2304+
return tccommon.RetryError(e)
2305+
} else {
2306+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
2307+
}
2308+
2309+
if result == nil || result.Response == nil {
2310+
return resource.NonRetryableError(fmt.Errorf("Describe resource to share member failed, Response is nil."))
2311+
}
2312+
2313+
response = result
2314+
return nil
2315+
})
2316+
2317+
if errRet != nil {
2318+
return
2319+
}
2320+
2321+
if len(response.Response.Items) < 1 {
2322+
break
2323+
}
2324+
2325+
ret = append(ret, response.Response.Items...)
2326+
if len(response.Response.Items) < int(limit) {
2327+
break
2328+
}
2329+
2330+
offset += limit
2331+
}
2332+
2333+
return
2334+
}

vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)