Skip to content

Commit 443d799

Browse files
author
mikatong
committed
tco node and member support tag
1 parent e697d65 commit 443d799

6 files changed

+138
-23
lines changed

tencentcloud/services/tco/resource_tc_organization_org_member.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"log"
77

88
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
9+
svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag"
910

1011
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1112
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -130,6 +131,11 @@ func ResourceTencentCloudOrganizationOrgMember() *schema.Resource {
130131
Computed: true,
131132
Description: "The member name which is payment account on behalf.",
132133
},
134+
"tags": {
135+
Type: schema.TypeMap,
136+
Optional: true,
137+
Description: "Tag description list.",
138+
},
133139
},
134140
}
135141
}
@@ -179,6 +185,17 @@ func resourceTencentCloudOrganizationOrgMemberCreate(d *schema.ResourceData, met
179185
request.PayUin = helper.String(v.(string))
180186
}
181187

188+
if tags := helper.GetTags(d, "tags"); len(tags) > 0 {
189+
for k, v := range tags {
190+
tmpKey := k
191+
tmpValue := v
192+
request.Tags = append(request.Tags, &organization.Tag{
193+
TagKey: &tmpKey,
194+
TagValue: &tmpValue,
195+
})
196+
}
197+
}
198+
182199
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
183200
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().CreateOrganizationMember(request)
184201
if e != nil {
@@ -298,6 +315,14 @@ func resourceTencentCloudOrganizationOrgMemberRead(d *schema.ResourceData, meta
298315
_ = d.Set("pay_name", orgMember.PayName)
299316
}
300317

318+
if len(orgMember.Tags) != 0 {
319+
tags := make(map[string]string, len(orgMember.Tags))
320+
for _, tag := range orgMember.Tags {
321+
tags[*tag.TagKey] = *tag.TagValue
322+
}
323+
_ = d.Set("tags", tags)
324+
}
325+
301326
return nil
302327
}
303328

@@ -306,6 +331,7 @@ func resourceTencentCloudOrganizationOrgMemberUpdate(d *schema.ResourceData, met
306331
defer tccommon.InconsistentCheck(d, meta)()
307332

308333
logId := tccommon.GetLogId(tccommon.ContextNil)
334+
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
309335

310336
request := organization.NewMoveOrganizationNodeMembersRequest()
311337
updateRequest := organization.NewUpdateOrganizationMemberRequest()
@@ -402,6 +428,17 @@ func resourceTencentCloudOrganizationOrgMemberUpdate(d *schema.ResourceData, met
402428
log.Printf("[CRITAL]%s update organization orgMember failed, reason:%+v", logId, UpdateErr)
403429
return UpdateErr
404430
}
431+
432+
if d.HasChange("tags") {
433+
tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn()
434+
tagService := svctag.NewTagService(tcClient)
435+
oldTags, newTags := d.GetChange("tags")
436+
replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{}))
437+
resourceName := tccommon.BuildTagResourceName("organization", "member", tcClient.Region, orgMemberId)
438+
if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil {
439+
return err
440+
}
441+
}
405442
return resourceTencentCloudOrganizationOrgMemberRead(d, meta)
406443
}
407444

