Skip to content

Commit 16af139

Browse files
tongyimingmikatong
andauthored
Fix/cvm type query by instance charge type (#755)
* [fix]cvm instance type query * [fix]emr import close * support query by instance_charge_type * [fix]update doc Co-authored-by: mikatong <[email protected]>
1 parent c9bdee2 commit 16af139

File tree

3 files changed

+85
-113
lines changed

3 files changed

+85
-113
lines changed

tencentcloud/data_source_tc_instance_types.go

Lines changed: 66 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,20 @@ data "tencentcloud_instance_types" "foo" {
99
cpu_core_count = 2
1010
memory_size = 4
1111
}
12+
13+
data tencentcloud_instance_types "t1c1g" {
14+
cpu_core_count = 1
15+
memory_size = 1
16+
exclude_sold_out=true
17+
filter {
18+
name = "instance-charge-type"
19+
values = ["POSTPAID_BY_HOUR"]
20+
}
21+
filter {
22+
name = "zone"
23+
values = ["ap-shanghai-2"]
24+
}
25+
}
1226
```
1327
*/
1428
package tencentcloud
@@ -60,7 +74,7 @@ func dataSourceInstanceTypes() *schema.Resource {
6074
"name": {
6175
Type: schema.TypeString,
6276
Required: true,
63-
Description: "The filter name. Valid values: `zone` and `instance-family`.",
77+
Description: "The filter name. Valid values: `zone`, `instance-family` and `instance-charge-type`.",
6478
},
6579
"values": {
6680
Type: schema.TypeList,
@@ -149,131 +163,71 @@ func dataSourceTencentCloudInstanceTypesRead(d *schema.ResourceData, meta interf
149163
cpu, cpuOk := d.GetOk("cpu_core_count")
150164
gpu, gpuOk := d.GetOk("gpu_core_count")
151165
memory, memoryOk := d.GetOk("memory_size")
152-
var instanceTypes []*cvm.InstanceTypeConfig
153166
var instanceSellTypes []*cvm.InstanceTypeQuotaItem
154167
var errRet error
155168
var err error
156169
typeList := make([]map[string]interface{}, 0)
157170
ids := make([]string, 0)
158171

159-
if !isExcludeSoldOut {
160-
if v, ok := d.GetOk("availability_zone"); ok {
161-
zone := v.(string)
162-
err = resource.Retry(readRetryTimeout, func() *resource.RetryError {
163-
instanceTypes, errRet = cvmService.DescribeInstanceTypes(ctx, zone)
164-
if errRet != nil {
165-
return retryError(errRet, InternalError)
166-
}
167-
return nil
168-
})
169-
} else {
170-
filters := d.Get("filter").(*schema.Set).List()
171-
filterMap := make(map[string][]string, len(filters))
172-
for _, v := range filters {
173-
item := v.(map[string]interface{})
174-
name := item["name"].(string)
175-
values := item["values"].([]interface{})
176-
filterValues := make([]string, 0, len(values))
177-
for _, value := range values {
178-
filterValues = append(filterValues, value.(string))
179-
}
180-
filterMap[name] = filterValues
181-
}
182-
err = resource.Retry(readRetryTimeout, func() *resource.RetryError {
183-
instanceTypes, errRet = cvmService.DescribeInstanceTypesByFilter(ctx, filterMap)
184-
if errRet != nil {
185-
return retryError(errRet, InternalError)
186-
}
187-
return nil
188-
})
189-
}
190-
if err != nil {
191-
return err
172+
var zone string
173+
var zone_in = 0
174+
if v, ok := d.GetOk("availability_zone"); ok {
175+
zone = v.(string)
176+
zone_in = 1
177+
}
178+
filters := d.Get("filter").(*schema.Set).List()
179+
filterMap := make(map[string][]string, len(filters)+zone_in)
180+
for _, v := range filters {
181+
item := v.(map[string]interface{})
182+
name := item["name"].(string)
183+
values := item["values"].([]interface{})
184+
filterValues := make([]string, 0, len(values))
185+
for _, value := range values {
186+
filterValues = append(filterValues, value.(string))
192187
}
193-
for _, instanceType := range instanceTypes {
194-
flag := true
195-
if cpuOk && int64(cpu.(int)) != *instanceType.CPU {
196-
flag = false
197-
}
198-
if gpuOk && int64(gpu.(int)) != *instanceType.GPU {
199-
flag = false
200-
}
201-
if memoryOk && int64(memory.(int)) != *instanceType.Memory {
202-
flag = false
203-
}
204-
205-
if flag {
206-
mapping := map[string]interface{}{
207-
"availability_zone": instanceType.Zone,
208-
"cpu_core_count": instanceType.CPU,
209-
"gpu_core_count": instanceType.GPU,
210-
"memory_size": instanceType.Memory,
211-
"family": instanceType.InstanceFamily,
212-
"instance_type": instanceType.InstanceType,
213-
}
214-
typeList = append(typeList, mapping)
215-
ids = append(ids, *instanceType.InstanceType)
216-
}
188+
filterMap[name] = filterValues
189+
}
190+
if zone != "" {
191+
filterMap["zone"] = []string{zone}
192+
}
193+
err = resource.Retry(readRetryTimeout, func() *resource.RetryError {
194+
instanceSellTypes, errRet = cvmService.DescribeInstancesSellTypeByFilter(ctx, filterMap)
195+
if errRet != nil {
196+
return retryError(errRet, InternalError)
217197
}
218-
} else {
219-
//exclude sold out
220-
var zone string
221-
var zone_in = 0
222-
if v, ok := d.GetOk("availability_zone"); ok {
223-
zone = v.(string)
224-
zone_in = 1
198+
return nil
199+
})
200+
if err != nil {
201+
return err
202+
}
203+
for _, instanceType := range instanceSellTypes {
204+
flag := true
205+
if cpuOk && int64(cpu.(int)) != *instanceType.Cpu {
206+
flag = false
225207
}
226-
filters := d.Get("filter").(*schema.Set).List()
227-
filterMap := make(map[string][]string, len(filters)+zone_in)
228-
for _, v := range filters {
229-
item := v.(map[string]interface{})
230-
name := item["name"].(string)
231-
values := item["values"].([]interface{})
232-
filterValues := make([]string, 0, len(values))
233-
for _, value := range values {
234-
filterValues = append(filterValues, value.(string))
235-
}
236-
filterMap[name] = filterValues
208+
if gpuOk && int64(gpu.(int)) != *instanceType.Gpu {
209+
flag = false
237210
}
238-
if zone != "" {
239-
filterMap["zone"] = []string{zone}
211+
if memoryOk && int64(memory.(int)) != *instanceType.Memory {
212+
flag = false
240213
}
241-
err = resource.Retry(readRetryTimeout, func() *resource.RetryError {
242-
instanceSellTypes, errRet = cvmService.DescribeInstancesSellTypeByFilter(ctx, filterMap)
243-
if errRet != nil {
244-
return retryError(errRet, InternalError)
245-
}
246-
return nil
247-
})
248-
if err != nil {
249-
return err
214+
if isExcludeSoldOut && CVM_SOLD_OUT_STATUS == *instanceType.Status {
215+
flag = false
250216
}
251-
for _, instanceType := range instanceSellTypes {
252-
flag := true
253-
if cpuOk && int64(cpu.(int)) != *instanceType.Cpu {
254-
flag = false
255-
}
256-
if gpuOk && int64(gpu.(int)) != *instanceType.Gpu {
257-
flag = false
258-
}
259-
if memoryOk && int64(memory.(int)) != *instanceType.Memory {
260-
flag = false
261-
}
262217

263-
if flag {
264-
mapping := map[string]interface{}{
265-
"availability_zone": instanceType.Zone,
266-
"cpu_core_count": instanceType.Cpu,
267-
"gpu_core_count": instanceType.Gpu,
268-
"memory_size": instanceType.Memory,
269-
"family": instanceType.InstanceFamily,
270-
"instance_type": instanceType.InstanceType,
271-
"instance_charge_type": instanceType.InstanceChargeType,
272-
"status": instanceType.Status,
273-
}
274-
typeList = append(typeList, mapping)
275-
ids = append(ids, *instanceType.InstanceType)
218+
if flag {
219+
mapping := map[string]interface{}{
220+
"availability_zone": instanceType.Zone,
221+
"cpu_core_count": instanceType.Cpu,
222+
"gpu_core_count": instanceType.Gpu,
223+
"memory_size": instanceType.Memory,
224+
"family": instanceType.InstanceFamily,
225+
"instance_type": instanceType.InstanceType,
226+
"instance_charge_type": instanceType.InstanceChargeType,
227+
"status": instanceType.Status,
276228
}
229+
typeList = append(typeList, mapping)
230+
ids = append(ids, *instanceType.InstanceType)
277231
}
278232
}
279233

tencentcloud/extension_cvm.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ const (
5454

5555
CVM_STOP_MODE_KEEP_CHARGING = "KEEP_CHARGING"
5656
CVM_STOP_MODE_STOP_CHARGING = "STOP_CHARGING"
57+
CVM_SELL_STATUS = "SELL"
58+
CVM_SOLD_OUT_STATUS = "SOLD_OUT"
59+
MIDLINE = "-"
60+
UNDERLINE = "_"
5761
)
5862

5963
var CVM_CHARGE_TYPE = []string{

website/docs/d/instance_types.html.markdown

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,20 @@ data "tencentcloud_instance_types" "foo" {
1919
cpu_core_count = 2
2020
memory_size = 4
2121
}
22+
23+
data tencentcloud_instance_types "t1c1g" {
24+
cpu_core_count = 1
25+
memory_size = 1
26+
exclude_sold_out = true
27+
filter {
28+
name = "instance-charge-type"
29+
values = ["POSTPAID_BY_HOUR"]
30+
}
31+
filter {
32+
name = "zone"
33+
values = ["ap-shanghai-2"]
34+
}
35+
}
2236
```
2337

2438
## Argument Reference
@@ -35,7 +49,7 @@ The following arguments are supported:
3549

3650
The `filter` object supports the following:
3751

38-
* `name` - (Required) The filter name. Valid values: `zone` and `instance-family`.
52+
* `name` - (Required) The filter name. Valid values: `zone`, `instance-family` and `instance-charge-type`.
3953
* `values` - (Required) The filter values.
4054

4155
## Attributes Reference

0 commit comments

Comments
 (0)