1
1
package alibabacloudstack
2
2
3
3
import (
4
+ "encoding/json"
4
5
"log"
5
6
"regexp"
7
+ "strconv"
6
8
"strings"
7
9
8
10
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
11
+ "github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
9
12
"github.com/aliyun/alibaba-cloud-sdk-go/services/ecs"
10
13
"github.com/aliyun/terraform-provider-alibabacloudstack/alibabacloudstack/connectivity"
11
14
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -148,28 +151,45 @@ func dataSourceAlibabacloudStackDisks() *schema.Resource {
148
151
func dataSourceAlibabacloudStackDisksRead (d * schema.ResourceData , meta interface {}) error {
149
152
client := meta .(* connectivity.AlibabacloudStackClient )
150
153
151
- request := ecs . CreateDescribeDisksRequest ()
154
+ request := requests . NewCommonRequest ()
152
155
if strings .ToLower (client .Config .Protocol ) == "https" {
153
156
request .Scheme = "https"
154
157
} else {
155
158
request .Scheme = "http"
156
159
}
157
160
request .RegionId = client .RegionId
158
- request .Headers = map [string ]string {"RegionId" : client .RegionId }
159
- request .QueryParams = map [string ]string {"AccessKeySecret" : client .SecretKey , "Product" : "ecs" , "Department" : client .Department , "ResourceGroup" : client .ResourceGroup }
161
+ request .Method = "POST"
162
+ request .Product = "Ecs"
163
+ request .Version = "2014-05-26"
164
+
165
+ request .ApiName = "DescribeDisks"
166
+ request .Headers = map [string ]string {"RegionId" : client .RegionId , "Content-Type" : requests .Json }
167
+ PageNumber := 1
168
+ request .QueryParams = map [string ]string {
169
+ "AccessKeySecret" : client .SecretKey ,
170
+ "Product" : "ecs" ,
171
+ "Department" : client .Department ,
172
+ "ResourceGroup" : client .ResourceGroup ,
173
+ "RegionId" : client .RegionId ,
174
+ "Action" : "DescribeDisks" ,
175
+ "Version" : "2014-05-26" ,
176
+ "ResourceGroupId" : client .ResourceGroup ,
177
+ "PageSize" : "50" ,
178
+ "PageNumber" : strconv .Itoa (PageNumber ),
179
+ }
160
180
if v , ok := d .GetOk ("ids" ); ok && len (v .([]interface {})) > 0 {
161
- request .DiskIds = convertListToJsonString (v .([]interface {}))
181
+ request .QueryParams [ " DiskIds" ] = convertListToJsonString (v .([]interface {}))
162
182
}
183
+ DiskType := ""
163
184
if v , ok := d .GetOk ("type" ); ok && v .(string ) != "" {
164
- request . DiskType = v .(string )
165
- request .QueryParams ["Type " ] = request . DiskType
185
+ DiskType = v .(string )
186
+ request .QueryParams ["DiskType " ] = DiskType
166
187
}
167
188
if v , ok := d .GetOk ("category" ); ok && v .(string ) != "" {
168
- request .Category = v .(string )
189
+ request .QueryParams [ "DiskCategory" ] = v .(string )
169
190
}
170
- log .Printf ("Disktype25 %v" , request .DiskType )
171
191
if v , ok := d .GetOk ("instance_id" ); ok && v .(string ) != "" {
172
- request .InstanceId = v .(string )
192
+ request .QueryParams [ " InstanceId" ] = v .(string )
173
193
}
174
194
if v , ok := d .GetOk ("tags" ); ok {
175
195
var tags []ecs.DescribeDisksTag
@@ -180,48 +200,55 @@ func dataSourceAlibabacloudStackDisksRead(d *schema.ResourceData, meta interface
180
200
Value : value .(string ),
181
201
})
182
202
}
183
- request .Tag = & tags
203
+ tags_json , _ := json .Marshal (tags )
204
+ request .QueryParams ["Tag" ] = string (tags_json )
184
205
}
185
206
186
- var allDisks []ecs.Disk
187
- request .PageSize = requests .NewInteger (PageSizeLarge )
188
- request .PageNumber = requests .NewInteger (1 )
207
+ var allDisks []interface {}
208
+ resp := make (map [string ]interface {})
189
209
for {
190
210
raw , err := client .WithEcsClient (func (ecsClient * ecs.Client ) (interface {}, error ) {
191
- return ecsClient .DescribeDisks (request )
211
+ return ecsClient .ProcessCommonRequest (request )
192
212
})
193
213
if err != nil {
194
214
return WrapErrorf (err , DataDefaultErrorMsg , "alibabacloudstack_disks" , request .GetActionName (), AlibabacloudStackSdkGoERROR )
195
215
}
196
- addDebug (request .GetActionName (), raw , request .RpcRequest , request )
197
- response , _ := raw .(* ecs.DescribeDisksResponse )
216
+ addDebug (request .GetActionName (), raw , request , request .QueryParams )
217
+ response , _ := raw .(* responses.CommonResponse )
218
+ err = json .Unmarshal (response .GetHttpContentBytes (), & resp )
219
+ if err != nil {
220
+ return WrapErrorf (err , DataDefaultErrorMsg , "alibabacloudstack_disks" , request .GetActionName (), AlibabacloudStackSdkGoERROR )
221
+ }
222
+ Disks := resp ["Disks" ].(map [string ]interface {})["Disk" ].([]interface {})
198
223
log .Printf ("ecsDescribeDisk25 %v" , response )
199
- if response == nil || len (response . Disks . Disk ) < 1 {
224
+ if response == nil || len (Disks ) < 1 {
200
225
break
201
226
}
227
+ for _ , disk := range Disks {
228
+ allDisks = append (allDisks , disk )
202
229
203
- allDisks = append ( allDisks , response . Disks . Disk ... )
230
+ }
204
231
205
- if len (response . Disks . Disk ) < PageSizeLarge {
232
+ if len (Disks ) < PageNumber * 50 {
206
233
break
207
234
}
208
235
209
- page , err := getNextpageNumber ( request . PageNumber )
236
+ PageNumber = PageNumber + 1
210
237
if err != nil {
211
238
return WrapError (err )
212
239
}
213
- request .PageNumber = page
240
+ request .QueryParams [ " PageNumber" ] = strconv . Itoa ( PageNumber )
214
241
}
215
242
216
- var filteredDisksTemp []ecs. Disk
243
+ var filteredDisksTemp []interface {}
217
244
218
245
nameRegex , ok := d .GetOk ("name_regex" )
219
246
220
- if request . DiskType == "system" || request . DiskType == "data" {
247
+ if DiskType == "system" || DiskType == "data" {
221
248
log .Printf ("entered " )
222
249
for _ , disk := range allDisks {
223
250
224
- if disk .Type == request . DiskType {
251
+ if disk .( map [ string ] interface {})[ " Type" ].( string ) == DiskType {
225
252
filteredDisksTemp = append (filteredDisksTemp , disk )
226
253
}
227
254
@@ -235,7 +262,7 @@ func dataSourceAlibabacloudStackDisksRead(d *schema.ResourceData, meta interface
235
262
r = regexp .MustCompile (nameRegex .(string ))
236
263
}
237
264
for _ , disk := range allDisks {
238
- if r != nil && ! r .MatchString (disk .DiskName ) {
265
+ if r != nil && ! r .MatchString (disk .( map [ string ] interface {})[ " DiskName" ].( string ) ) {
239
266
continue
240
267
}
241
268
filteredDisksTemp = append (filteredDisksTemp , disk )
@@ -246,35 +273,49 @@ func dataSourceAlibabacloudStackDisksRead(d *schema.ResourceData, meta interface
246
273
return disksDescriptionAttributes (d , filteredDisksTemp , meta )
247
274
}
248
275
249
- func disksDescriptionAttributes (d * schema.ResourceData , disks []ecs. Disk , meta interface {}) error {
276
+ func disksDescriptionAttributes (d * schema.ResourceData , disks []interface {} , meta interface {}) error {
250
277
client := meta .(* connectivity.AlibabacloudStackClient )
251
278
ecsService := EcsService {client }
252
279
var ids []string
253
280
var s []map [string ]interface {}
254
- for _ , disk := range disks {
281
+ for _ , diskdata := range disks {
282
+ disk := diskdata .(map [string ]interface {})
283
+ var tag []ecs.Tag
284
+ tags := disk ["Tags" ].(map [string ]interface {})
285
+ if len (tags ["Tag" ].([]interface {})) > 0 {
286
+ for _ , v := range tags ["Tag" ].([]interface {}) {
287
+ if v != nil {
288
+ v = v .(map [string ]interface {})
289
+
290
+ tag = append (tag , ecs.Tag {
291
+ TagKey : v .(map [string ]interface {})["TagKey" ].(string ),
292
+ TagValue : v .(map [string ]interface {})["TagValue" ].(string ),
293
+ })
294
+ }
295
+ }
296
+ }
255
297
mapping := map [string ]interface {}{
256
- "id" : disk . DiskId ,
257
- "name" : disk . DiskName ,
258
- "description" : disk . Description ,
259
- "region_id" : disk . RegionId ,
260
- "availability_zone" : disk . ZoneId ,
261
- "status" : disk . Status ,
262
- "type" : disk . Type ,
263
- "category" : disk . Category ,
264
- "size" : disk . Size ,
265
- "image_id" : disk . ImageId ,
266
- "snapshot_id" : disk . SourceSnapshotId ,
267
- "instance_id" : disk . InstanceId ,
268
- "creation_time" : disk . CreationTime ,
269
- "attached_time" : disk . AttachedTime ,
270
- "detached_time" : disk . DetachedTime ,
271
- "expiration_time" : disk . ExpiredTime ,
272
- "storage_set_id" : disk . StorageSetId ,
273
- "kms_key_id" : disk . KMSKeyId ,
274
- "tags" : ecsService .tagsToMap (disk . Tags . Tag ),
298
+ "id" : disk [ " DiskId" ].( string ) ,
299
+ "name" : disk [ " DiskName" ].( string ) ,
300
+ "description" : disk [ " Description" ].( string ) ,
301
+ "region_id" : disk [ " RegionId" ].( string ) ,
302
+ "availability_zone" : disk [ " ZoneId" ].( string ) ,
303
+ "status" : disk [ " Status" ].( string ) ,
304
+ "type" : disk [ " Type" ].( string ) ,
305
+ "category" : disk [ " Category" ].( string ) ,
306
+ "size" : disk [ " Size" ].( float64 ) ,
307
+ "image_id" : disk [ " ImageId" ].( string ) ,
308
+ "snapshot_id" : disk [ " SourceSnapshotId" ].( string ) ,
309
+ "instance_id" : disk [ " InstanceId" ].( string ) ,
310
+ "creation_time" : disk [ " CreationTime" ].( string ) ,
311
+ "attached_time" : disk [ " AttachedTime" ].( string ) ,
312
+ "detached_time" : disk [ " DetachedTime" ].( string ) ,
313
+ "expiration_time" : disk [ " ExpiredTime" ].( string ) ,
314
+ "storage_set_id" : disk [ " StorageSetId" ].( string ) ,
315
+ "kms_key_id" : disk [ " KMSKeyId" ].( string ) ,
316
+ "tags" : ecsService .tagsToMap (tag ),
275
317
}
276
-
277
- ids = append (ids , disk .DiskId )
318
+ ids = append (ids , disk ["DiskId" ].(string ))
278
319
s = append (s , mapping )
279
320
}
280
321
0 commit comments