tencentcloud/services/tco/resource_tc_organization_org_member_test.go

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,31 @@ func TestAccTencentCloudOrganizationOrgMemberResource_basic(t *testing.T) {
1212
t.Parallel()
1313
resource.Test(t, resource.TestCase{
1414
PreCheck: func() {
15-
tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_ORGANIZATION)
15+
tcacctest.AccPreCheck(t)
1616
},
1717
Providers: tcacctest.AccProviders,
1818
Steps: []resource.TestStep{
1919
{
2020
Config: testAccOrganizationOrgMember,
2121
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_organization_org_member.org_member", "id"),
2222
resource.TestCheckResourceAttr("tencentcloud_organization_org_member.org_member", "name", "tf_example"),
23-
resource.TestCheckResourceAttr("tencentcloud_organization_org_member.org_member", "node_id", "59849"),
23+
resource.TestCheckResourceAttr("tencentcloud_organization_org_member.org_member", "node_id", "2023047"),
2424
resource.TestCheckResourceAttrSet("tencentcloud_organization_org_member.org_member", "permission_ids.#"),
2525
resource.TestCheckResourceAttr("tencentcloud_organization_org_member.org_member", "policy_type", "Financial"),
2626
resource.TestCheckResourceAttr("tencentcloud_organization_org_member.org_member", "remark", "for terraform test"),
27+
resource.TestCheckResourceAttr("tencentcloud_organization_org_member.org_member", "tags.tf-test1", "org_member1"),
28+
resource.TestCheckResourceAttr("tencentcloud_organization_org_member.org_member", "tags.tf-test2", "org_member2"),
2729
),
2830
},
2931
{
3032
Config: testAccOrganizationOrgMemberUpdate,
3133
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_organization_org_member.org_member", "id"),
3234
resource.TestCheckResourceAttr("tencentcloud_organization_org_member.org_member", "name", "tf_example_1"),
33-
resource.TestCheckResourceAttr("tencentcloud_organization_org_member.org_member", "node_id", "59849"),
35+
resource.TestCheckResourceAttr("tencentcloud_organization_org_member.org_member", "node_id", "2023047"),
3436
resource.TestCheckResourceAttrSet("tencentcloud_organization_org_member.org_member", "permission_ids.#"),
3537
resource.TestCheckResourceAttr("tencentcloud_organization_org_member.org_member", "policy_type", "Financial"),
3638
resource.TestCheckResourceAttr("tencentcloud_organization_org_member.org_member", "remark", "for terraform test"),
39+
resource.TestCheckResourceAttr("tencentcloud_organization_org_member.org_member", "tags.tf-test1", "org_member_update"),
3740
),
3841
},
3942
{
@@ -49,29 +52,36 @@ const testAccOrganizationOrgMember = `
4952
5053
resource "tencentcloud_organization_org_member" "org_member" {
5154
name = "tf_example"
52-
node_id = 59849
55+
node_id = 2023047
5356
permission_ids = [
5457
1,
5558
2,
56-
3,
5759
4,
60+
5,
5861
]
5962
policy_type = "Financial"
6063
remark = "for terraform test"
64+
tags = {
65+
"tf-test1" = "org_member1"
66+
"tf-test2" = "org_member2"
67+
}
6168
}
6269
`
6370
const testAccOrganizationOrgMemberUpdate = `
6471
6572
resource "tencentcloud_organization_org_member" "org_member" {
6673
name = "tf_example_1"
67-
node_id = 59849
74+
node_id = 2023047
6875
permission_ids = [
6976
1,
7077
2,
71-
3,
78+
4,
7279
]
7380
policy_type = "Financial"
7481
remark = "for terraform test"
82+
tags = {
83+
"tf-test1" = "org_member_update"
84+
}
7585
}
7686
7787
`

tencentcloud/services/tco/resource_tc_organization_org_node.go

Lines changed: 53 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"log"
77

88
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
9+
svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag"
910

1011
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1112
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -53,6 +54,11 @@ func ResourceTencentCloudOrganizationOrgNode() *schema.Resource {
5354
Computed: true,
5455
Description: "Node update time.",
5556
},
57+
"tags": {
58+
Type: schema.TypeMap,
59+
Optional: true,
60+
Description: "Tag description list.",
61+
},
5662
},
5763
}
5864
}
@@ -83,6 +89,16 @@ func resourceTencentCloudOrganizationOrgNodeCreate(d *schema.ResourceData, meta
8389
request.Remark = helper.String(v.(string))
8490
}
8591

92+
if tags := helper.GetTags(d, "tags"); len(tags) > 0 {
93+
for k, v := range tags {
94+
tmpKey := k
95+
tmpValue := v
96+
request.Tags = append(request.Tags, &organization.Tag{
97+
TagKey: &tmpKey,
98+
TagValue: &tmpValue,
99+
})
100+
}
101+
}
86102
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
87103
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().AddOrganizationNode(request)
88104
if e != nil {
@@ -148,6 +164,14 @@ func resourceTencentCloudOrganizationOrgNodeRead(d *schema.ResourceData, meta in
148164
_ = d.Set("update_time", orgNode.UpdateTime)
149165
}
150166

167+
if len(orgNode.Tags) != 0 {
168+
tags := make(map[string]string, len(orgNode.Tags))
169+
for _, tag := range orgNode.Tags {
170+
tags[*tag.TagKey] = *tag.TagValue
171+
}
172+
_ = d.Set("tags", tags)
173+
}
174+
151175
return nil
152176
}
153177

@@ -156,44 +180,60 @@ func resourceTencentCloudOrganizationOrgNodeUpdate(d *schema.ResourceData, meta
156180
defer tccommon.InconsistentCheck(d, meta)()
157181

158182
logId := tccommon.GetLogId(tccommon.ContextNil)
183+
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
159184
request := organization.NewUpdateOrganizationNodeRequest()
160185

161186
orgNodeId := d.Id()
162187

163188
request.NodeId = helper.StrToUint64Point(orgNodeId)
164189

190+
hasChange := false
165191
if d.HasChange("parent_node_id") {
166192
return fmt.Errorf("`parent_node_id` do not support change now.")
167193
}
168194

169195
if d.HasChange("name") {
170196
if v, ok := d.GetOk("name"); ok {
171197
request.Name = helper.String(v.(string))
198+
hasChange = true
172199
}
173200
}
174201

175202
if d.HasChange("remark") {
176203
if v, ok := d.GetOk("remark"); ok {
177204
request.Remark = helper.String(v.(string))
205+
hasChange = true
178206
}
179207
}
180208

181-
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
182-
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().UpdateOrganizationNode(request)
183-
if e != nil {
184-
return tccommon.RetryError(e)
185-
} else {
186-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
187-
logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
209+
if hasChange {
210+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
211+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().UpdateOrganizationNode(request)
212+
if e != nil {
213+
return tccommon.RetryError(e)
214+
} else {
215+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
216+
logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
217+
}
218+
return nil
219+
})
220+
221+
if err != nil {
222+
log.Printf("[CRITAL]%s create organization orgNode failed, reason:%+v", logId, err)
223+
return err
188224
}
189-
return nil
190-
})
191-
192-
if err != nil {
193-
log.Printf("[CRITAL]%s create organization orgNode failed, reason:%+v", logId, err)
194-
return err
195225
}
196226

