From 9b12be669c9e01981490db4f1ec1bd7e39da98f5 Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Fri, 22 Nov 2024 17:06:49 +0800 Subject: [PATCH 1/2] add --- tencentcloud/connectivity/client.go | 14 ++ tencentcloud/provider.go | 2 + .../cam/data_source_tc_cam_role_detail.go | 226 ++++++++++++++++++ .../cam/data_source_tc_cam_role_detail.md | 19 ++ ...ata_source_tc_cam_role_detail_extension.go | 1 + .../data_source_tc_cam_role_detail_test.go | 31 +++ .../cam/data_source_tc_cam_sub_accounts.go | 175 ++++++++++++++ .../cam/data_source_tc_cam_sub_accounts.md | 9 + ...ta_source_tc_cam_sub_accounts_extension.go | 1 + .../data_source_tc_cam_sub_accounts_test.go | 31 +++ .../services/cam/data_source_tc_user_info.go | 6 +- .../services/cam/service_tencentcloud_cam.go | 73 ++++++ ...urce_tc_kubernetes_cluster_common_names.go | 39 ++- ...urce_tc_kubernetes_cluster_common_names.md | 17 +- ...bernetes_cluster_common_names_extension.go | 26 -- .../services/tke/service_tencentcloud_tke.go | 10 +- ...ernetes_cluster_common_names.html.markdown | 20 +- 17 files changed, 648 insertions(+), 52 deletions(-) create mode 100644 tencentcloud/services/cam/data_source_tc_cam_role_detail.go create mode 100644 tencentcloud/services/cam/data_source_tc_cam_role_detail.md create mode 100644 tencentcloud/services/cam/data_source_tc_cam_role_detail_extension.go create mode 100644 tencentcloud/services/cam/data_source_tc_cam_role_detail_test.go create mode 100644 tencentcloud/services/cam/data_source_tc_cam_sub_accounts.go create mode 100644 tencentcloud/services/cam/data_source_tc_cam_sub_accounts.md create mode 100644 tencentcloud/services/cam/data_source_tc_cam_sub_accounts_extension.go create mode 100644 tencentcloud/services/cam/data_source_tc_cam_sub_accounts_test.go diff --git a/tencentcloud/connectivity/client.go b/tencentcloud/connectivity/client.go index 1d0aa26146..e1da846b29 100644 --- a/tencentcloud/connectivity/client.go +++ b/tencentcloud/connectivity/client.go @@ -223,6 +223,7 @@ type TencentCloudClient struct { cloudauditv20190319Conn *audit.Client privatednsv20201028Conn *privatedns.Client wafv20180125Conn *waf.Client + camv20190116Conn *cam.Client } // NewClientProfile returns a new ClientProfile @@ -1957,3 +1958,16 @@ func (me *TencentCloudClient) UseWafV20180125Client() *waf.Client { return me.wafv20180125Conn } + +// UseCamV20190116Client return CAM client for service +func (me *TencentCloudClient) UseCamV20190116Client() *cam.Client { + if me.camv20190116Conn != nil { + return me.camv20190116Conn + } + cpf := me.NewClientProfile(300) + cpf.Language = "zh-CN" + me.camv20190116Conn, _ = cam.NewClient(me.Credential, me.Region, cpf) + me.camv20190116Conn.WithHttpTransport(&LogRoundTripper{}) + + return me.camv20190116Conn +} diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index eaa04bdb48..5562c4006f 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -645,6 +645,8 @@ func Provider() *schema.Provider { "tencentcloud_cam_account_summary": cam.DataSourceTencentCloudCamAccountSummary(), "tencentcloud_cam_oidc_config": cam.DataSourceTencentCloudCamOidcConfig(), "tencentcloud_user_info": cam.DataSourceTencentCloudUserInfo(), + "tencentcloud_cam_sub_accounts": cam.DataSourceTencentCloudCamSubAccounts(), + "tencentcloud_cam_role_detail": cam.DataSourceTencentCloudCamRoleDetail(), "tencentcloud_cdn_domains": cdn.DataSourceTencentCloudCdnDomains(), "tencentcloud_cdn_domain_verifier": cdn.DataSourceTencentCloudCdnDomainVerifyRecord(), "tencentcloud_scf_functions": scf.DataSourceTencentCloudScfFunctions(), diff --git a/tencentcloud/services/cam/data_source_tc_cam_role_detail.go b/tencentcloud/services/cam/data_source_tc_cam_role_detail.go new file mode 100644 index 0000000000..eb3e925ca1 --- /dev/null +++ b/tencentcloud/services/cam/data_source_tc_cam_role_detail.go @@ -0,0 +1,226 @@ +// Code generated by iacg; DO NOT EDIT. +package cam + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + camv20190116 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func DataSourceTencentCloudCamRoleDetail() *schema.Resource { + return &schema.Resource{ + Read: dataSourceTencentCloudCamRoleDetailRead, + Schema: map[string]*schema.Schema{ + "role_id": { + Type: schema.TypeString, + Optional: true, + Description: "Role ID, used to specify role. Input either `RoleId` or `RoleName`", + }, + + "role_name": { + Type: schema.TypeString, + Optional: true, + Description: "Role name, used to specify role. Input either `RoleId` or `RoleName`", + }, + + "role_info": { + Type: schema.TypeList, + Computed: true, + Description: "Role details", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "role_id": { + Type: schema.TypeString, + Required: true, + Description: "Role ID", + }, + "role_name": { + Type: schema.TypeString, + Required: true, + Description: "Role name", + }, + "policy_document": { + Type: schema.TypeString, + Required: true, + Description: "Role policy document", + }, + "description": { + Type: schema.TypeString, + Required: true, + Description: "Role description", + }, + "add_time": { + Type: schema.TypeString, + Required: true, + Description: "Time role created", + }, + "update_time": { + Type: schema.TypeString, + Required: true, + Description: "Time role last updated", + }, + "console_login": { + Type: schema.TypeInt, + Required: true, + Description: "If login is allowed for the role", + }, + "role_type": { + Type: schema.TypeString, + Required: true, + Description: "User role. Valid values: `user`, `system`, `service_linked`\nNote: this field may return null, indicating that no valid values can be obtained.", + }, + "session_duration": { + Type: schema.TypeInt, + Required: true, + Description: "Valid period\nNote: this field may return null, indicating that no valid values can be obtained.", + }, + "deletion_task_id": { + Type: schema.TypeString, + Required: true, + Description: "Task identifier for deleting a service-linked role \nNote: this field may return null, indicating that no valid values can be obtained.", + }, + "tags": { + Type: schema.TypeList, + Required: true, + Description: "Tags.\nNote: This field may return `null`, indicating that no valid values can be obtained.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "key": { + Type: schema.TypeString, + Required: true, + Description: "Tag key.", + }, + "value": { + Type: schema.TypeString, + Required: true, + Description: "Tag value.", + }, + }, + }, + }, + }, + }, + }, + + "result_output_file": { + Type: schema.TypeString, + Optional: true, + Description: "Used to save results.", + }, + }, + } +} + +func dataSourceTencentCloudCamRoleDetailRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("data_source.tencentcloud_cam_role_detail.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(nil) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + paramMap := make(map[string]interface{}) + if v, ok := d.GetOk("role_id"); ok { + paramMap["RoleId"] = helper.String(v.(string)) + } + + if v, ok := d.GetOk("role_name"); ok { + paramMap["RoleName"] = helper.String(v.(string)) + } + + var respData *camv20190116.GetRoleResponseParams + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeCamRoleDetailByFilter(ctx, paramMap) + if e != nil { + return tccommon.RetryError(e) + } + respData = result + return nil + }) + if err != nil { + return err + } + + var roleId string + roleInfoMap := map[string]interface{}{} + + if respData.RoleInfo != nil { + if respData.RoleInfo.RoleId != nil { + roleInfoMap["role_id"] = respData.RoleInfo.RoleId + roleId = *respData.RoleInfo.RoleId + } + + if respData.RoleInfo.RoleName != nil { + roleInfoMap["role_name"] = respData.RoleInfo.RoleName + } + + if respData.RoleInfo.PolicyDocument != nil { + roleInfoMap["policy_document"] = respData.RoleInfo.PolicyDocument + } + + if respData.RoleInfo.Description != nil { + roleInfoMap["description"] = respData.RoleInfo.Description + } + + if respData.RoleInfo.AddTime != nil { + roleInfoMap["add_time"] = respData.RoleInfo.AddTime + } + + if respData.RoleInfo.UpdateTime != nil { + roleInfoMap["update_time"] = respData.RoleInfo.UpdateTime + } + + if respData.RoleInfo.ConsoleLogin != nil { + roleInfoMap["console_login"] = respData.RoleInfo.ConsoleLogin + } + + if respData.RoleInfo.RoleType != nil { + roleInfoMap["role_type"] = respData.RoleInfo.RoleType + } + + if respData.RoleInfo.SessionDuration != nil { + roleInfoMap["session_duration"] = respData.RoleInfo.SessionDuration + } + + if respData.RoleInfo.DeletionTaskId != nil { + roleInfoMap["deletion_task_id"] = respData.RoleInfo.DeletionTaskId + } + + tagsList := make([]map[string]interface{}, 0, len(respData.RoleInfo.Tags)) + if respData.RoleInfo.Tags != nil { + for _, tags := range respData.RoleInfo.Tags { + tagsMap := map[string]interface{}{} + + if tags.Key != nil { + tagsMap["key"] = tags.Key + } + + if tags.Value != nil { + tagsMap["value"] = tags.Value + } + + tagsList = append(tagsList, tagsMap) + } + + roleInfoMap["tags"] = tagsList + } + _ = d.Set("role_info", []interface{}{roleInfoMap}) + } + + d.SetId(roleId) + + output, ok := d.GetOk("result_output_file") + if ok && output.(string) != "" { + if e := tccommon.WriteToFile(output.(string), roleInfoMap); e != nil { + return e + } + } + + return nil +} diff --git a/tencentcloud/services/cam/data_source_tc_cam_role_detail.md b/tencentcloud/services/cam/data_source_tc_cam_role_detail.md new file mode 100644 index 0000000000..64978e86b8 --- /dev/null +++ b/tencentcloud/services/cam/data_source_tc_cam_role_detail.md @@ -0,0 +1,19 @@ +Use this data source to query detailed information of cam role detail + +Example Usage + +Query cam role detail by role ID + +```hcl +data "tencentcloud_cam_role_detail" "example" { + role_id = "4611686018441060141" +} +``` + +Query cam role detail by role name + +```hcl +data "tencentcloud_cam_role_detail" "example" { + role_name = "tf-example" +} +``` \ No newline at end of file diff --git a/tencentcloud/services/cam/data_source_tc_cam_role_detail_extension.go b/tencentcloud/services/cam/data_source_tc_cam_role_detail_extension.go new file mode 100644 index 0000000000..833da98099 --- /dev/null +++ b/tencentcloud/services/cam/data_source_tc_cam_role_detail_extension.go @@ -0,0 +1 @@ +package cam diff --git a/tencentcloud/services/cam/data_source_tc_cam_role_detail_test.go b/tencentcloud/services/cam/data_source_tc_cam_role_detail_test.go new file mode 100644 index 0000000000..428a48ed7f --- /dev/null +++ b/tencentcloud/services/cam/data_source_tc_cam_role_detail_test.go @@ -0,0 +1,31 @@ +package cam_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" +) + +func TestAccTencentCloudNeedFixCamRoleDetailDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{{ + Config: testAccCamRoleDetailDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cam_role_detail.example"), + ), + }}, + }) +} + +const testAccCamRoleDetailDataSource = ` +data "tencentcloud_cam_role_detail" "example" { + role_id = "4611686018441060141" +} +` diff --git a/tencentcloud/services/cam/data_source_tc_cam_sub_accounts.go b/tencentcloud/services/cam/data_source_tc_cam_sub_accounts.go new file mode 100644 index 0000000000..671d40516f --- /dev/null +++ b/tencentcloud/services/cam/data_source_tc_cam_sub_accounts.go @@ -0,0 +1,175 @@ +// Code generated by iacg; DO NOT EDIT. +package cam + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + camv20190116 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func DataSourceTencentCloudCamSubAccounts() *schema.Resource { + return &schema.Resource{ + Read: dataSourceTencentCloudCamSubAccountsRead, + Schema: map[string]*schema.Schema{ + "filter_sub_account_uin": { + Type: schema.TypeSet, + Required: true, + Description: "List of sub-user UINs. Up to 50 UINs are supported.", + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, + + "sub_accounts": { + Type: schema.TypeList, + Computed: true, + Description: "Sub-user list.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "uin": { + Type: schema.TypeInt, + Required: true, + Description: "Sub-user ID", + }, + "name": { + Type: schema.TypeString, + Required: true, + Description: "Sub-user name", + }, + "uid": { + Type: schema.TypeInt, + Required: true, + Description: "Sub-user UID. UID is the unique identifier of a user who is a message recipient, while UIN is a unique identifier of a user.", + }, + "remark": { + Type: schema.TypeString, + Required: true, + Description: "Sub-user remarks", + }, + "create_time": { + Type: schema.TypeString, + Required: true, + Description: "Creation time\nNote: this field may return null, indicating that no valid values can be obtained.", + }, + "user_type": { + Type: schema.TypeInt, + Required: true, + Description: "User type (1: root account; 2: sub-user; 3: WeCom sub-user; 4: collaborator; 5: message recipient)", + }, + "last_login_ip": { + Type: schema.TypeString, + Required: true, + }, + "last_login_time": { + Type: schema.TypeString, + Required: true, + }, + }, + }, + }, + + "result_output_file": { + Type: schema.TypeString, + Optional: true, + Description: "Used to save results.", + }, + }, + } +} + +func dataSourceTencentCloudCamSubAccountsRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("data_source.tencentcloud_cam_sub_accounts.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(nil) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + paramMap := make(map[string]interface{}) + if v, ok := d.GetOk("filter_sub_account_uin"); ok { + filterSubAccountUinList := []*uint64{} + filterSubAccountUinSet := v.(*schema.Set).List() + for i := range filterSubAccountUinSet { + filterSubAccountUin := filterSubAccountUinSet[i].(int) + filterSubAccountUinList = append(filterSubAccountUinList, helper.IntUint64(filterSubAccountUin)) + } + paramMap["FilterSubAccountUin"] = filterSubAccountUinList + } + + var respData []*camv20190116.SubAccountUser + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeCamSubAccountsByFilter(ctx, paramMap) + if e != nil { + return tccommon.RetryError(e) + } + respData = result + return nil + }) + if err != nil { + return err + } + + var ids []string + subAccountsList := make([]map[string]interface{}, 0, len(respData)) + if respData != nil { + for _, subAccounts := range respData { + subAccountsMap := map[string]interface{}{} + + var uin uint64 + if subAccounts.Uin != nil { + subAccountsMap["uin"] = subAccounts.Uin + uin = *subAccounts.Uin + } + + if subAccounts.Name != nil { + subAccountsMap["name"] = subAccounts.Name + } + + if subAccounts.Uid != nil { + subAccountsMap["uid"] = subAccounts.Uid + } + + if subAccounts.Remark != nil { + subAccountsMap["remark"] = subAccounts.Remark + } + + if subAccounts.CreateTime != nil { + subAccountsMap["create_time"] = subAccounts.CreateTime + } + + if subAccounts.UserType != nil { + subAccountsMap["user_type"] = subAccounts.UserType + } + + if subAccounts.LastLoginIp != nil { + subAccountsMap["last_login_ip"] = subAccounts.LastLoginIp + } + + if subAccounts.LastLoginTime != nil { + subAccountsMap["last_login_time"] = subAccounts.LastLoginTime + } + + ids = append(ids, helper.UInt64ToStr(uin)) + subAccountsList = append(subAccountsList, subAccountsMap) + } + + _ = d.Set("sub_accounts", subAccountsList) + } + + d.SetId(helper.DataResourceIdsHash(ids)) + + output, ok := d.GetOk("result_output_file") + if ok && output.(string) != "" { + if e := tccommon.WriteToFile(output.(string), subAccountsList); e != nil { + return e + } + } + + return nil +} diff --git a/tencentcloud/services/cam/data_source_tc_cam_sub_accounts.md b/tencentcloud/services/cam/data_source_tc_cam_sub_accounts.md new file mode 100644 index 0000000000..6d6ac69c9f --- /dev/null +++ b/tencentcloud/services/cam/data_source_tc_cam_sub_accounts.md @@ -0,0 +1,9 @@ +Use this data source to query detailed information of cam sub accounts + +Example Usage + +```hcl +data "tencentcloud_cam_sub_accounts" "example" { + filter_sub_account_uin = ["100037718139"] +} +``` diff --git a/tencentcloud/services/cam/data_source_tc_cam_sub_accounts_extension.go b/tencentcloud/services/cam/data_source_tc_cam_sub_accounts_extension.go new file mode 100644 index 0000000000..833da98099 --- /dev/null +++ b/tencentcloud/services/cam/data_source_tc_cam_sub_accounts_extension.go @@ -0,0 +1 @@ +package cam diff --git a/tencentcloud/services/cam/data_source_tc_cam_sub_accounts_test.go b/tencentcloud/services/cam/data_source_tc_cam_sub_accounts_test.go new file mode 100644 index 0000000000..a8a3e8053c --- /dev/null +++ b/tencentcloud/services/cam/data_source_tc_cam_sub_accounts_test.go @@ -0,0 +1,31 @@ +package cam_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" +) + +func TestAccTencentCloudNeedFixCamSubAccountsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{{ + Config: testAccCamSubAccountsDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cam_sub_accounts.example"), + ), + }}, + }) +} + +const testAccCamSubAccountsDataSource = ` +data "tencentcloud_cam_sub_accounts" "example" { + filter_sub_account_uin = ["100037718139"] +} +` diff --git a/tencentcloud/services/cam/data_source_tc_user_info.go b/tencentcloud/services/cam/data_source_tc_user_info.go index 90eaadb8fd..0353fff1ca 100644 --- a/tencentcloud/services/cam/data_source_tc_user_info.go +++ b/tencentcloud/services/cam/data_source_tc_user_info.go @@ -22,10 +22,6 @@ import ( func DataSourceTencentCloudUserInfo() *schema.Resource { return &schema.Resource{ Read: datasourceTencentCloudUserInfoRead, - - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, Schema: map[string]*schema.Schema{ "app_id": { Type: schema.TypeString, @@ -44,11 +40,13 @@ func DataSourceTencentCloudUserInfo() *schema.Resource { Computed: true, Description: "Current account OwnerUIN.", }, + "name": { Type: schema.TypeString, Computed: true, Description: "Current account Name. NOTE: only support subaccount.", }, + "result_output_file": { Type: schema.TypeString, Optional: true, diff --git a/tencentcloud/services/cam/service_tencentcloud_cam.go b/tencentcloud/services/cam/service_tencentcloud_cam.go index 8c0c7a2fba..bb1cb7b733 100644 --- a/tencentcloud/services/cam/service_tencentcloud_cam.go +++ b/tencentcloud/services/cam/service_tencentcloud_cam.go @@ -1965,3 +1965,76 @@ func (me *CamService) DescribeCamGroupUserAccountByFilter(ctx context.Context, p GroupUserAccount = result return } + +func (me *CamService) DescribeCamSubAccountsByFilter(ctx context.Context, param map[string]interface{}) (ret []*cam.SubAccountUser, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cam.NewDescribeSubAccountsRequest() + ) + + 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 k, v := range param { + if k == "FilterSubAccountUin" { + request.FilterSubAccountUin = v.([]*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCamV20190116Client().DescribeSubAccounts(request) + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.SubAccounts) < 1 { + return + } + + ret = response.Response.SubAccounts + return +} + +func (me *CamService) DescribeCamRoleDetailByFilter(ctx context.Context, param map[string]interface{}) (ret *cam.GetRoleResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cam.NewGetRoleRequest() + ) + + 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 k, v := range param { + if k == "RoleId" { + request.RoleId = v.(*string) + } + if k == "RoleName" { + request.RoleName = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCamV20190116Client().GetRole(request) + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || response.Response == nil { + return + } + + ret = response.Response + return +} diff --git a/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_common_names.go b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_common_names.go index 4f2f81b5e2..b6175b566c 100644 --- a/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_common_names.go +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_common_names.go @@ -3,7 +3,6 @@ package tke import ( "context" - "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -16,9 +15,6 @@ import ( func DataSourceTencentCloudKubernetesClusterCommonNames() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudKubernetesClusterCommonNamesRead, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, Schema: map[string]*schema.Schema{ "cluster_id": { Type: schema.TypeString, @@ -55,10 +51,16 @@ func DataSourceTencentCloudKubernetesClusterCommonNames() *schema.Resource { Computed: true, Description: "User UIN.", }, + "common_name": { + Type: schema.TypeString, + Computed: true, + Description: "The CommonName in the certificate of the client corresponding to the sub-account.", + }, "common_names": { Type: schema.TypeString, Computed: true, Description: "The CommonName in the certificate of the client corresponding to the sub-account.", + Deprecated: "It has been deprecated from version 1.81.140. Please use `common_name`.", }, }, }, @@ -89,8 +91,26 @@ func dataSourceTencentCloudKubernetesClusterCommonNamesRead(d *schema.ResourceDa clusterId = v.(string) } paramMap := make(map[string]interface{}) - if v, ok := d.GetOk("cluster_id"); ok { - paramMap["ClusterId"] = helper.String(v.(string)) + if v, ok := d.GetOk("subaccount_uins"); ok { + subaccountUinsList := []*string{} + subaccountUinsSet := v.([]interface{}) + for i := range subaccountUinsSet { + subaccountUins := subaccountUinsSet[i].(string) + subaccountUinsList = append(subaccountUinsList, helper.String(subaccountUins)) + } + paramMap["SubaccountUins"] = subaccountUinsList + } + + paramMap["ClusterId"] = helper.String(clusterId) + + if v, ok := d.GetOk("role_ids"); ok { + roleIdsList := []*string{} + roleIdsSet := v.([]interface{}) + for i := range roleIdsSet { + roleIds := roleIdsSet[i].(string) + roleIdsList = append(roleIdsList, helper.String(roleIds)) + } + paramMap["RoleIds"] = roleIdsList } var respData []*tkev20180525.CommonName @@ -106,30 +126,27 @@ func dataSourceTencentCloudKubernetesClusterCommonNamesRead(d *schema.ResourceDa return err } - var cns []string commonNamesList := make([]map[string]interface{}, 0, len(respData)) if respData != nil { for _, commonNames := range respData { commonNamesMap := map[string]interface{}{} - var cN string if commonNames.SubaccountUin != nil { commonNamesMap["subaccount_uin"] = commonNames.SubaccountUin } if commonNames.CN != nil { + commonNamesMap["common_name"] = commonNames.CN commonNamesMap["common_names"] = commonNames.CN - cN = *commonNames.CN } - cns = append(cns, cN) commonNamesList = append(commonNamesList, commonNamesMap) } _ = d.Set("list", commonNamesList) } - d.SetId(strings.Join([]string{clusterId, helper.DataResourceIdsHash(cns)}, tccommon.FILED_SP)) + d.SetId(clusterId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { diff --git a/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_common_names.md b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_common_names.md index 4b59a14d6b..98da6dcfd4 100644 --- a/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_common_names.md +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_common_names.md @@ -2,9 +2,20 @@ Provide a datasource to query cluster CommonNames. Example Usage +Query common names by subaccount uins + +```hcl +data "tencentcloud_kubernetes_cluster_common_names" "example" { + cluster_id = "cls-fdy7hm1q" + subaccount_uins = ["100037718139", "100031340176"] +} +``` + +Query common names by role ids + ```hcl -data "tencentcloud_kubernetes_cluster_common_names" "foo" { - cluster_id = "cls-12345678" - subaccount_uins = ["1234567890", "0987654321"] +data "tencentcloud_kubernetes_cluster_common_names" "example" { + cluster_id = "cls-fdy7hm1q" + role_ids = ["4611686018441060141"] } ``` \ No newline at end of file diff --git a/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_common_names_extension.go b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_common_names_extension.go index ea8db0e8e5..7fdf745226 100644 --- a/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_common_names_extension.go +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_common_names_extension.go @@ -1,27 +1 @@ package tke - -import ( - "context" - "fmt" - - tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" - - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func dataSourceTencentCloudKubernetesClusterCommonNamesReadPreRequest0(ctx context.Context, req *tke.DescribeClusterCommonNamesRequest) error { - d := tccommon.ResourceDataFromContext(ctx) - if d == nil { - return fmt.Errorf("resource data can not be nil") - } - - if v, ok := d.GetOk("subaccount_uins"); ok { - req.SubaccountUins = helper.InterfacesStringsPoint(v.([]interface{})) - } - if v, ok := d.GetOk("role_ids"); ok { - req.RoleIds = helper.InterfacesStringsPoint(v.([]interface{})) - } - - return nil -} diff --git a/tencentcloud/services/tke/service_tencentcloud_tke.go b/tencentcloud/services/tke/service_tencentcloud_tke.go index 1574bf84a3..5e677c69af 100644 --- a/tencentcloud/services/tke/service_tencentcloud_tke.go +++ b/tencentcloud/services/tke/service_tencentcloud_tke.go @@ -2905,17 +2905,19 @@ func (me *TkeService) DescribeKubernetesClusterCommonNamesByFilter(ctx context.C }() for k, v := range param { + if k == "SubaccountUins" { + request.SubaccountUins = v.([]*string) + } if k == "ClusterId" { request.ClusterId = v.(*string) } + if k == "RoleIds" { + request.RoleIds = v.([]*string) + } } ratelimit.Check(request.GetAction()) - if err := dataSourceTencentCloudKubernetesClusterCommonNamesReadPreRequest0(ctx, request); err != nil { - return nil, err - } - response, err := me.client.UseTkeV20180525Client().DescribeClusterCommonNames(request) if err != nil { errRet = err diff --git a/website/docs/d/kubernetes_cluster_common_names.html.markdown b/website/docs/d/kubernetes_cluster_common_names.html.markdown index 429b43cc2f..0702aa0107 100644 --- a/website/docs/d/kubernetes_cluster_common_names.html.markdown +++ b/website/docs/d/kubernetes_cluster_common_names.html.markdown @@ -13,10 +13,21 @@ Provide a datasource to query cluster CommonNames. ## Example Usage +### Query common names by subaccount uins + +```hcl +data "tencentcloud_kubernetes_cluster_common_names" "example" { + cluster_id = "cls-fdy7hm1q" + subaccount_uins = ["100037718139", "100031340176"] +} +``` + +### Query common names by role ids + ```hcl -data "tencentcloud_kubernetes_cluster_common_names" "foo" { - cluster_id = "cls-12345678" - subaccount_uins = ["1234567890", "0987654321"] +data "tencentcloud_kubernetes_cluster_common_names" "example" { + cluster_id = "cls-fdy7hm1q" + role_ids = ["4611686018441060141"] } ``` @@ -34,7 +45,8 @@ The following arguments are supported: In addition to all arguments above, the following attributes are exported: * `list` - List of the CommonName in the certificate of the client corresponding to the sub-account UIN. - * `common_names` - The CommonName in the certificate of the client corresponding to the sub-account. + * `common_name` - The CommonName in the certificate of the client corresponding to the sub-account. + * `common_names` - (**Deprecated**) It has been deprecated from version 1.81.140. Please use `common_name`. The CommonName in the certificate of the client corresponding to the sub-account. * `subaccount_uin` - User UIN. From 98742be57f871bc8766855bbd638e95ea0f348cb Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Fri, 22 Nov 2024 17:09:48 +0800 Subject: [PATCH 2/2] add --- .changelog/2970.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .changelog/2970.txt diff --git a/.changelog/2970.txt b/.changelog/2970.txt new file mode 100644 index 0000000000..25f684555b --- /dev/null +++ b/.changelog/2970.txt @@ -0,0 +1,10 @@ +```release-note:enhancement +datasource/tencentcloud_kubernetes_cluster_common_names: Update code + +```release-note:new-datasource +tencentcloud_cam_sub_accounts +``` + +```release-note:new-datasource +tencentcloud_cam_role_detail +```