Skip to content

Commit 0568053

Browse files
committed
fix(instance): wait for volumes after server deletion
1 parent d972d49 commit 0568053

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
@@ -185,22 +185,9 @@ func serverDeleteCommand() *core.Command {
185185
case volume.VolumeType == instance.VolumeServerVolumeTypeScratch:
186186
continue
187187
}
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))
199189
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
204191
}
205192
humanSize, err := human.Marshal(volume.Size, nil)
206193
if err != nil {
@@ -226,3 +213,46 @@ func serverDeleteCommand() *core.Command {
226213
},
227214
}
228215
}
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

Comments
 (0)