diff --git a/.changelog/3595.txt b/.changelog/3595.txt new file mode 100644 index 0000000000..5f8caba515 --- /dev/null +++ b/.changelog/3595.txt @@ -0,0 +1,3 @@ +```release-note:new-resource +tencentcloud_kubernetes_addon +``` \ No newline at end of file diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 0448afafc3..4cd2094416 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -573,6 +573,7 @@ func Provider() *schema.Provider { "tencentcloud_eks_cluster_credential": tke.DataSourceTencentCloudEksClusterCredential(), "tencentcloud_container_clusters": tke.DataSourceTencentCloudContainerClusters(), "tencentcloud_container_cluster_instances": tke.DataSourceTencentCloudContainerClusterInstances(), + "tencentcloud_kubernetes_addon": tke.DataSourceTencentCloudKubernetesAddon(), "tencentcloud_mysql_backup_list": cdb.DataSourceTencentCloudMysqlBackupList(), "tencentcloud_mysql_zone_config": cdb.DataSourceTencentCloudMysqlZoneConfig(), "tencentcloud_mysql_parameter_list": cdb.DataSourceTencentCloudMysqlParameterList(), diff --git a/tencentcloud/provider.md b/tencentcloud/provider.md index 0b6d032f1b..c96ddd9335 100644 --- a/tencentcloud/provider.md +++ b/tencentcloud/provider.md @@ -688,6 +688,7 @@ tencentcloud_kubernetes_cluster_node_pools tencentcloud_kubernetes_cluster_instances tencentcloud_kubernetes_cluster_node_pools tencentcloud_kubernetes_cluster_native_node_pools +tencentcloud_kubernetes_addon Resource tencentcloud_kubernetes_cluster diff --git a/tencentcloud/services/tke/data_source_tc_kubernetes_addon.go b/tencentcloud/services/tke/data_source_tc_kubernetes_addon.go new file mode 100644 index 0000000000..cbba4555de --- /dev/null +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_addon.go @@ -0,0 +1,152 @@ +// Code generated by iacg; DO NOT EDIT. +package tke + +import ( + "context" + "strings" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + tkev20180525 "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 DataSourceTencentCloudKubernetesAddon() *schema.Resource { + return &schema.Resource{ + Read: dataSourceTencentCloudKubernetesAddonRead, + Schema: map[string]*schema.Schema{ + "cluster_id": { + Type: schema.TypeString, + Required: true, + Description: "Cluster ID.", + }, + + "addon_name": { + Type: schema.TypeString, + Optional: true, + Description: "Add-on name (all add-ons in the cluster are returned if this parameter is not specified).", + }, + + "addons": { + Type: schema.TypeList, + Computed: true, + Description: "List of add-ons.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "addon_name": { + Type: schema.TypeString, + Optional: true, + Description: "Add-on name.", + }, + "addon_version": { + Type: schema.TypeString, + Optional: true, + Description: "Add-on version.", + }, + "raw_values": { + Type: schema.TypeString, + Optional: true, + Description: "Add-on parameters, which are base64-encoded strings in JSON/\nNote: This field may return `null`, indicating that no valid values can be obtained.", + }, + "phase": { + Type: schema.TypeString, + Optional: true, + Description: "Add-on status\nNote: This field may return `null`, indicating that no valid values can be obtained.", + }, + "reason": { + Type: schema.TypeString, + Optional: true, + Description: "Reason for add-on failure\nNote: This field may return `null`, indicating that no valid values can be obtained.", + }, + }, + }, + }, + + "result_output_file": { + Type: schema.TypeString, + Optional: true, + Description: "Used to save results.", + }, + }, + } +} + +func dataSourceTencentCloudKubernetesAddonRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("data_source.tencentcloud_kubernetes_addon.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(nil) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + var ( + clusterId string + addonName string + ) + if v, ok := d.GetOk("cluster_id"); ok { + clusterId = v.(string) + } + + if v, ok := d.GetOk("addon_name"); ok { + addonName = v.(string) + } + + var respData []*tkev20180525.Addon + reqErr := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeAddonList(ctx, clusterId, addonName) + if e != nil { + return tccommon.RetryError(e) + } + respData = result + return nil + }) + if reqErr != nil { + return reqErr + } + + ids := make([]string, 0, len(respData)) + addonsList := make([]map[string]interface{}, 0, len(respData)) + if respData != nil { + for _, addons := range respData { + addonsMap := map[string]interface{}{} + + if addons.AddonName != nil { + addonsMap["addon_name"] = addons.AddonName + } + + if addons.AddonVersion != nil { + addonsMap["addon_version"] = addons.AddonVersion + } + + if addons.RawValues != nil { + addonsMap["raw_values"] = addons.RawValues + } + + if addons.Phase != nil { + addonsMap["phase"] = addons.Phase + } + + if addons.Reason != nil { + addonsMap["reason"] = addons.Reason + } + + ids = append(ids, strings.Join([]string{clusterId, *addons.AddonName}, tccommon.FILED_SP)) + addonsList = append(addonsList, addonsMap) + } + + _ = d.Set("addons", addonsList) + } + + d.SetId(helper.DataResourceIdsHash(ids)) + + output, ok := d.GetOk("result_output_file") + if ok && output.(string) != "" { + if e := tccommon.WriteToFile(output.(string), addonsList); e != nil { + return e + } + } + + return nil +} diff --git a/tencentcloud/services/tke/data_source_tc_kubernetes_addon.md b/tencentcloud/services/tke/data_source_tc_kubernetes_addon.md new file mode 100644 index 0000000000..4de7fc16a1 --- /dev/null +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_addon.md @@ -0,0 +1,9 @@ +Use this data source to query detailed information of kubernetes addon. + +Example Usage + +```hcl +data "tencentcloud_kubernetes_addon" "kubernetes_addon" { + cluster_id = "cls-12345678" +} +``` \ No newline at end of file diff --git a/tencentcloud/services/tke/data_source_tc_kubernetes_addon_extension.go b/tencentcloud/services/tke/data_source_tc_kubernetes_addon_extension.go new file mode 100644 index 0000000000..7fdf745226 --- /dev/null +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_addon_extension.go @@ -0,0 +1 @@ +package tke diff --git a/tencentcloud/services/tke/data_source_tc_kubernetes_addon_test.go b/tencentcloud/services/tke/data_source_tc_kubernetes_addon_test.go new file mode 100644 index 0000000000..2e3ec0b07e --- /dev/null +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_addon_test.go @@ -0,0 +1,35 @@ +package tke_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" +) + +func TestAccTencentCloudKubernetesAddonDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccKubernetesAddonDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_kubernetes_addon.kubernetes_addon"), + resource.TestCheckResourceAttrSet("data.tencentcloud_kubernetes_addon.kubernetes_addon", "id"), + resource.TestCheckResourceAttr("data.tencentcloud_kubernetes_addon.kubernetes_addon", "addons.#", "8"), + ), + }, + }, + }) +} + +const testAccKubernetesAddonDataSource = ` + +data "tencentcloud_kubernetes_addon" "kubernetes_addon" { + cluster_id = "cls-fdy7hm1q" +} +` diff --git a/tencentcloud/services/tke/service_tencentcloud_tke_addons.go b/tencentcloud/services/tke/service_tencentcloud_tke_addons.go index caf296f406..faa6f7b57e 100644 --- a/tencentcloud/services/tke/service_tencentcloud_tke_addons.go +++ b/tencentcloud/services/tke/service_tencentcloud_tke_addons.go @@ -113,10 +113,13 @@ func (me *TkeService) GetTkeAppChartList(ctx context.Context, request *tke.GetTk return } -func (me *TkeService) DescribeAddonList(ctx context.Context, clusterId string) (ret []*tke.Addon, errRet error) { +func (me *TkeService) DescribeAddonList(ctx context.Context, clusterId, addonName string) (ret []*tke.Addon, errRet error) { request := tke.NewDescribeAddonRequest() response := tke.NewDescribeAddonResponse() request.ClusterId = &clusterId + if addonName != "" { + request.AddonName = &addonName + } err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := me.client.UseTkeClient().DescribeAddon(request) diff --git a/website/docs/d/kubernetes_addon.html.markdown b/website/docs/d/kubernetes_addon.html.markdown new file mode 100644 index 0000000000..e0a88ef39e --- /dev/null +++ b/website/docs/d/kubernetes_addon.html.markdown @@ -0,0 +1,36 @@ +--- +subcategory: "Tencent Kubernetes Engine(TKE)" +layout: "tencentcloud" +page_title: "TencentCloud: tencentcloud_kubernetes_addon" +sidebar_current: "docs-tencentcloud-datasource-kubernetes_addon" +description: |- + Use this data source to query detailed information of kubernetes addon. +--- + +# tencentcloud_kubernetes_addon + +Use this data source to query detailed information of kubernetes addon. + +## Example Usage + +```hcl +data "tencentcloud_kubernetes_addon" "kubernetes_addon" { + cluster_id = "cls-12345678" +} +``` + +## Argument Reference + +The following arguments are supported: + +* `cluster_id` - (Required, String) Cluster ID. +* `addon_name` - (Optional, String) Add-on name (all add-ons in the cluster are returned if this parameter is not specified). +* `result_output_file` - (Optional, String) Used to save results. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `addons` - List of add-ons. + + diff --git a/website/tencentcloud.erb b/website/tencentcloud.erb index 824d7285ac..f07247a84a 100644 --- a/website/tencentcloud.erb +++ b/website/tencentcloud.erb @@ -5089,6 +5089,9 @@
  • Data Sources