diff --git a/.changelog/3543.txt b/.changelog/3543.txt new file mode 100644 index 0000000000..b2cee7e1d8 --- /dev/null +++ b/.changelog/3543.txt @@ -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. +``` diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index b8b1d43cdf..640a880929 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -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(), diff --git a/tencentcloud/provider.md b/tencentcloud/provider.md index 7d90d39fb0..75e9013e10 100644 --- a/tencentcloud/provider.md +++ b/tencentcloud/provider.md @@ -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 diff --git a/tencentcloud/services/tco/resource_tc_organization_org_share_unit_member.go b/tencentcloud/services/tco/resource_tc_organization_org_share_unit_member.go index ba45a60ef3..24eacce3b7 100644 --- a/tencentcloud/services/tco/resource_tc_organization_org_share_unit_member.go +++ b/tencentcloud/services/tco/resource_tc_organization_org_share_unit_member.go @@ -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, }, diff --git a/tencentcloud/services/tco/resource_tc_organization_org_share_unit_member.md b/tencentcloud/services/tco/resource_tc_organization_org_share_unit_member.md index b162810e1a..ae1af4884a 100644 --- a/tencentcloud/services/tco/resource_tc_organization_org_share_unit_member.md +++ b/tencentcloud/services/tco/resource_tc_organization_org_share_unit_member.md @@ -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 } } ``` diff --git a/tencentcloud/services/tco/resource_tc_organization_org_share_unit_member_v2.go b/tencentcloud/services/tco/resource_tc_organization_org_share_unit_member_v2.go new file mode 100644 index 0000000000..3e0b528ed9 --- /dev/null +++ b/tencentcloud/services/tco/resource_tc_organization_org_share_unit_member_v2.go @@ -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 +} diff --git a/tencentcloud/services/tco/resource_tc_organization_org_share_unit_member_v2.md b/tencentcloud/services/tco/resource_tc_organization_org_share_unit_member_v2.md new file mode 100644 index 0000000000..0d2881d681 --- /dev/null +++ b/tencentcloud/services/tco/resource_tc_organization_org_share_unit_member_v2.md @@ -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 +``` diff --git a/tencentcloud/services/tco/resource_tc_organization_org_share_unit_member_v2_test.go b/tencentcloud/services/tco/resource_tc_organization_org_share_unit_member_v2_test.go new file mode 100644 index 0000000000..848ecedc5d --- /dev/null +++ b/tencentcloud/services/tco/resource_tc_organization_org_share_unit_member_v2_test.go @@ -0,0 +1,102 @@ +package tco_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" +) + +func TestAccTencentCloudOrganizationOrgShareUnitMemberV2Resource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccOrganizationOrgShareUnitMemberV2, + Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_organization_org_share_unit_member_v2.example", "id"), + resource.TestCheckResourceAttrSet("tencentcloud_organization_org_share_unit_member_v2.example", "unit_id"), + resource.TestCheckResourceAttrSet("tencentcloud_organization_org_share_unit_member_v2.example", "area"), + resource.TestCheckResourceAttrSet("tencentcloud_organization_org_share_unit_member_v2.example", "members.#"), + ), + }, + { + Config: testAccOrganizationOrgShareUnitMemberV2Update, + Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_organization_org_share_unit_member_v2.example", "id"), + resource.TestCheckResourceAttrSet("tencentcloud_organization_org_share_unit_member_v2.example", "unit_id"), + resource.TestCheckResourceAttrSet("tencentcloud_organization_org_share_unit_member_v2.example", "area"), + resource.TestCheckResourceAttrSet("tencentcloud_organization_org_share_unit_member_v2.example", "members.#"), + ), + }, + { + ResourceName: "tencentcloud_organization_org_share_unit_member_v2.example", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +const testAccOrganizationOrgShareUnitMemberV2 = ` +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 = 100040906282 + } + + members { + share_member_uin = 100043984945 + } + + members { + share_member_uin = 100043985088 + } + + members { + share_member_uin = 100042287843 + } + + members { + share_member_uin = 100042287853 + } +} +` + +const testAccOrganizationOrgShareUnitMemberV2Update = ` +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 = 100038833157 + } + + members { + share_member_uin = 100043984945 + } + + members { + share_member_uin = 100042287843 + } + + members { + share_member_uin = 100042287853 + } +} +` diff --git a/tencentcloud/services/tco/service_tencentcloud_organization.go b/tencentcloud/services/tco/service_tencentcloud_organization.go index 63d2879d76..393f781fc2 100644 --- a/tencentcloud/services/tco/service_tencentcloud_organization.go +++ b/tencentcloud/services/tco/service_tencentcloud_organization.go @@ -927,6 +927,62 @@ func (me *OrganizationService) DescribeOrganizationOrgShareUnitMemberById(ctx co return } +func (me *OrganizationService) DescribeOrganizationOrgShareUnitMemberV2ById(ctx context.Context, unitId, area string) (orgShareUnitMembers []*organization.ShareUnitMember, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := organization.NewDescribeShareUnitMembersRequest() + response := organization.NewDescribeShareUnitMembersResponse() + request.UnitId = &unitId + request.Area = &area + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + var ( + offset uint64 = 0 + limit uint64 = 50 + ) + + for { + request.Offset = &offset + request.Limit = &limit + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, e := me.client.UseOrganizationClient().DescribeShareUnitMembers(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()) + } + + response = result + return nil + }) + + if err != nil { + errRet = err + return + } + + if response == nil || len(response.Response.Items) < 1 { + break + } + + orgShareUnitMembers = append(orgShareUnitMembers, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + func (me *OrganizationService) DeleteOrganizationOrgShareUnitMemberById(ctx context.Context, unitId, area, shareMemberUins string) (errRet error) { logId := tccommon.GetLogId(ctx) @@ -960,6 +1016,104 @@ func (me *OrganizationService) DeleteOrganizationOrgShareUnitMemberById(ctx cont return } +func (me *OrganizationService) DeleteOrganizationOrgShareUnitMemberV2ById(ctx context.Context, unitId, area string, orgShareUnitMembers []*organization.ShareUnitMember) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := organization.NewDeleteShareUnitMembersRequest() + request.UnitId = &unitId + request.Area = &area + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + 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 := me.client.UseOrganizationClient().DeleteShareUnitMembers(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 { + errRet = err + return + } + } + + return +} + +func (me *OrganizationService) AddOrganizationOrgShareUnitMemberV2ById(ctx context.Context, unitId, area string, orgShareUnitMembers []*organization.ShareUnitMember) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := organization.NewAddShareUnitMembersRequest() + request.UnitId = &unitId + request.Area = &area + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + 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 := me.client.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 { + errRet = err + return + } + } + + return +} + func (me *OrganizationService) DescribeOrganizationOrgShareAreaByFilter(ctx context.Context, param map[string]interface{}) (orgShareArea []*organization.ShareArea, errRet error) { var ( logId = tccommon.GetLogId(ctx) diff --git a/website/docs/r/organization_org_share_unit_member.html.markdown b/website/docs/r/organization_org_share_unit_member.html.markdown index 8ff3b7aace..859ace080d 100644 --- a/website/docs/r/organization_org_share_unit_member.html.markdown +++ b/website/docs/r/organization_org_share_unit_member.html.markdown @@ -4,24 +4,27 @@ layout: "tencentcloud" page_title: "TencentCloud: tencentcloud_organization_org_share_unit_member" sidebar_current: "docs-tencentcloud-resource-organization_org_share_unit_member" description: |- - Provides a resource to create a organization org_share_unit_member + Provides a resource to create a Organization share unit member --- # tencentcloud_organization_org_share_unit_member -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" +resource "tencentcloud_organization_org_share_unit" "example" { + name = "tf-example" area = "ap-guangzhou" - description = "iac-test" + 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 } diff --git a/website/docs/r/organization_org_share_unit_member_v2.html.markdown b/website/docs/r/organization_org_share_unit_member_v2.html.markdown new file mode 100644 index 0000000000..ea87df7550 --- /dev/null +++ b/website/docs/r/organization_org_share_unit_member_v2.html.markdown @@ -0,0 +1,69 @@ +--- +subcategory: "Tencent Cloud Organization (TCO)" +layout: "tencentcloud" +page_title: "TencentCloud: tencentcloud_organization_org_share_unit_member_v2" +sidebar_current: "docs-tencentcloud-resource-organization_org_share_unit_member_v2" +description: |- + Provides a resource to create a Organization share unit member +--- + +# tencentcloud_organization_org_share_unit_member_v2 + +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 + } +} +``` + +## Argument Reference + +The following arguments are supported: + +* `area` - (Required, String, ForceNew) Shared unit region. +* `members` - (Required, Set) Shared member list. +* `unit_id` - (Required, String, ForceNew) Shared unit ID. + +The `members` object supports the following: + +* `share_member_uin` - (Required, Int) Member uin. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `id` - ID of the resource. + + + +## 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 +``` + diff --git a/website/tencentcloud.erb b/website/tencentcloud.erb index 1032d09e99..d7db278eb0 100644 --- a/website/tencentcloud.erb +++ b/website/tencentcloud.erb @@ -4837,6 +4837,9 @@
  • tencentcloud_organization_org_share_unit_member
  • +
  • + tencentcloud_organization_org_share_unit_member_v2 +
  • tencentcloud_organization_org_share_unit_resource