Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changelog/3543.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
```release-note:new-resource
tencentcloud_organization_org_share_unit_member_v2
```

```release-note:enhancement
resource/tencentcloud_organization_org_share_unit_member: This resource has been deprecated, please use `tencentcloud_organization_org_share_unit_member_v2` instead.
```
1 change: 1 addition & 0 deletions tencentcloud/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -2351,6 +2351,7 @@ func Provider() *schema.Provider {
"tencentcloud_ha_vip_instance_attachment": vpc.ResourceTencentCloudHaVipInstanceAttachment(),
"tencentcloud_csip_risk_center": csip.ResourceTencentCloudCsipRiskCenter(),
"tencentcloud_organization_org_share_unit_member": tco.ResourceTencentCloudOrganizationOrgShareUnitMember(),
"tencentcloud_organization_org_share_unit_member_v2": tco.ResourceTencentCloudOrganizationOrgShareUnitMemberV2(),
"tencentcloud_organization_org_share_unit": tco.ResourceTencentCloudOrganizationOrgShareUnit(),
"tencentcloud_organization_org_share_unit_resource": tco.ResourceTencentCloudOrganizationOrgShareUnitResource(),
"tencentcloud_accept_join_share_unit_invitation_operation": tco.ResourceTencentCloudAcceptJoinShareUnitInvitationOperation(),
Expand Down
1 change: 1 addition & 0 deletions tencentcloud/provider.md
Original file line number Diff line number Diff line change
Expand Up @@ -1781,6 +1781,7 @@ tencentcloud_organization_policy_sub_account_attachment
tencentcloud_organization_quit_organization_operation
tencentcloud_organization_org_share_unit
tencentcloud_organization_org_share_unit_member
tencentcloud_organization_org_share_unit_member_v2
tencentcloud_organization_service_assign
tencentcloud_identity_center_user
tencentcloud_identity_center_group
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@ import (

func ResourceTencentCloudOrganizationOrgShareUnitMember() *schema.Resource {
return &schema.Resource{
Create: resourceTencentCloudOrganizationOrgShareUnitMemberCreate,
Read: resourceTencentCloudOrganizationOrgShareUnitMemberRead,
Delete: resourceTencentCloudOrganizationOrgShareUnitMemberDelete,
DeprecationMessage: "This resource has been deprecated in Terraform TencentCloud provider version 1.82.28, Please use `tencentcloud_organization_org_share_unit_member_v2` instead.",
Create: resourceTencentCloudOrganizationOrgShareUnitMemberCreate,
Read: resourceTencentCloudOrganizationOrgShareUnitMemberRead,
Delete: resourceTencentCloudOrganizationOrgShareUnitMemberDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
Provides a resource to create a organization org_share_unit_member
Provides a resource to create a Organization share unit member

~> **NOTE:** This resource has been deprecated in Terraform TencentCloud provider version 1.82.28, Please use `tencentcloud_organization_org_share_unit_member_v2` instead.

Example Usage

```hcl
resource "tencentcloud_organization_org_share_unit" "org_share_unit" {
name = "iac-test"
area = "ap-guangzhou"
description = "iac-test"
resource "tencentcloud_organization_org_share_unit" "example" {
name = "tf-example"
area = "ap-guangzhou"
description = "description."
}
resource "tencentcloud_organization_org_share_unit_member" "org_share_unit_member" {
unit_id = tencentcloud_organization_org_share_unit.org_share_unit.unit_id
area = tencentcloud_organization_org_share_unit.org_share_unit.area

resource "tencentcloud_organization_org_share_unit_member" "example" {
unit_id = tencentcloud_organization_org_share_unit.example.unit_id
area = tencentcloud_organization_org_share_unit.example.area
members {
share_member_uin=100035309479
share_member_uin = 100035309479
}
}
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,281 @@
package tco

import (
"context"
"fmt"
"log"
"strings"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331"

tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit"
)

// max length is 10
var batchSize = 10

func ResourceTencentCloudOrganizationOrgShareUnitMemberV2() *schema.Resource {
return &schema.Resource{
Create: resourceTencentCloudOrganizationOrgShareUnitMemberV2Create,
Read: resourceTencentCloudOrganizationOrgShareUnitMemberV2Read,
Update: resourceTencentCloudOrganizationOrgShareUnitMemberV2Update,
Delete: resourceTencentCloudOrganizationOrgShareUnitMemberV2Delete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Schema: map[string]*schema.Schema{
"unit_id": {
Required: true,
ForceNew: true,
Type: schema.TypeString,
Description: "Shared unit ID.",
},

"area": {
Required: true,
ForceNew: true,
Type: schema.TypeString,
Description: "Shared unit region.",
},

"members": {
Required: true,
Type: schema.TypeSet,
Description: "Shared member list.",
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"share_member_uin": {
Type: schema.TypeInt,
Required: true,
Description: "Member uin.",
},
},
},
},
},
}
}

func resourceTencentCloudOrganizationOrgShareUnitMemberV2Create(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_share_unit_member_v2.create")()
defer tccommon.InconsistentCheck(d, meta)()

var (
logId = tccommon.GetLogId(tccommon.ContextNil)
request = organization.NewAddShareUnitMembersRequest()
unitId string
area string
)

if v, ok := d.GetOk("unit_id"); ok {
request.UnitId = helper.String(v.(string))
unitId = v.(string)
}

if v, ok := d.GetOk("area"); ok {
request.Area = helper.String(v.(string))
area = v.(string)
}

orgShareUnitMembers := make([]*organization.ShareMember, 0, 10)
if v, ok := d.GetOk("members"); ok {
for _, item := range v.(*schema.Set).List() {
if dMap, ok := item.(map[string]interface{}); ok {
if v, ok := dMap["share_member_uin"]; ok {
shareMember := organization.ShareMember{}
shareMember.ShareMemberUin = helper.IntInt64(v.(int))
orgShareUnitMembers = append(orgShareUnitMembers, &shareMember)
}
}
}
}

for i := 0; i < len(orgShareUnitMembers); i += batchSize {
end := i + batchSize
if end > len(orgShareUnitMembers) {
end = len(orgShareUnitMembers)
}

batch := orgShareUnitMembers[i:end]
// clear Members value
request.Members = nil
for _, item := range batch {
shareMember := organization.ShareMember{}
shareMember.ShareMemberUin = item.ShareMemberUin
request.Members = append(request.Members, &shareMember)
}

err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
ratelimit.Check(request.GetAction())
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().AddShareUnitMembers(request)
if e != nil {
return tccommon.RetryError(e)
} else {
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
}

return nil
})

if err != nil {
log.Printf("[CRITAL]%s create organization share unit member failed, reason:%+v", logId, err)
return err
}
}

d.SetId(strings.Join([]string{unitId, area}, tccommon.FILED_SP))
return resourceTencentCloudOrganizationOrgShareUnitMemberV2Read(d, meta)
}

func resourceTencentCloudOrganizationOrgShareUnitMemberV2Read(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_share_unit_member_v2.read")()
defer tccommon.InconsistentCheck(d, meta)()

var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
service = OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
)

idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
if len(idSplit) != 2 {
return fmt.Errorf("id is broken,%s", d.Id())
}

unitId := idSplit[0]
area := idSplit[1]

orgShareUnitMember, err := service.DescribeOrganizationOrgShareUnitMemberV2ById(ctx, unitId, area)
if err != nil {
return err
}

if len(orgShareUnitMember) < 1 {
log.Printf("[WARN]%s resource `tencentcloud_organization_org_share_unit_member_v2` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
d.SetId("")
return nil
}

_ = d.Set("unit_id", unitId)
_ = d.Set("area", area)

tmpList := make([]interface{}, 0, len(orgShareUnitMember))
for _, item := range orgShareUnitMember {
shareMember := map[string]interface{}{
"share_member_uin": *item.ShareMemberUin,
}

tmpList = append(tmpList, shareMember)
}

_ = d.Set("members", tmpList)

return nil
}

func resourceTencentCloudOrganizationOrgShareUnitMemberV2Update(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_share_unit_member_v2.update")()
defer tccommon.InconsistentCheck(d, meta)()

var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
service = OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
)

idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
if len(idSplit) != 2 {
return fmt.Errorf("id is broken,%s", d.Id())
}

unitId := idSplit[0]
area := idSplit[1]

if d.HasChange("members") {
oldInterface, newInterface := d.GetChange("members")
oldInstances := oldInterface.(*schema.Set)
newInstances := newInterface.(*schema.Set)
remove := oldInstances.Difference(newInstances).List()
add := newInstances.Difference(oldInstances).List()

if len(add) > 0 {
tmpList := make([]*organization.ShareUnitMember, 0, len(add))
for _, item := range add {
if dMap, ok := item.(map[string]interface{}); ok {
if v, ok := dMap["share_member_uin"]; ok {
shareMember := organization.ShareUnitMember{}
shareMember.ShareMemberUin = helper.IntInt64(v.(int))
tmpList = append(tmpList, &shareMember)
}
}
}

err := service.AddOrganizationOrgShareUnitMemberV2ById(ctx, unitId, area, tmpList)
if err != nil {
return err
}
}

if len(remove) > 0 {
tmpList := make([]*organization.ShareUnitMember, 0, len(remove))
for _, item := range remove {
if dMap, ok := item.(map[string]interface{}); ok {
if v, ok := dMap["share_member_uin"]; ok {
shareMember := organization.ShareUnitMember{}
shareMember.ShareMemberUin = helper.IntInt64(v.(int))
tmpList = append(tmpList, &shareMember)
}
}
}

err := service.DeleteOrganizationOrgShareUnitMemberV2ById(ctx, unitId, area, tmpList)
if err != nil {
return err
}
}

}

return nil
}

func resourceTencentCloudOrganizationOrgShareUnitMemberV2Delete(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_organization_org_share_unit_member_v2.delete")()
defer tccommon.InconsistentCheck(d, meta)()

var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
service = OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
)

idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
if len(idSplit) != 2 {
return fmt.Errorf("id is broken,%s", d.Id())
}

unitId := idSplit[0]
area := idSplit[1]

// get all members
orgShareUnitMembers, err := service.DescribeOrganizationOrgShareUnitMemberV2ById(ctx, unitId, area)
if err != nil {
return err
}

if len(orgShareUnitMembers) < 1 {
log.Printf("[WARN]%s resource `tencentcloud_organization_org_share_unit_member_v2` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
return nil
}

// delete all members
if err := service.DeleteOrganizationOrgShareUnitMemberV2ById(ctx, unitId, area, orgShareUnitMembers); err != nil {
return err
}

return nil
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
Provides a resource to create a Organization share unit member

~> **NOTE:** ~> **NOTE:** This resource must exclusive in one share unit, do not declare additional members resources of this share unit elsewhere.

Example Usage

```hcl
resource "tencentcloud_organization_org_share_unit" "example" {
name = "tf-example"
area = "ap-guangzhou"
description = "description."
}

resource "tencentcloud_organization_org_share_unit_member_v2" "example" {
unit_id = tencentcloud_organization_org_share_unit.example.unit_id
area = tencentcloud_organization_org_share_unit.example.area
members {
share_member_uin = 100042257812
}

members {
share_member_uin = 100043990767
}

members {
share_member_uin = 100042234123
}
}
```

Import

Organization share unit member can be imported using the unitId#area, e.g.

```
terraform import tencentcloud_organization_org_share_unit_member_v2.example shareUnit-switt8i4s4#ap-guangzhou
```
Loading
Loading