From b4647f874cc74ea082a71548e927e07716163f65 Mon Sep 17 00:00:00 2001 From: lmasson Date: Tue, 20 Feb 2024 16:57:41 +0100 Subject: [PATCH] feat(baremetal): add wait support delete server --- internal/namespaces/baremetal/v1/custom.go | 1 + .../baremetal/v1/custome_server_delete.go | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 internal/namespaces/baremetal/v1/custome_server_delete.go diff --git a/internal/namespaces/baremetal/v1/custom.go b/internal/namespaces/baremetal/v1/custom.go index 7cfe0790ec..fc70186a21 100644 --- a/internal/namespaces/baremetal/v1/custom.go +++ b/internal/namespaces/baremetal/v1/custom.go @@ -18,6 +18,7 @@ func GetCommands() *core.Commands { cmds.MustFind("baremetal", "server", "create").Override(serverCreateBuilder) cmds.MustFind("baremetal", "server", "install").Override(serverInstallBuilder) + cmds.MustFind("baremetal", "server", "delete").Override(serverDeleteBuilder) cmds.MustFind("baremetal", "server", "list").Override(serverListBuilder) // Action commands diff --git a/internal/namespaces/baremetal/v1/custome_server_delete.go b/internal/namespaces/baremetal/v1/custome_server_delete.go new file mode 100644 index 0000000000..9615cdc16c --- /dev/null +++ b/internal/namespaces/baremetal/v1/custome_server_delete.go @@ -0,0 +1,32 @@ +package baremetal + +import ( + "context" + "errors" + "net/http" + + "github.com/scaleway/scaleway-cli/v2/internal/core" + "github.com/scaleway/scaleway-sdk-go/api/baremetal/v1" + "github.com/scaleway/scaleway-sdk-go/scw" +) + +func serverDeleteBuilder(c *core.Command) *core.Command { + c.WaitFunc = func(ctx context.Context, argsI, respI interface{}) (interface{}, error) { + server, err := baremetal.NewAPI(core.ExtractClient(ctx)).WaitForServer(&baremetal.WaitForServerRequest{ + ServerID: argsI.(*baremetal.DeleteServerRequest).ServerID, + Zone: argsI.(*baremetal.DeleteServerRequest).Zone, + Timeout: scw.TimeDurationPtr(serverActionTimeout), + RetryInterval: core.DefaultRetryInterval, + }) + if err != nil { + notFoundError := &scw.ResourceNotFoundError{} + responseError := &scw.ResponseError{} + if errors.As(err, &responseError) && responseError.StatusCode == http.StatusNotFound || errors.As(err, ¬FoundError) { + return server, nil + } + return nil, err + } + return server, nil + } + return c +}