227+
if d.HasChange("tags") {
228+
tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn()
229+
tagService := svctag.NewTagService(tcClient)
230+
oldTags, newTags := d.GetChange("tags")
231+
replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{}))
232+
resourceName := tccommon.BuildTagResourceName("organization", "node", tcClient.Region, orgNodeId)
233+
if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil {
234+
return err
235+
}
236+
}
197237
return resourceTencentCloudOrganizationOrgNodeRead(d, meta)
198238
}
199239

tencentcloud/services/tco/resource_tc_organization_org_node_test.go

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,25 @@ func TestAccTencentCloudOrganizationOrgNode_basic(t *testing.T) {
1212
t.Parallel()
1313

1414
resource.Test(t, resource.TestCase{
15-
PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SMS) },
15+
PreCheck: func() { tcacctest.AccPreCheck(t) },
1616
Providers: tcacctest.AccProviders,
1717
Steps: []resource.TestStep{
1818
{
1919
Config: testAccOrganizationOrgNode,
2020
Check: resource.ComposeTestCheckFunc(
2121
resource.TestCheckResourceAttrSet("tencentcloud_organization_org_node.org_node", "id"),
22-
resource.TestCheckResourceAttr("tencentcloud_organization_org_node.org_node", "parent_node_id", "2003721"),
22+
resource.TestCheckResourceAttr("tencentcloud_organization_org_node.org_node", "parent_node_id", "2014254"),
2323
resource.TestCheckResourceAttr("tencentcloud_organization_org_node.org_node", "name", "terraform_test"),
2424
resource.TestCheckResourceAttr("tencentcloud_organization_org_node.org_node", "remark", "for terraform test"),
25+
resource.TestCheckResourceAttr("tencentcloud_organization_org_node.org_node", "tags.tf-test1", "org_node1"),
26+
resource.TestCheckResourceAttr("tencentcloud_organization_org_node.org_node", "tags.tf-test2", "org_node2"),
27+
),
28+
},
29+
{
30+
Config: testAccOrganizationOrgNodeUpdate,
31+
Check: resource.ComposeTestCheckFunc(
32+
resource.TestCheckResourceAttrSet("tencentcloud_organization_org_node.org_node", "id"),
33+
resource.TestCheckResourceAttr("tencentcloud_organization_org_node.org_node", "tags.tf-test1", "org_node_update"),
2534
),
2635
},
2736
{
@@ -37,8 +46,25 @@ const testAccOrganizationOrgNode = `
3746
3847
resource "tencentcloud_organization_org_node" "org_node" {
3948
name = "terraform_test"
40-
parent_node_id = 2003721
49+
parent_node_id = 2014254
50+
remark = "for terraform test"
51+
tags = {
52+
"tf-test1" = "org_node1"
53+
"tf-test2" = "org_node2"
54+
}
55+
}
56+
57+
`
58+
59+
const testAccOrganizationOrgNodeUpdate = `
60+
61+
resource "tencentcloud_organization_org_node" "org_node" {
62+
name = "terraform_test"
63+
parent_node_id = 2014254
4164
remark = "for terraform test"
65+
tags = {
66+
"tf-test1" = "org_node_update"
67+
}
4268
}
4369
4470
`

website/docs/r/organization_org_member.html.markdown

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ The following arguments are supported:
3939
* `pay_uin` - (Optional, String) The uin which is payment account on behalf.When `PermissionIds` contains 7, is required.
4040
* `record_id` - (Optional, Int) Create member record ID.When create failed and needs to be recreated, is required.
4141
* `remark` - (Optional, String) Notes.
42+
* `tags` - (Optional, Map) Tag description list.
4243

4344
## Attributes Reference
4445

website/docs/r/organization_org_node.html.markdown

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ The following arguments are supported:
2828
* `name` - (Required, String) Node name.
2929
* `parent_node_id` - (Required, Int) Parent node ID.
3030
* `remark` - (Optional, String) Notes.
31+
* `tags` - (Optional, Map) Tag description list.
3132

3233
## Attributes Reference
3334

0 commit comments

Comments
 (0)