Skip to content

Commit 59dcef3

Browse files
authored
fix(instance): wait for volumes after server deletion (scaleway#4149)
1 parent c1d54eb commit 59dcef3

File tree

153 files changed

+133958
-139613
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

153 files changed

+133958
-139613
lines changed

internal/namespaces/instance/v1/custom_server_create_builder.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ func (sb *ServerBuilder) ValidateVolumes() error {
274274
return err
275275
}
276276
} else {
277-
logger.Warningf("skipping root volume validation")
277+
logger.Warningf("skipping root volume validation\n")
278278
}
279279

280280
// Validate total local volume sizes.
@@ -283,7 +283,7 @@ func (sb *ServerBuilder) ValidateVolumes() error {
283283
return err
284284
}
285285
} else {
286-
logger.Warningf("skip local volume size validation")
286+
logger.Warningf("skip local volume size validation\n")
287287
}
288288

289289
// Sanitize the volume map to respect API schemas

internal/namespaces/instance/v1/custom_server_delete.go

Lines changed: 44 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,45 @@ 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+
return nil
266+
}

internal/namespaces/instance/v1/testdata/test-create-server-errors-error-already-attached-additional-volume-id.cassette.yaml

Lines changed: 1722 additions & 1984 deletions
Large diffs are not rendered by default.
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
🎲🎲🎲 EXIT CODE: 1 🎲🎲🎲
22
🟥🟥🟥 STDERR️️ 🟥🟥🟥️
3-
Cannot create the server: failed to build volume template: volume 3260c736-5a82-4d5e-b455-439a07e52317 is already attached to f8050da0-db3d-45c9-b51f-6215300b07d8 server
3+
Cannot create the server: failed to build volume template: volume 2fa51c6d-69b2-4bdd-bef8-80f011e72f33 is already attached to 8c6642d3-5c68-4e73-aa61-f655e5fbbe9c server
44
🟥🟥🟥 JSON STDERR 🟥🟥🟥
55
{
6-
"error": "cannot create the server: failed to build volume template: volume 3260c736-5a82-4d5e-b455-439a07e52317 is already attached to f8050da0-db3d-45c9-b51f-6215300b07d8 server"
6+
"error": "cannot create the server: failed to build volume template: volume 2fa51c6d-69b2-4bdd-bef8-80f011e72f33 is already attached to 8c6642d3-5c68-4e73-aa61-f655e5fbbe9c server"
77
}

internal/namespaces/instance/v1/testdata/test-create-server-errors-error-disallow-existing-root-volume-id.cassette.yaml

Lines changed: 813 additions & 973 deletions
Large diffs are not rendered by default.

internal/namespaces/instance/v1/testdata/test-create-server-errors-error-forbidden-ip.cassette.yaml

Lines changed: 976 additions & 916 deletions
Large diffs are not rendered by default.

internal/namespaces/instance/v1/testdata/test-create-server-errors-error-image-size-is-incompatible-with-instance-type.cassette.yaml

Lines changed: 912 additions & 894 deletions
Large diffs are not rendered by default.

internal/namespaces/instance/v1/testdata/test-create-server-errors-error-invalid-additional-volume-snapshot-id.cassette.yaml

Lines changed: 790 additions & 950 deletions
Large diffs are not rendered by default.

internal/namespaces/instance/v1/testdata/test-create-server-errors-error-invalid-image-label.cassette.yaml

Lines changed: 867 additions & 837 deletions
Large diffs are not rendered by default.

internal/namespaces/instance/v1/testdata/test-create-server-errors-error-invalid-image-uuid.cassette.yaml

Lines changed: 883 additions & 925 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)