Skip to content

Commit e585f21

Browse files
committed
add cfs action
1 parent 4a36f4a commit e585f21

23 files changed

+1731
-5
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ require (
3030
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.0.493
3131
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.576
3232
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.539
33-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.562
33+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.581
3434
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.403
3535
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.445
3636
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544
3737
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.412
38-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.578
38+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.581
3939
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.553
4040
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.572
4141
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.199 h1:VyOKZOl
478478
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.199/go.mod h1:9ldm0D1ToaztnlD2bFC5yjMMqvQfVeAMhvcoCCVnZb8=
479479
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.562 h1:gPdY1ow4dh3+Fs0ShjpiX9u+lQLjSHuH9OCBXuoin+Q=
480480
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.562/go.mod h1:eC3p0uhPlovCmDlIhwQTej95aj33O5TI4nNHJQpH+8g=
481+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.581 h1:Ei818gJRB9wd1sGux9x9Hi3l9XwfYbPBhri6T3aYorc=
482+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.581/go.mod h1:T7/YP64GYsB74saN6wG9IOQ1/XZFWX2MKEM9tphORYk=
481483
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.403 h1:rD9H4dQkULnRpq1BiD2KuDKsd9VEKHun2gMT+V6DNOE=
482484
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.403/go.mod h1:yWwwGj2gV0hRPfM9GXG4EgDee0cEWYcAwl/M8CTTvzM=
483485
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.445 h1:ZUtZLAXy7xQbDipfEIPEBahjHBoJ+hTAbQYaqjiwFAg=
@@ -559,6 +561,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.576/go.mod
559561
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.577/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
560562
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.578 h1:dfSNB1i1dOgGQ/WBAlWax7iLFAIiodDSr9xDIwPNLDM=
561563
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.578/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
564+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.581 h1:D9CgaCBTobVR13v0ZTGV/41hbv+l5DFCsWD2Sia83i4=
565+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.581/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
562566
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.445 h1:Bh7XD0ypNMHYyBOM8hhKsSu+y0VVKUnJVS+YKKhfpGg=
563567
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.445/go.mod h1:jMDD351efCFpT1+KVFbcpu6SbmP4TYmp4qkoCfr63nQ=
564568
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.553 h1:Pl1kYgFhJp0QSoVFSzRsiGk+HfEAkBTQg7+O60tytNA=
Lines changed: 254 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
/*
2+
Use this data source to query detailed information of cfs available_zone
3+
4+
Example Usage
5+
6+
```hcl
7+
data "tencentcloud_cfs_available_zone" "available_zone" {}
8+
```
9+
*/
10+
package tencentcloud
11+
12+
import (
13+
"context"
14+
15+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
16+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
17+
cfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719"
18+
)
19+
20+
func dataSourceTencentCloudCfsAvailableZone() *schema.Resource {
21+
return &schema.Resource{
22+
Read: dataSourceTencentCloudCfsAvailableZoneRead,
23+
Schema: map[string]*schema.Schema{
24+
"region_zones": {
25+
Computed: true,
26+
Type: schema.TypeList,
27+
Description: "Information such as resource availability in each AZ and the supported storage classes and protocols.",
28+
Elem: &schema.Resource{
29+
Schema: map[string]*schema.Schema{
30+
"region": {
31+
Type: schema.TypeString,
32+
Computed: true,
33+
Description: "Region name, such as `ap-beijing`.",
34+
},
35+
"region_name": {
36+
Type: schema.TypeString,
37+
Computed: true,
38+
Description: "Region name, such as `bj`.",
39+
},
40+
"region_status": {
41+
Type: schema.TypeString,
42+
Computed: true,
43+
Description: "Region availability. If a region has at least one AZ where resources are purchasable, this value will be AVAILABLE; otherwise, it will be UNAVAILABLE.",
44+
},
45+
"zones": {
46+
Type: schema.TypeList,
47+
Computed: true,
48+
Description: "Array of AZs.",
49+
Elem: &schema.Resource{
50+
Schema: map[string]*schema.Schema{
51+
"zone": {
52+
Type: schema.TypeString,
53+
Computed: true,
54+
Description: "AZ name.",
55+
},
56+
"zone_id": {
57+
Type: schema.TypeInt,
58+
Computed: true,
59+
Description: "AZ ID.",
60+
},
61+
"zone_cn_name": {
62+
Type: schema.TypeString,
63+
Computed: true,
64+
Description: "Chinese name of an AZ.",
65+
},
66+
"types": {
67+
Type: schema.TypeList,
68+
Computed: true,
69+
Description: "Array of classes.",
70+
Elem: &schema.Resource{
71+
Schema: map[string]*schema.Schema{
72+
"protocols": {
73+
Type: schema.TypeList,
74+
Computed: true,
75+
Description: "Protocol and sale details.",
76+
Elem: &schema.Resource{
77+
Schema: map[string]*schema.Schema{
78+
"sale_status": {
79+
Type: schema.TypeString,
80+
Computed: true,
81+
Description: " Sale status. Valid values: sale_out (sold out), saling (purchasable), no_saling (non-purchasable).",
82+
},
83+
"protocol": {
84+
Type: schema.TypeString,
85+
Computed: true,
86+
Description: "Protocol type. Valid values: NFS, CIFS.",
87+
},
88+
},
89+
},
90+
},
91+
"type": {
92+
Type: schema.TypeString,
93+
Computed: true,
94+
Description: "Storage class. Valid values: SD (standard storage) and HP (high-performance storage).",
95+
},
96+
"prepayment": {
97+
Type: schema.TypeBool,
98+
Computed: true,
99+
Description: "Indicates whether prepaid is supported. true: yes; false: no.",
100+
},
101+
},
102+
},
103+
},
104+
"zone_name": {
105+
Type: schema.TypeString,
106+
Computed: true,
107+
Description: "Chinese and English names of an AZ.",
108+
},
109+
},
110+
},
111+
},
112+
"region_cn_name": {
113+
Type: schema.TypeString,
114+
Computed: true,
115+
Description: "Region chinese name, such as `Guangzhou`.",
116+
},
117+
},
118+
},
119+
},
120+
121+
"result_output_file": {
122+
Type: schema.TypeString,
123+
Optional: true,
124+
Description: "Used to save results.",
125+
},
126+
},
127+
}
128+
}
129+
130+
func dataSourceTencentCloudCfsAvailableZoneRead(d *schema.ResourceData, meta interface{}) error {
131+
defer logElapsed("data_source.tencentcloud_cfs_available_zone.read")()
132+
defer inconsistentCheck(d, meta)()
133+
134+
logId := getLogId(contextNil)
135+
136+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
137+
138+
service := CfsService{client: meta.(*TencentCloudClient).apiV3Conn}
139+
140+
var regionZones []*cfs.AvailableRegion
141+
142+
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
143+
result, e := service.DescribeCfsAvailableZoneByFilter(ctx)
144+
if e != nil {
145+
return retryError(e)
146+
}
147+
regionZones = result
148+
return nil
149+
})
150+
if err != nil {
151+
return err
152+
}
153+
154+
tmpList := make([]map[string]interface{}, 0, len(regionZones))
155+
156+
if regionZones != nil {
157+
for _, availableRegion := range regionZones {
158+
availableRegionMap := map[string]interface{}{}
159+
160+
if availableRegion.Region != nil {
161+
availableRegionMap["region"] = availableRegion.Region
162+
}
163+
164+
if availableRegion.RegionName != nil {
165+
availableRegionMap["region_name"] = availableRegion.RegionName
166+
}
167+
168+
if availableRegion.RegionStatus != nil {
169+
availableRegionMap["region_status"] = availableRegion.RegionStatus
170+
}
171+
172+
if availableRegion.Zones != nil {
173+
zonesList := []interface{}{}
174+
for _, zones := range availableRegion.Zones {
175+
zonesMap := map[string]interface{}{}
176+
177+
if zones.Zone != nil {
178+
zonesMap["zone"] = zones.Zone
179+
}
180+
181+
if zones.ZoneId != nil {
182+
zonesMap["zone_id"] = zones.ZoneId
183+
}
184+
185+
if zones.ZoneCnName != nil {
186+
zonesMap["zone_cn_name"] = zones.ZoneCnName
187+
}
188+
189+
if zones.Types != nil {
190+
typesList := []interface{}{}
191+
for _, types := range zones.Types {
192+
typesMap := map[string]interface{}{}
193+
194+
if types.Protocols != nil {
195+
protocolsList := []interface{}{}
196+
for _, protocols := range types.Protocols {
197+
protocolsMap := map[string]interface{}{}
198+
199+
if protocols.SaleStatus != nil {
200+
protocolsMap["sale_status"] = protocols.SaleStatus
201+
}
202+
203+
if protocols.Protocol != nil {
204+
protocolsMap["protocol"] = protocols.Protocol
205+
}
206+
207+
protocolsList = append(protocolsList, protocolsMap)
208+
}
209+
210+
typesMap["protocols"] = []interface{}{protocolsList}
211+
}
212+
213+
if types.Type != nil {
214+
typesMap["type"] = types.Type
215+
}
216+
217+
if types.Prepayment != nil {
218+
typesMap["prepayment"] = types.Prepayment
219+
}
220+
221+
typesList = append(typesList, typesMap)
222+
}
223+
224+
zonesMap["types"] = []interface{}{typesList}
225+
}
226+
227+
if zones.ZoneName != nil {
228+
zonesMap["zone_name"] = zones.ZoneName
229+
}
230+
231+
zonesList = append(zonesList, zonesMap)
232+
}
233+
234+
availableRegionMap["zones"] = []interface{}{zonesList}
235+
}
236+
237+
if availableRegion.RegionCnName != nil {
238+
availableRegionMap["region_cn_name"] = availableRegion.RegionCnName
239+
}
240+
tmpList = append(tmpList, availableRegionMap)
241+
}
242+
243+
_ = d.Set("region_zones", tmpList)
244+
}
245+
246+
d.SetId("CfsAvailableZone")
247+
output, ok := d.GetOk("result_output_file")
248+
if ok && output.(string) != "" {
249+
if e := writeToFile(output.(string), tmpList); e != nil {
250+
return e
251+
}
252+
}
253+
return nil
254+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
7+
)
8+
9+
func TestAccTencentCloudCfsAvailableZoneDataSource_basic(t *testing.T) {
10+
t.Parallel()
11+
resource.Test(t, resource.TestCase{
12+
PreCheck: func() {
13+
testAccPreCheck(t)
14+
},
15+
Providers: testAccProviders,
16+
Steps: []resource.TestStep{
17+
{
18+
Config: testAccCfsAvailableZoneDataSource,
19+
Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cfs_available_zone.available_zone")),
20+
},
21+
},
22+
})
23+
}
24+
25+
const testAccCfsAvailableZoneDataSource = `
26+
27+
data "tencentcloud_cfs_available_zone" "available_zone" {
28+
}
29+
30+
`

0 commit comments

Comments
 (0)