Skip to content

Commit 7a504b2

Browse files
committed
fix(instance): wait for volumes after server deletion
1 parent 2109482 commit 7a504b2

File tree

1 file changed

+45
-15
lines changed

1 file changed

+45
-15
lines changed

internal/namespaces/instance/v1/custom_server_delete.go

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -190,22 +190,9 @@ func serverDeleteCommand() *core.Command {
190190
case volume.VolumeType == instance.VolumeServerVolumeTypeScratch:
191191
continue
192192
}
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))
204194
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
209196
}
210197
humanSize, err := human.Marshal(volume.Size, nil)
211198
if err != nil {
@@ -235,3 +222,46 @@ func serverDeleteCommand() *core.Command {
235222
},
236223
}
237224
}
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

Comments
 (0)