alicloud/data_source_alicloud_selectdb_db_instances.go (247 lines of code) (raw):

package alicloud import ( "encoding/json" "fmt" "github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" ) func dataSourceAlicloudSelectDBDbInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceAlicloudSelectDBDbInstancesRead, Schema: map[string]*schema.Schema{ "ids": { Type: schema.TypeList, Optional: true, ForceNew: true, Elem: &schema.Schema{Type: schema.TypeString}, Computed: true, }, "tags": tagsSchema(), "output_file": { Type: schema.TypeString, Optional: true, }, // Computed values "instances": { Type: schema.TypeList, Computed: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "id": { Type: schema.TypeString, Computed: true, }, "db_instance_id": { Type: schema.TypeString, Computed: true, }, "engine": { Type: schema.TypeString, Computed: true, }, "engine_version": { Type: schema.TypeString, Computed: true, }, "engine_minor_version": { Type: schema.TypeString, Computed: true, }, "db_instance_description": { Type: schema.TypeString, Computed: true, }, "status": { Type: schema.TypeString, Computed: true, }, "payment_type": { Type: schema.TypeString, Computed: true, }, "cpu_prepaid": { Type: schema.TypeInt, Computed: true, }, "memory_prepaid": { Type: schema.TypeInt, Computed: true, }, "cache_size_prepaid": { Type: schema.TypeInt, Computed: true, }, "cluster_count_prepaid": { Type: schema.TypeInt, Computed: true, }, "cpu_postpaid": { Type: schema.TypeInt, Computed: true, }, "memory_postpaid": { Type: schema.TypeInt, Computed: true, }, "cache_size_postpaid": { Type: schema.TypeInt, Computed: true, }, "cluster_count_postpaid": { Type: schema.TypeInt, Computed: true, }, "region_id": { Type: schema.TypeString, Computed: true, }, "zone_id": { Type: schema.TypeString, Computed: true, }, "vpc_id": { Type: schema.TypeString, Computed: true, }, "vswitch_id": { Type: schema.TypeString, Computed: true, }, "sub_domain": { Type: schema.TypeString, Computed: true, }, "gmt_created": { Type: schema.TypeString, Computed: true, }, "gmt_modified": { Type: schema.TypeString, Computed: true, }, "gmt_expired": { Type: schema.TypeString, Computed: true, }, "lock_mode": { Type: schema.TypeString, Computed: true, }, "lock_reason": { Type: schema.TypeString, Computed: true, }, }, }, }, }, } } func dataSourceAlicloudSelectDBDbInstancesRead(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) selectDBService := SelectDBService{client} tags := make([]map[string]interface{}, 0) if v, ok := d.GetOk("tags"); ok { for key, value := range v.(map[string]interface{}) { tags = append(tags, map[string]interface{}{ "Key": key, "Value": value.(string), }) } } idsStr := "" if v, ok := d.GetOk("ids"); ok { for _, vv := range v.([]interface{}) { if idsStr == "" { idsStr = vv.(string) } else { idsStr = idsStr + ":" + vv.(string) } } } instanceResp, err := selectDBService.DescribeSelectDBDbInstances(idsStr, tags) if err != nil { return WrapErrorf(err, DataDefaultErrorMsg, "alicloud_selectdb_db_instances", AlibabaCloudSdkGoERROR) } var objects []map[string]interface{} objects = append(objects, instanceResp...) ids := make([]string, 0) s := make([]map[string]interface{}, 0) for _, object := range objects { // summary mapping := map[string]interface{}{ "db_instance_id": object["DBInstanceId"], "engine": object["Engine"], "engine_version": object["EngineVersion"], "db_instance_description": object["Description"], "status": object["Status"], "payment_type": convertChargeTypeToPaymentType(object["ChargeType"]), "region_id": object["RegionId"], "zone_id": object["ZoneId"], "vpc_id": object["VpcId"], "vswitch_id": object["VswitchId"], "gmt_created": object["GmtCreated"], "gmt_modified": object["GmtModified"], "gmt_expired": object["ExpireTime"], "lock_mode": object["LockMode"], "lock_reason": object["LockReason"], } // cpu,mem,cache instanceResp, err := selectDBService.DescribeSelectDBDbInstance(object["DBInstanceId"].(string)) if err != nil { return WrapErrorf(err, DataDefaultErrorMsg, "alicloud_selectdb_db_instance", AlibabaCloudSdkGoERROR) } result := instanceResp["DBClusterList"] cpuPrepaid := 0 cpuPostpaid := 0 memPrepaid := 0 memPostpaid := 0 cachePrepaid := 0 cachePostpaid := 0 clusterPrepaidCount := 0 clusterPostpaidCount := 0 for _, v := range result.([]interface{}) { item := v.(map[string]interface{}) if item["ChargeType"].(string) == "Postpaid" { cpuP, _ := item["CpuCores"].(json.Number).Int64() cpuPostpaid += int(cpuP) memP, _ := item["Memory"].(json.Number).Int64() memPostpaid += int(memP) cacheP, _ := item["CacheStorageSizeGB"].(json.Number).Int64() cachePostpaid += int(cacheP) clusterPostpaidCount += 1 } if item["ChargeType"].(string) == "Prepaid" { cpuP, _ := item["CpuCores"].(json.Number).Int64() cpuPrepaid += int(cpuP) memP, _ := item["Memory"].(json.Number).Int64() memPrepaid += int(memP) cacheP, _ := item["CacheStorageSizeGB"].(json.Number).Int64() cachePrepaid += int(cacheP) clusterPrepaidCount += 1 } } mapping["cpu_prepaid"] = cpuPrepaid mapping["memory_prepaid"] = memPrepaid mapping["cache_size_prepaid"] = cachePrepaid mapping["cpu_postpaid"] = cpuPostpaid mapping["memory_postpaid"] = memPostpaid mapping["cache_size_postpaid"] = cachePostpaid mapping["cluster_count_prepaid"] = clusterPrepaidCount mapping["cluster_count_postpaid"] = clusterPostpaidCount mapping["engine_minor_version"] = instanceResp["EngineMinorVersion"] mapping["sub_domain"] = instanceResp["SubDomain"] id := fmt.Sprint(object["DBInstanceId"]) mapping["id"] = id ids = append(ids, id) s = append(s, mapping) } d.SetId(dataResourceIdHash(ids)) if err := d.Set("ids", ids); err != nil { return WrapError(err) } if err := d.Set("instances", s); err != nil { return WrapError(err) } if output, ok := d.GetOk("output_file"); ok && output.(string) != "" { writeToFile(output.(string), s) } return nil }