diff --git a/.changelog/2731.txt b/.changelog/2731.txt new file mode 100644 index 0000000000..54c36e3476 --- /dev/null +++ b/.changelog/2731.txt @@ -0,0 +1,3 @@ +```release-note:new-data-source +tencentcloud_monitor_tmp_instances +``` \ No newline at end of file diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 5ec76390d9..8a11b6926f 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -554,6 +554,7 @@ func Provider() *schema.Provider { "tencentcloud_monitor_alarm_monitor_type": monitor.DataSourceTencentCloudMonitorAlarmMonitorType(), "tencentcloud_monitor_statistic_data": monitor.DataSourceTencentCloudMonitorStatisticData(), "tencentcloud_monitor_tmp_regions": tmp.DataSourceTencentCloudMonitorTmpRegions(), + "tencentcloud_monitor_tmp_instances": tmp.DataSourceTencentCloudMonitorTmpInstances(), "tencentcloud_postgresql_instances": postgresql.DataSourceTencentCloudPostgresqlInstances(), "tencentcloud_postgresql_specinfos": postgresql.DataSourceTencentCloudPostgresqlSpecinfos(), "tencentcloud_postgresql_xlogs": postgresql.DataSourceTencentCloudPostgresqlXlogs(), diff --git a/tencentcloud/provider.md b/tencentcloud/provider.md index 2d59920e8f..f15d9a6336 100644 --- a/tencentcloud/provider.md +++ b/tencentcloud/provider.md @@ -810,6 +810,7 @@ Cloud Monitor(Monitor) Managed Service for Prometheus(TMP) Data Source tencentcloud_monitor_tmp_regions + tencentcloud_monitor_tmp_instances Resource tencentcloud_monitor_tmp_instance diff --git a/tencentcloud/services/monitor/service_tencentcloud_monitor.go b/tencentcloud/services/monitor/service_tencentcloud_monitor.go index f0d470931b..0be6655268 100644 --- a/tencentcloud/services/monitor/service_tencentcloud_monitor.go +++ b/tencentcloud/services/monitor/service_tencentcloud_monitor.go @@ -2541,3 +2541,69 @@ func (me *MonitorService) DeleteMonitorTmpAlertGroupById(ctx context.Context, in return } + +func (me *MonitorService) DescribeMonitorTmpInstancesByFilter(ctx context.Context, param map[string]interface{}) (tmpInstances []*monitor.PrometheusInstancesItem, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = monitor.NewDescribePrometheusInstancesRequest() + ) + + 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 == "InstanceIds" { + request.InstanceIds = v.([]*string) + } + if k == "InstanceStatus" { + request.InstanceStatus = v.([]*int64) + } + if k == "InstanceName" { + request.InstanceName = v.(*string) + } + if k == "Zones" { + request.Zones = v.([]*string) + } + if k == "TagFilters" { + request.TagFilters = v.([]*monitor.PrometheusTag) + } + if k == "IPv4Address" { + request.IPv4Address = v.([]*string) + } + if k == "InstanceChargeType" { + request.InstanceChargeType = v.(*int64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMonitorClient().DescribePrometheusInstances(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 || len(response.Response.InstanceSet) < 1 { + break + } + tmpInstances = append(tmpInstances, response.Response.InstanceSet...) + if len(response.Response.InstanceSet) < int(limit) { + break + } + + offset += limit + } + + return +} diff --git a/tencentcloud/services/tmp/data_source_tc_monitor_tmp_instances.go b/tencentcloud/services/tmp/data_source_tc_monitor_tmp_instances.go new file mode 100644 index 0000000000..858e9d1997 --- /dev/null +++ b/tencentcloud/services/tmp/data_source_tc_monitor_tmp_instances.go @@ -0,0 +1,605 @@ +package tmp + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" +) + +func DataSourceTencentCloudMonitorTmpInstances() *schema.Resource { + return &schema.Resource{ + Read: dataSourceTencentCloudMonitorTmpInstancesRead, + Schema: map[string]*schema.Schema{ + "instance_ids": { + Optional: true, + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Description: "Query according to one or more instance IDs. The instance ID is like: prom-xxxx. The maximum number of instances requested is 100.", + }, + + "instance_status": { + Optional: true, + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + Description: "Filter according to instance status.\n" + + "- 1: Creating;\n" + + "- 2: In operation;\n" + + "- 3: Abnormal;\n" + + "- 4: Reconstruction;\n" + + "- 5: Destruction;\n" + + "- 6: Stopped taking;\n" + + "- 8: Suspension of service due to arrears;\n" + + "- 9: Service has been suspended due to arrears.", + }, + + "instance_name": { + Optional: true, + Type: schema.TypeString, + Description: "Filter according to instance name.", + }, + + "zones": { + Optional: true, + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Description: "Filter according to availability area. The availability area is shaped like: ap-Guangzhou-1.", + }, + + "tag_filters": { + Optional: true, + Type: schema.TypeList, + Description: "Filter according to tag Key-Value pair. The tag-key is replaced with a specific label key.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "key": { + Type: schema.TypeString, + Required: true, + Description: "The key of the tag.", + }, + "value": { + Type: schema.TypeString, + Required: true, + Description: "The value of the tag.", + }, + }, + }, + }, + + "ipv4_address": { + Optional: true, + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Description: "Filter according to ipv4 address.", + }, + + "instance_charge_type": { + Optional: true, + Type: schema.TypeInt, + Description: "Filter according to instance charge type.\n" + + "- 2: Prepaid;\n" + + "- 3: Postpaid by hour.", + }, + + "instance_set": { + Computed: true, + Type: schema.TypeList, + Description: "Instance details list.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Computed: true, + Description: "Instance id.", + }, + "instance_name": { + Type: schema.TypeString, + Computed: true, + Description: "Instance name.", + }, + "instance_charge_type": { + Type: schema.TypeInt, + Computed: true, + Description: "Instance charge type.\n" + + "- 2: Prepaid;\n" + + "- 3: Postpaid by hour.", + }, + "region_id": { + Type: schema.TypeInt, + Computed: true, + Description: "Region id.", + }, + "zone": { + Type: schema.TypeString, + Computed: true, + Description: "Zone.", + }, + "vpc_id": { + Type: schema.TypeString, + Computed: true, + Description: "VPC id.", + }, + "subnet_id": { + Type: schema.TypeString, + Computed: true, + Description: "Subnet id.", + }, + "data_retention_time": { + Type: schema.TypeInt, + Computed: true, + Description: "Data retention time.", + }, + "instance_status": { + Type: schema.TypeInt, + Computed: true, + Description: "Filter according to instance status.\n" + + "- 1: Creating;\n" + + "- 2: In operation;\n" + + "- 3: Abnormal;\n" + + "- 4: Reconstruction;\n" + + "- 5: Destruction;\n" + + "- 6: Stopped taking;\n" + + "- 8: Suspension of service due to arrears;\n" + + "- 9: Service has been suspended due to arrears.", + }, + "grafana_url": { + Type: schema.TypeString, + Computed: true, + Description: "Grafana panel url.", + }, + "created_at": { + Type: schema.TypeString, + Computed: true, + Description: "Created_at.", + }, + "enable_grafana": { + Type: schema.TypeInt, + Computed: true, + Description: "Whether to enable grafana.\n" + + "- 0: closed;\n" + + "- 1: open.", + }, + "ipv4_address": { + Type: schema.TypeString, + Computed: true, + Description: "IPV4 address.", + }, + "tag_specification": { + Type: schema.TypeList, + Computed: true, + Description: "List of tags associated with the instance.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "key": { + Type: schema.TypeString, + Computed: true, + Description: "The key of the tag.", + }, + "value": { + Type: schema.TypeString, + Computed: true, + Description: "The value of the tag.", + }, + }, + }, + }, + "expire_time": { + Type: schema.TypeString, + Computed: true, + Description: "Expires for purchased instances.", + }, + "charge_status": { + Type: schema.TypeInt, + Computed: true, + Description: "Charge status.\n" + + "- 1: Normal;\n" + + "- 2: Expires;\n" + + "- 3: Destruction;\n" + + "- 4: Allocation;\n" + + "- 5: Allocation failed.", + }, + "spec_name": { + Type: schema.TypeString, + Computed: true, + Description: "Specification name.", + }, + "auto_renew_flag": { + Type: schema.TypeInt, + Computed: true, + Description: "Automatic renewal flag.\n" + + "- 0: No automatic renewal;\n" + + "- 1: Enable automatic renewal;\n" + + "- 2: Automatic renewal is prohibited;\n" + + "- -1: Invalid.", + }, + "is_near_expire": { + Type: schema.TypeInt, + Computed: true, + Description: "Whether it is about to expire.\n" + + "- 0: No;\n" + + "- 1: Expiring soon.", + }, + "auth_token": { + Type: schema.TypeString, + Computed: true, + Description: "Token required for data writing.", + }, + "remote_write": { + Type: schema.TypeString, + Computed: true, + Description: "Address of prometheus remote write.", + }, + "api_root_path": { + Type: schema.TypeString, + Computed: true, + Description: "Prometheus http api root address.", + }, + "proxy_address": { + Type: schema.TypeString, + Computed: true, + Description: "Proxy address.", + }, + "grafana_status": { + Type: schema.TypeInt, + Computed: true, + Description: "Grafana status.\n" + + "- 1: Creating;\n" + + "- 2: In operation;\n" + + "- 3: Abnormal;\n" + + "- 4: Rebooting;\n" + + "- 5: Destruction;\n" + + "- 6: Shutdown;\n" + + "- 7: Deleted.", + }, + "grafana_ip_white_list": { + Type: schema.TypeString, + Computed: true, + Description: "Grafana IP whitelist list.", + }, + "grant": { + Type: schema.TypeList, + Computed: true, + Description: "Authorization information for the instance.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "has_charge_operation": { + Type: schema.TypeInt, + Computed: true, + Description: "Whether you have charging operation authority (1=yes, 2=no).", + }, + "has_vpc_display": { + Type: schema.TypeInt, + Computed: true, + Description: "Whether to display VPC information (1=yes, 2=no).", + }, + "has_grafana_status_change": { + Type: schema.TypeInt, + Computed: true, + Description: "Whether the status of Grafana can be modified (1=yes, 2=no).", + }, + "has_agent_manage": { + Type: schema.TypeInt, + Computed: true, + Description: "Whether you have permission to manage the agent (1=yes, 2=no).", + }, + "has_tke_manage": { + Type: schema.TypeInt, + Computed: true, + Description: "Whether you have permission to manage TKE integration (1=yes, 2=no).", + }, + "has_api_operation": { + Type: schema.TypeInt, + Computed: true, + Description: "Whether to display API and other information (1=yes, 2=no).", + }, + }, + }, + }, + "grafana_instance_id": { + Type: schema.TypeString, + Computed: true, + Description: "Binding grafana instance id.", + }, + "alert_rule_limit": { + Type: schema.TypeInt, + Computed: true, + Description: "Alert rule limit.", + }, + "recording_rule_limit": { + Type: schema.TypeInt, + Computed: true, + Description: "Pre-aggregation rule limitations.", + }, + "migration_type": { + Type: schema.TypeInt, + Computed: true, + Description: "Migration status.\n" + + "- 0: Not in migration;\n+" + + "- 1: Migrating, original instance;\n+" + + "- 2: Migrating, target instance.", + }, + }, + }, + }, + + "result_output_file": { + Type: schema.TypeString, + Optional: true, + Description: "Used to save results.", + }, + }, + } +} + +func dataSourceTencentCloudMonitorTmpInstancesRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("data_source.tencentcloud_monitor_tmp_instances.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + paramMap := make(map[string]interface{}) + if v, ok := d.GetOk("instance_ids"); ok { + instanceIdsSet := v.(*schema.Set).List() + paramMap["InstanceIds"] = helper.InterfacesStringsPoint(instanceIdsSet) + } + + if v, ok := d.GetOk("instance_status"); ok { + instanceStatusSet := v.(*schema.Set).List() + + instanceStatusList := make([]*int64, 0) + for i := range instanceStatusSet { + instanceStatus := instanceStatusSet[i].(int) + instanceStatusList = append(instanceStatusList, helper.IntInt64(instanceStatus)) + } + paramMap["InstanceStatus"] = instanceStatusList + } + + if v, ok := d.GetOk("instance_name"); ok { + paramMap["InstanceName"] = helper.String(v.(string)) + } + + if v, ok := d.GetOk("zones"); ok { + zonesSet := v.(*schema.Set).List() + paramMap["Zones"] = helper.InterfacesStringsPoint(zonesSet) + } + + if v, ok := d.GetOk("tag_filters"); ok { + tagFiltersSet := v.([]interface{}) + tmpSet := make([]*monitor.PrometheusTag, 0, len(tagFiltersSet)) + + for _, item := range tagFiltersSet { + prometheusTag := monitor.PrometheusTag{} + prometheusTagMap := item.(map[string]interface{}) + + if v, ok := prometheusTagMap["key"]; ok { + prometheusTag.Key = helper.String(v.(string)) + } + if v, ok := prometheusTagMap["value"]; ok { + prometheusTag.Value = helper.String(v.(string)) + } + tmpSet = append(tmpSet, &prometheusTag) + } + paramMap["TagFilters"] = tmpSet + } + + if v, ok := d.GetOk("ipv4_address"); ok { + iPv4AddressSet := v.(*schema.Set).List() + paramMap["IPv4Address"] = helper.InterfacesStringsPoint(iPv4AddressSet) + } + + if v, _ := d.GetOk("instance_charge_type"); v != nil { + paramMap["InstanceChargeType"] = helper.IntInt64(v.(int)) + } + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + var instanceSet []*monitor.PrometheusInstancesItem + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeMonitorTmpInstancesByFilter(ctx, paramMap) + if e != nil { + return tccommon.RetryError(e) + } + instanceSet = result + return nil + }) + if err != nil { + return err + } + + ids := make([]string, 0, len(instanceSet)) + tmpList := make([]map[string]interface{}, 0, len(instanceSet)) + + if instanceSet != nil { + for _, prometheusInstancesItem := range instanceSet { + prometheusInstancesItemMap := map[string]interface{}{} + + if prometheusInstancesItem.InstanceId != nil { + prometheusInstancesItemMap["instance_id"] = prometheusInstancesItem.InstanceId + } + + if prometheusInstancesItem.InstanceName != nil { + prometheusInstancesItemMap["instance_name"] = prometheusInstancesItem.InstanceName + } + + if prometheusInstancesItem.InstanceChargeType != nil { + prometheusInstancesItemMap["instance_charge_type"] = prometheusInstancesItem.InstanceChargeType + } + + if prometheusInstancesItem.RegionId != nil { + prometheusInstancesItemMap["region_id"] = prometheusInstancesItem.RegionId + } + + if prometheusInstancesItem.Zone != nil { + prometheusInstancesItemMap["zone"] = prometheusInstancesItem.Zone + } + + if prometheusInstancesItem.VpcId != nil { + prometheusInstancesItemMap["vpc_id"] = prometheusInstancesItem.VpcId + } + + if prometheusInstancesItem.SubnetId != nil { + prometheusInstancesItemMap["subnet_id"] = prometheusInstancesItem.SubnetId + } + + if prometheusInstancesItem.DataRetentionTime != nil { + prometheusInstancesItemMap["data_retention_time"] = prometheusInstancesItem.DataRetentionTime + } + + if prometheusInstancesItem.InstanceStatus != nil { + prometheusInstancesItemMap["instance_status"] = prometheusInstancesItem.InstanceStatus + } + + if prometheusInstancesItem.GrafanaURL != nil { + prometheusInstancesItemMap["grafana_url"] = prometheusInstancesItem.GrafanaURL + } + + if prometheusInstancesItem.CreatedAt != nil { + prometheusInstancesItemMap["created_at"] = prometheusInstancesItem.CreatedAt + } + + if prometheusInstancesItem.EnableGrafana != nil { + prometheusInstancesItemMap["enable_grafana"] = prometheusInstancesItem.EnableGrafana + } + + if prometheusInstancesItem.IPv4Address != nil { + prometheusInstancesItemMap["ipv4_address"] = prometheusInstancesItem.IPv4Address + } + + if prometheusInstancesItem.TagSpecification != nil { + tagSpecificationList := []interface{}{} + for _, tagSpecification := range prometheusInstancesItem.TagSpecification { + tagSpecificationMap := map[string]interface{}{} + + if tagSpecification.Key != nil { + tagSpecificationMap["key"] = tagSpecification.Key + } + + if tagSpecification.Value != nil { + tagSpecificationMap["value"] = tagSpecification.Value + } + tagSpecificationList = append(tagSpecificationList, tagSpecificationMap) + } + prometheusInstancesItemMap["tag_specification"] = tagSpecificationList + } + + if prometheusInstancesItem.ExpireTime != nil { + prometheusInstancesItemMap["expire_time"] = prometheusInstancesItem.ExpireTime + } + + if prometheusInstancesItem.ChargeStatus != nil { + prometheusInstancesItemMap["charge_status"] = prometheusInstancesItem.ChargeStatus + } + + if prometheusInstancesItem.SpecName != nil { + prometheusInstancesItemMap["spec_name"] = prometheusInstancesItem.SpecName + } + + if prometheusInstancesItem.AutoRenewFlag != nil { + prometheusInstancesItemMap["auto_renew_flag"] = prometheusInstancesItem.AutoRenewFlag + } + + if prometheusInstancesItem.IsNearExpire != nil { + prometheusInstancesItemMap["is_near_expire"] = prometheusInstancesItem.IsNearExpire + } + + if prometheusInstancesItem.AuthToken != nil { + prometheusInstancesItemMap["auth_token"] = prometheusInstancesItem.AuthToken + } + + if prometheusInstancesItem.RemoteWrite != nil { + prometheusInstancesItemMap["remote_write"] = prometheusInstancesItem.RemoteWrite + } + + if prometheusInstancesItem.ApiRootPath != nil { + prometheusInstancesItemMap["api_root_path"] = prometheusInstancesItem.ApiRootPath + } + + if prometheusInstancesItem.ProxyAddress != nil { + prometheusInstancesItemMap["proxy_address"] = prometheusInstancesItem.ProxyAddress + } + + if prometheusInstancesItem.GrafanaStatus != nil { + prometheusInstancesItemMap["grafana_status"] = prometheusInstancesItem.GrafanaStatus + } + + if prometheusInstancesItem.GrafanaIpWhiteList != nil { + prometheusInstancesItemMap["grafana_ip_white_list"] = prometheusInstancesItem.GrafanaIpWhiteList + } + + if prometheusInstancesItem.Grant != nil { + grantMap := map[string]interface{}{} + + if prometheusInstancesItem.Grant.HasChargeOperation != nil { + grantMap["has_charge_operation"] = prometheusInstancesItem.Grant.HasChargeOperation + } + + if prometheusInstancesItem.Grant.HasVpcDisplay != nil { + grantMap["has_vpc_display"] = prometheusInstancesItem.Grant.HasVpcDisplay + } + + if prometheusInstancesItem.Grant.HasGrafanaStatusChange != nil { + grantMap["has_grafana_status_change"] = prometheusInstancesItem.Grant.HasGrafanaStatusChange + } + + if prometheusInstancesItem.Grant.HasAgentManage != nil { + grantMap["has_agent_manage"] = prometheusInstancesItem.Grant.HasAgentManage + } + + if prometheusInstancesItem.Grant.HasTkeManage != nil { + grantMap["has_tke_manage"] = prometheusInstancesItem.Grant.HasTkeManage + } + + if prometheusInstancesItem.Grant.HasApiOperation != nil { + grantMap["has_api_operation"] = prometheusInstancesItem.Grant.HasApiOperation + } + + prometheusInstancesItemMap["grant"] = []interface{}{grantMap} + } + + if prometheusInstancesItem.GrafanaInstanceId != nil { + prometheusInstancesItemMap["grafana_instance_id"] = prometheusInstancesItem.GrafanaInstanceId + } + + if prometheusInstancesItem.AlertRuleLimit != nil { + prometheusInstancesItemMap["alert_rule_limit"] = prometheusInstancesItem.AlertRuleLimit + } + + if prometheusInstancesItem.RecordingRuleLimit != nil { + prometheusInstancesItemMap["recording_rule_limit"] = prometheusInstancesItem.RecordingRuleLimit + } + + if prometheusInstancesItem.MigrationType != nil { + prometheusInstancesItemMap["migration_type"] = prometheusInstancesItem.MigrationType + } + + ids = append(ids, *prometheusInstancesItem.InstanceId) + tmpList = append(tmpList, prometheusInstancesItemMap) + } + + _ = d.Set("instance_set", tmpList) + } + + d.SetId(helper.DataResourceIdsHash(ids)) + output, ok := d.GetOk("result_output_file") + if ok && output.(string) != "" { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { + return e + } + } + return nil +} diff --git a/tencentcloud/services/tmp/data_source_tc_monitor_tmp_instances.md b/tencentcloud/services/tmp/data_source_tc_monitor_tmp_instances.md new file mode 100644 index 0000000000..d35c7cf5f5 --- /dev/null +++ b/tencentcloud/services/tmp/data_source_tc_monitor_tmp_instances.md @@ -0,0 +1,9 @@ +Use this data source to query detailed information of monitor tmp instances + +Example Usage + +```hcl +data "tencentcloud_monitor_tmp_instances" "tmp_instances" { + instance_ids = ["prom-xxxxxx"] +} +``` \ No newline at end of file diff --git a/tencentcloud/services/tmp/data_source_tc_monitor_tmp_instances_test.go b/tencentcloud/services/tmp/data_source_tc_monitor_tmp_instances_test.go new file mode 100644 index 0000000000..16c3862cf5 --- /dev/null +++ b/tencentcloud/services/tmp/data_source_tc_monitor_tmp_instances_test.go @@ -0,0 +1,86 @@ +package tmp_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" +) + +func TestAccTencentCloudMonitorTmpInstancesDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccMonitorTmpInstancesDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_monitor_tmp_instances.tmp_instances"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.#"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.instance_id"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.instance_name"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.instance_charge_type"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.region_id"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.zone"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.vpc_id"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.subnet_id"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.data_retention_time"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.instance_status"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.created_at"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.enable_grafana"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.ipv4_address"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.tag_specification.#"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.expire_time"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.charge_status"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.auto_renew_flag"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.is_near_expire"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.auth_token"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.remote_write"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.api_root_path"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.proxy_address"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.grafana_status"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.grant.#"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.alert_rule_limit"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.recording_rule_limit"), + resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.migration_type"), + resource.TestCheckResourceAttr("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.grafana_instance_id", ""), + resource.TestCheckResourceAttr("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.grafana_url", ""), + resource.TestCheckResourceAttr("data.tencentcloud_monitor_tmp_instances.tmp_instances", "instance_set.0.grafana_ip_white_list", ""), + ), + }, + }, + }) +} + +const testAccMonitorTmpInstancesDataSource = ` +variable "availability_zone" { + default = "ap-guangzhou-4" +} + +resource "tencentcloud_vpc" "vpc" { + cidr_block = "10.0.0.0/16" + name = "tf_monitor_tmp_vpc" +} + +resource "tencentcloud_subnet" "subnet" { + vpc_id = tencentcloud_vpc.vpc.id + availability_zone = var.availability_zone + name = "tf_monitor_tmp_subnet" + cidr_block = "10.0.1.0/24" +} + +resource "tencentcloud_monitor_tmp_instance" "example" { + instance_name = "tf-monitor-tmp-instance" + vpc_id = tencentcloud_vpc.vpc.id + subnet_id = tencentcloud_subnet.subnet.id + data_retention_time = 30 + zone = var.availability_zone +} + +data "tencentcloud_monitor_tmp_instances" "tmp_instances" { + instance_ids = [tencentcloud_monitor_tmp_instance.example.id] +} +` diff --git a/website/docs/d/monitor_tmp_instances.html.markdown b/website/docs/d/monitor_tmp_instances.html.markdown new file mode 100644 index 0000000000..61e64bde97 --- /dev/null +++ b/website/docs/d/monitor_tmp_instances.html.markdown @@ -0,0 +1,127 @@ +--- +subcategory: "Managed Service for Prometheus(TMP)" +layout: "tencentcloud" +page_title: "TencentCloud: tencentcloud_monitor_tmp_instances" +sidebar_current: "docs-tencentcloud-datasource-monitor_tmp_instances" +description: |- + Use this data source to query detailed information of monitor tmp instances +--- + +# tencentcloud_monitor_tmp_instances + +Use this data source to query detailed information of monitor tmp instances + +## Example Usage + +```hcl +data "tencentcloud_monitor_tmp_instances" "tmp_instances" { + instance_ids = ["prom-xxxxxx"] +} +``` + +## Argument Reference + +The following arguments are supported: + +* `instance_charge_type` - (Optional, Int) Filter according to instance charge type. +- 2: Prepaid; +- 3: Postpaid by hour. +* `instance_ids` - (Optional, Set: [`String`]) Query according to one or more instance IDs. The instance ID is like: prom-xxxx. The maximum number of instances requested is 100. +* `instance_name` - (Optional, String) Filter according to instance name. +* `instance_status` - (Optional, Set: [`Int`]) Filter according to instance status. +- 1: Creating; +- 2: In operation; +- 3: Abnormal; +- 4: Reconstruction; +- 5: Destruction; +- 6: Stopped taking; +- 8: Suspension of service due to arrears; +- 9: Service has been suspended due to arrears. +* `ipv4_address` - (Optional, Set: [`String`]) Filter according to ipv4 address. +* `result_output_file` - (Optional, String) Used to save results. +* `tag_filters` - (Optional, List) Filter according to tag Key-Value pair. The tag-key is replaced with a specific label key. +* `zones` - (Optional, Set: [`String`]) Filter according to availability area. The availability area is shaped like: ap-Guangzhou-1. + +The `tag_filters` object supports the following: + +* `key` - (Required, String) The key of the tag. +* `value` - (Required, String) The value of the tag. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `instance_set` - Instance details list. + * `alert_rule_limit` - Alert rule limit. + * `api_root_path` - Prometheus http api root address. + * `auth_token` - Token required for data writing. + * `auto_renew_flag` - Automatic renewal flag. +- 0: No automatic renewal; +- 1: Enable automatic renewal; +- 2: Automatic renewal is prohibited; +- -1: Invalid. + * `charge_status` - Charge status. +- 1: Normal; +- 2: Expires; +- 3: Destruction; +- 4: Allocation; +- 5: Allocation failed. + * `created_at` - Created_at. + * `data_retention_time` - Data retention time. + * `enable_grafana` - Whether to enable grafana. +- 0: closed; +- 1: open. + * `expire_time` - Expires for purchased instances. + * `grafana_instance_id` - Binding grafana instance id. + * `grafana_ip_white_list` - Grafana IP whitelist list. + * `grafana_status` - Grafana status. +- 1: Creating; +- 2: In operation; +- 3: Abnormal; +- 4: Rebooting; +- 5: Destruction; +- 6: Shutdown; +- 7: Deleted. + * `grafana_url` - Grafana panel url. + * `grant` - Authorization information for the instance. + * `has_agent_manage` - Whether you have permission to manage the agent (1=yes, 2=no). + * `has_api_operation` - Whether to display API and other information (1=yes, 2=no). + * `has_charge_operation` - Whether you have charging operation authority (1=yes, 2=no). + * `has_grafana_status_change` - Whether the status of Grafana can be modified (1=yes, 2=no). + * `has_tke_manage` - Whether you have permission to manage TKE integration (1=yes, 2=no). + * `has_vpc_display` - Whether to display VPC information (1=yes, 2=no). + * `instance_charge_type` - Instance charge type. +- 2: Prepaid; +- 3: Postpaid by hour. + * `instance_id` - Instance id. + * `instance_name` - Instance name. + * `instance_status` - Filter according to instance status. +- 1: Creating; +- 2: In operation; +- 3: Abnormal; +- 4: Reconstruction; +- 5: Destruction; +- 6: Stopped taking; +- 8: Suspension of service due to arrears; +- 9: Service has been suspended due to arrears. + * `ipv4_address` - IPV4 address. + * `is_near_expire` - Whether it is about to expire. +- 0: No; +- 1: Expiring soon. + * `migration_type` - Migration status. +- 0: Not in migration; ++- 1: Migrating, original instance; ++- 2: Migrating, target instance. + * `proxy_address` - Proxy address. + * `recording_rule_limit` - Pre-aggregation rule limitations. + * `region_id` - Region id. + * `remote_write` - Address of prometheus remote write. + * `spec_name` - Specification name. + * `subnet_id` - Subnet id. + * `tag_specification` - List of tags associated with the instance. + * `key` - The key of the tag. + * `value` - The value of the tag. + * `vpc_id` - VPC id. + * `zone` - Zone. + + diff --git a/website/tencentcloud.erb b/website/tencentcloud.erb index 8ac00516d0..1a11355d25 100644 --- a/website/tencentcloud.erb +++ b/website/tencentcloud.erb @@ -2687,6 +2687,9 @@
  • Data Sources