@@ -190,22 +190,9 @@ func serverDeleteCommand() *core.Command {
190
190
case volume .VolumeType == instance .VolumeServerVolumeTypeScratch :
191
191
continue
192
192
}
193
- if volume .VolumeType == instance .VolumeServerVolumeTypeSbsVolume {
194
- err = block .NewAPI (client ).DeleteVolume (& block.DeleteVolumeRequest {
195
- Zone : deleteServerArgs .Zone ,
196
- VolumeID : volume .ID ,
197
- })
198
- } else {
199
- err = api .DeleteVolume (& instance.DeleteVolumeRequest {
200
- Zone : deleteServerArgs .Zone ,
201
- VolumeID : volume .ID ,
202
- })
203
- }
193
+ err := serverDeleteVolume (volume , api , block .NewAPI (client ))
204
194
if err != nil {
205
- return nil , & core.CliError {
206
- Err : err ,
207
- Hint : "Make sure this resource have been deleted or try to delete it manually." ,
208
- }
195
+ return nil , err
209
196
}
210
197
humanSize , err := human .Marshal (volume .Size , nil )
211
198
if err != nil {
@@ -235,3 +222,46 @@ func serverDeleteCommand() *core.Command {
235
222
},
236
223
}
237
224
}
225
+
226
+ func errorDeletingResource (err error ) error {
227
+ return & core.CliError {
228
+ Err : err ,
229
+ Hint : "Make sure this resource have been deleted or try to delete it manually." ,
230
+ }
231
+ }
232
+
233
+ func serverDeleteVolume (volume * instance.VolumeServer , instanceAPI * instance.API , blockAPI * block.API ) error {
234
+ var err error
235
+
236
+ if volume .VolumeType == instance .VolumeServerVolumeTypeSbsVolume {
237
+ _ , err = blockAPI .WaitForVolumeAndReferences (& block.WaitForVolumeAndReferencesRequest {
238
+ Zone : volume .Zone ,
239
+ VolumeID : volume .ID ,
240
+ })
241
+ if err != nil {
242
+ return errorDeletingResource (err )
243
+ }
244
+
245
+ err = blockAPI .DeleteVolume (& block.DeleteVolumeRequest {
246
+ Zone : volume .Zone ,
247
+ VolumeID : volume .ID ,
248
+ })
249
+ } else {
250
+ _ , err = instanceAPI .WaitForVolume (& instance.WaitForVolumeRequest {
251
+ VolumeID : volume .ID ,
252
+ Zone : volume .Zone ,
253
+ })
254
+ if err != nil {
255
+ return errorDeletingResource (err )
256
+ }
257
+ err = instanceAPI .DeleteVolume (& instance.DeleteVolumeRequest {
258
+ Zone : volume .Zone ,
259
+ VolumeID : volume .ID ,
260
+ })
261
+ }
262
+ if err != nil {
263
+ return errorDeletingResource (err )
264
+
265
+ }
266
+ return nil
267
+ }
0 commit comments