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 +}