in alibabacloudstack/data_source_apsarastack_ecs_dedicatedhosts.go [269:444]
func dataSourceAlibabacloudStackEcsDedicatedHostsRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
action := "DescribeDedicatedHosts"
request := make(map[string]interface{})
if v, ok := d.GetOk("dedicated_host_name"); ok {
request["DedicatedHostName"] = v
}
if v, ok := d.GetOk("dedicated_host_type"); ok {
request["DedicatedHostType"] = v
}
if v, ok := d.GetOk("dedicated_host_id"); ok {
request["DedicatedHostId"] = v
}
if v, ok := d.GetOk("operation_locks"); ok {
operationLocksMaps := make([]map[string]interface{}, 0)
for _, operationLocks := range v.([]interface{}) {
operationLocksMap := make(map[string]interface{})
operationLocksArg := operationLocks.(map[string]interface{})
operationLocksMap["LockReason"] = operationLocksArg["lock_reason"]
operationLocksMaps = append(operationLocksMaps, operationLocksMap)
}
request["OperationLocks"] = operationLocksMaps
}
if v, ok := d.GetOk("resource_group_id"); ok {
request["ResourceGroupId"] = v
}
if v, ok := d.GetOk("status"); ok {
request["Status"] = v
}
if v, ok := d.GetOk("tags"); ok {
tags := make([]map[string]interface{}, 0)
for key, value := range v.(map[string]interface{}) {
tags = append(tags, map[string]interface{}{
"Key": key,
"Value": value.(string),
})
}
request["Tag"] = tags
}
if v, ok := d.GetOk("zone_id"); ok {
request["ZoneId"] = v
}
request["PageSize"] = PageSizeLarge
request["PageNumber"] = 1
var objects []map[string]interface{}
var dedicatedHostNameRegex *regexp.Regexp
if v, ok := d.GetOk("name_regex"); ok {
r, err := regexp.Compile(v.(string))
if err != nil {
return errmsgs.WrapError(err)
}
dedicatedHostNameRegex = r
}
idsMap := make(map[string]string)
if v, ok := d.GetOk("ids"); ok {
for _, vv := range v.([]interface{}) {
if vv == nil {
continue
}
idsMap[vv.(string)] = vv.(string)
}
}
for {
response, err := client.DoTeaRequest("POST", "ECS", "2014-05-26", action, "", nil, nil, request)
if err != nil {
return err
}
addDebug(action, response, request)
resp, err := jsonpath.Get("$.DedicatedHosts.DedicatedHost", response)
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.FailedGetAttributeMsg, action, "$.DedicatedHosts.DedicatedHost", response)
}
result, _ := resp.([]interface{})
for _, v := range result {
item := v.(map[string]interface{})
if dedicatedHostNameRegex != nil {
if !dedicatedHostNameRegex.MatchString(fmt.Sprint(item["DedicatedHostName"])) {
continue
}
}
if len(idsMap) > 0 {
if _, ok := idsMap[fmt.Sprint(item["DedicatedHostId"])]; !ok {
continue
}
}
objects = append(objects, item)
}
if len(result) < PageSizeLarge {
break
}
request["PageNumber"] = request["PageNumber"].(int) + 1
}
ids := make([]string, 0)
names := make([]interface{}, 0)
s := make([]map[string]interface{}, 0)
for _, object := range objects {
mapping := map[string]interface{}{
"action_on_maintenance": object["ActionOnMaintenance"],
"auto_placement": object["AutoPlacement"],
"auto_release_time": object["AutoReleaseTime"],
"cores": formatInt(object["Cores"]),
"cpu_over_commit_ratio": object["CpuOverCommitRatio"],
"id": fmt.Sprint(object["DedicatedHostId"]),
"dedicated_host_id": fmt.Sprint(object["DedicatedHostId"]),
"dedicated_host_name": object["DedicatedHostName"],
"dedicated_host_type": object["DedicatedHostType"],
"description": object["Description"],
"expired_time": object["ExpiredTime"],
"gpu_spec": object["GPUSpec"],
"machine_id": object["MachineId"],
"payment_type": object["ChargeType"],
"physical_gpus": formatInt(object["PhysicalGpus"]),
"resource_group_id": object["ResourceGroupId"],
"sale_cycle": object["SaleCycle"],
"sockets": formatInt(object["Sockets"]),
"status": object["Status"],
"supported_custom_instance_type_families": object["SupportedCustomInstanceTypeFamilies"].(map[string]interface{})["SupportedCustomInstanceTypeFamily"],
"supported_instance_type_families": object["SupportedInstanceTypeFamilies"].(map[string]interface{})["SupportedInstanceTypeFamily"],
"supported_instance_types_list": object["SupportedInstanceTypesList"].(map[string]interface{})["SupportedInstanceTypesList"],
"zone_id": object["ZoneId"],
}
operationLock := make([]map[string]interface{}, 0)
if operationLockList, ok := object["OperationLocks"].(map[string]interface{})["OperationLock"].([]interface{}); ok {
for _, v := range operationLockList {
if m1, ok := v.(map[string]interface{}); ok {
temp1 := map[string]interface{}{
"lock_reason": m1["LockReason"],
}
operationLock = append(operationLock, temp1)
}
}
}
mapping["operation_locks"] = operationLock
tags := make(map[string]interface{})
t, _ := jsonpath.Get("$.Tags.Tag", object)
if t != nil {
for _, t := range t.([]interface{}) {
key := t.(map[string]interface{})["TagKey"].(string)
value := t.(map[string]interface{})["TagValue"].(string)
if !ignoredTags(key, value) {
tags[key] = value
}
}
}
mapping["tags"] = tags
ids = append(ids, fmt.Sprint(object["DedicatedHostId"]))
names = append(names, object["DedicatedHostName"])
s = append(s, mapping)
}
d.SetId(dataResourceIdHash(ids))
if err := d.Set("ids", ids); err != nil {
return errmsgs.WrapError(err)
}
if err := d.Set("names", names); err != nil {
return errmsgs.WrapError(err)
}
if err := d.Set("hosts", s); err != nil {
return errmsgs.WrapError(err)
}
if output, ok := d.GetOk("output_file"); ok && output.(string) != "" {
if err := writeToFile(output.(string), s); err != nil {
return err
}
}
return nil
}