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