Skip to content

Commit 280631c

Browse files
authored
Merge pull request #1522 from tencentcloudstack/feat/cfs_support
add cfs action
2 parents 4a36f4a + 57c8f11 commit 280631c

28 files changed

+1975
-5
lines changed

.changelog/1522.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
```release-note:new-data-source
2+
tencentcloud_cfs_mount_targets
3+
```
4+
5+
```release-note:new-data-source
6+
tencentcloud_cfs_file_system_clients
7+
```
8+
9+
```release-note:new-data-source
10+
tencentcloud_cfs_available_zone
11+
```
12+
13+
```release-note:new-resource
14+
tencentcloud_cfs_snapshot
15+
```
16+
17+
```release-note:new-resource
18+
tencentcloud_cfs_sign_up_cfs_service
19+
```

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: 257 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,257 @@
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+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
19+
)
20+
21+
func dataSourceTencentCloudCfsAvailableZone() *schema.Resource {
22+
return &schema.Resource{
23+
Read: dataSourceTencentCloudCfsAvailableZoneRead,
24+
Schema: map[string]*schema.Schema{
25+
"region_zones": {
26+
Computed: true,
27+
Type: schema.TypeList,
28+
Description: "Information such as resource availability in each AZ and the supported storage classes and protocols.",
29+
Elem: &schema.Resource{
30+
Schema: map[string]*schema.Schema{
31+
"region": {
32+
Type: schema.TypeString,
33+
Computed: true,
34+
Description: "Region name, such as `ap-beijing`.",
35+
},
36+
"region_name": {
37+
Type: schema.TypeString,
38+
Computed: true,
39+
Description: "Region name, such as `bj`.",
40+
},
41+
"region_status": {
42+
Type: schema.TypeString,
43+
Computed: true,
44+
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.",
45+
},
46+
"zones": {
47+
Type: schema.TypeList,
48+
Computed: true,
49+
Description: "Array of AZs.",
50+
Elem: &schema.Resource{
51+
Schema: map[string]*schema.Schema{
52+
"zone": {
53+
Type: schema.TypeString,
54+
Computed: true,
55+
Description: "AZ name.",
56+
},
57+
"zone_id": {
58+
Type: schema.TypeInt,
59+
Computed: true,
60+
Description: "AZ ID.",
61+
},
62+
"zone_cn_name": {
63+
Type: schema.TypeString,
64+
Computed: true,
65+
Description: "Chinese name of an AZ.",
66+
},
67+
"types": {
68+
Type: schema.TypeList,
69+
Computed: true,
70+
Description: "Array of classes.",
71+
Elem: &schema.Resource{
72+
Schema: map[string]*schema.Schema{
73+
"protocols": {
74+
Type: schema.TypeList,
75+
Computed: true,
76+
Description: "Protocol and sale details.",
77+
Elem: &schema.Resource{
78+
Schema: map[string]*schema.Schema{
79+
"sale_status": {
80+
Type: schema.TypeString,
81+
Computed: true,
82+
Description: " Sale status. Valid values: sale_out (sold out), saling (purchasable), no_saling (non-purchasable).",
83+
},
84+
"protocol": {
85+
Type: schema.TypeString,
86+
Computed: true,
87+
Description: "Protocol type. Valid values: NFS, CIFS.",
88+
},
89+
},
90+
},
91+
},
92+
"type": {
93+
Type: schema.TypeString,
94+
Computed: true,
95+
Description: "Storage class. Valid values: SD (standard storage) and HP (high-performance storage).",
96+
},
97+
"prepayment": {
98+
Type: schema.TypeBool,
99+
Computed: true,
100+
Description: "Indicates whether prepaid is supported. true: yes; false: no.",
101+
},
102+
},
103+
},
104+
},
105+
"zone_name": {
106+
Type: schema.TypeString,
107+
Computed: true,
108+
Description: "Chinese and English names of an AZ.",
109+
},
110+
},
111+
},
112+
},
113+
"region_cn_name": {
114+
Type: schema.TypeString,
115+
Computed: true,
116+
Description: "Region chinese name, such as `Guangzhou`.",
117+
},
118+
},
119+
},
120+
},
121+
122+
"result_output_file": {
123+
Type: schema.TypeString,
124+
Optional: true,
125+
Description: "Used to save results.",
126+
},
127+
},
128+
}
129+
}
130+
131+
func dataSourceTencentCloudCfsAvailableZoneRead(d *schema.ResourceData, meta interface{}) error {
132+
defer logElapsed("data_source.tencentcloud_cfs_available_zone.read")()
133+
defer inconsistentCheck(d, meta)()
134+
135+
logId := getLogId(contextNil)
136+
137+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
138+
139+
service := CfsService{client: meta.(*TencentCloudClient).apiV3Conn}
140+
141+
var regionZones []*cfs.AvailableRegion
142+
143+
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
144+
result, e := service.DescribeCfsAvailableZoneByFilter(ctx)
145+
if e != nil {
146+
return retryError(e)
147+
}
148+
regionZones = result
149+
return nil
150+
})
151+
if err != nil {
152+
return err
153+
}
154+
155+
ids := make([]string, 0, len(regionZones))
156+
tmpList := make([]map[string]interface{}, 0, len(regionZones))
157+
158+
for _, availableRegion := range regionZones {
159+
availableRegionMap := map[string]interface{}{}
160+
161+
if availableRegion.Region != nil {
162+
availableRegionMap["region"] = availableRegion.Region
163+
}
164+
165+
if availableRegion.RegionName != nil {
166+
availableRegionMap["region_name"] = availableRegion.RegionName
167+
}
168+
169+
if availableRegion.RegionStatus != nil {
170+
availableRegionMap["region_status"] = availableRegion.RegionStatus
171+
}
172+
173+
if availableRegion.Zones != nil {
174+
zonesList := []interface{}{}
175+
for _, zones := range availableRegion.Zones {
176+
zonesMap := map[string]interface{}{}
177+
178+
if zones.Zone != nil {
179+
zonesMap["zone"] = zones.Zone
180+
}
181+
182+
if zones.ZoneId != nil {
183+
zonesMap["zone_id"] = zones.ZoneId
184+
}
185+
186+
if zones.ZoneCnName != nil {
187+
zonesMap["zone_cn_name"] = zones.ZoneCnName
188+
}
189+
190+
if zones.Types != nil {
191+
typesList := []interface{}{}
192+
for _, types := range zones.Types {
193+
typesMap := map[string]interface{}{}
194+
195+
if types.Protocols != nil {
196+
protocolsList := []interface{}{}
197+
for _, protocols := range types.Protocols {
198+
protocolsMap := map[string]interface{}{}
199+
200+
if protocols.SaleStatus != nil {
201+
protocolsMap["sale_status"] = protocols.SaleStatus
202+
}
203+
204+
if protocols.Protocol != nil {
205+
protocolsMap["protocol"] = protocols.Protocol
206+
}
207+
208+
protocolsList = append(protocolsList, protocolsMap)
209+
}
210+
211+
typesMap["protocols"] = protocolsList
212+
}
213+
214+
if types.Type != nil {
215+
typesMap["type"] = types.Type
216+
}
217+
218+
if types.Prepayment != nil {
219+
typesMap["prepayment"] = types.Prepayment
220+
}
221+
222+
typesList = append(typesList, typesMap)
223+
}
224+
225+
zonesMap["types"] = typesList
226+
}
227+
228+
if zones.ZoneName != nil {
229+
zonesMap["zone_name"] = zones.ZoneName
230+
}
231+
232+
zonesList = append(zonesList, zonesMap)
233+
}
234+
235+
availableRegionMap["zones"] = zonesList
236+
}
237+
238+
if availableRegion.RegionCnName != nil {
239+
availableRegionMap["region_cn_name"] = availableRegion.RegionCnName
240+
}
241+
ids = append(ids, *availableRegion.Region)
242+
tmpList = append(tmpList, availableRegionMap)
243+
}
244+
245+
d.SetId(helper.DataResourceIdsHash(ids))
246+
err = d.Set("region_zones", tmpList)
247+
if err != nil {
248+
return err
249+
}
250+
output, ok := d.GetOk("result_output_file")
251+
if ok && output.(string) != "" {
252+
if e := writeToFile(output.(string), tmpList); e != nil {
253+
return e
254+
}
255+
}
256+
return nil
257+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
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+
`

0 commit comments

Comments
 (0)