Skip to content

Commit 714febb

Browse files
authored
fix(instance): delete server with multiple IPs (#4223)
1 parent 4a401cf commit 714febb

6 files changed

+3425
-1863
lines changed

internal/namespaces/instance/v1/custom_server.go

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -821,15 +821,20 @@ func serverDeleteCommand() *core.Command {
821821
return nil, err
822822
}
823823

824-
if deleteServerArgs.WithIP && server.Server.PublicIP != nil && !server.Server.PublicIP.Dynamic {
825-
err = api.DeleteIP(&instance.DeleteIPRequest{
826-
Zone: deleteServerArgs.Zone,
827-
IP: server.Server.PublicIP.ID,
828-
})
829-
if err != nil {
830-
return nil, err
824+
if deleteServerArgs.WithIP && server.Server.PublicIPs != nil {
825+
for _, ip := range server.Server.PublicIPs {
826+
if ip.Dynamic {
827+
continue
828+
}
829+
err = api.DeleteIP(&instance.DeleteIPRequest{
830+
Zone: deleteServerArgs.Zone,
831+
IP: ip.ID,
832+
})
833+
if err != nil {
834+
return nil, err
835+
}
836+
_, _ = interactive.Printf("successfully deleted ip %s\n", ip.Address.String())
831837
}
832-
_, _ = interactive.Printf("successfully deleted ip %s\n", server.Server.PublicIP.Address.String())
833838
}
834839

835840
deletedVolumeMessages := [][2]string(nil)

internal/namespaces/instance/v1/custom_server_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,5 +336,31 @@ func Test_ServerDelete(t *testing.T) {
336336
DisableParallel: true,
337337
}))
338338

339+
t.Run("with multiple IPs", core.Test(&core.TestConfig{
340+
Commands: instance.GetCommands(),
341+
BeforeFunc: core.ExecStoreBeforeCmd("Server", "scw instance server create stopped=true image=ubuntu-bionic ip=both"),
342+
Cmd: `scw instance server delete {{ .Server.ID }} with-ip=true with-volumes=all`,
343+
Check: core.TestCheckCombine(
344+
core.TestCheckGolden(),
345+
core.TestCheckExitCode(0),
346+
func(t *testing.T, ctx *core.CheckFuncCtx) {
347+
t.Helper()
348+
349+
require.NotNil(t, ctx.Meta["Server"])
350+
server := ctx.Meta["Server"].(*instanceSDK.Server)
351+
assert.Len(t, server.PublicIPs, 2)
352+
api := instanceSDK.NewAPI(ctx.Client)
353+
for _, ip := range server.PublicIPs {
354+
_, err := api.GetIP(&instanceSDK.GetIPRequest{
355+
Zone: server.Zone,
356+
IP: ip.ID,
357+
})
358+
assert.Error(t, err, "expected IP to be deleted")
359+
}
360+
},
361+
),
362+
DisableParallel: true,
363+
}))
364+
339365
interactive.IsInteractive = false
340366
}

0 commit comments

Comments
 (0)