Skip to content

Commit 0b0f6d8

Browse files
committed
Merge pull request #162 from moul/force-rm
Support of 'scw rm -f' option (Fix #158)
2 parents b3d3a3f + aaea5d8 commit 0b0f6d8

File tree

4 files changed

+21
-4
lines changed

4 files changed

+21
-4
lines changed

README.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -626,11 +626,14 @@ Remove one or more servers.
626626

627627
Options:
628628

629+
-f, --force=false Force the removal of a server
629630
-h, --help=false Print usage
630631

631632
Examples:
632633

633-
$ scw rm my-stopped-server my-second-stopped-server
634+
$ scw rm myserver
635+
$ scw rm -f myserver
636+
$ scw rm my-stopped-server my-second-stopped-serv
634637
$ scw rm $(scw ps -q)
635638
$ scw rm $(scw ps | grep mysql | awk '{print $1}')
636639
```
@@ -1129,6 +1132,7 @@ $ scw inspect myserver | jq '.[0].public_ip.address'
11291132

11301133
* `scw info` now prints user/organization info from the API ([#142](https://github.com/scaleway/scaleway-cli/issues/130)
11311134
* Added helpers to manipulate new `user_data` API ([#150](https://github.com/scaleway/scaleway-cli/issues/150))
1135+
* Support of `scw rm -f/--force` option ([#158](https://github.com/scaleway/scaleway-cli/issues/158))
11321136

11331137
#### Fixes
11341138

pkg/api/helpers.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -515,6 +515,7 @@ func StartServerOnce(api *ScalewayAPI, needle string, wait bool, successChan cha
515515
// DeleteServerSafe tries to delete a server using multiple ways
516516
func (a *ScalewayAPI) DeleteServerSafe(serverID string) error {
517517
// FIXME: also delete attached volumes and ip address
518+
// FIXME: call delete and stop -t in parallel to speed up process
518519
err := a.DeleteServer(serverID)
519520
if err == nil {
520521
logrus.Infof("Server '%s' successfuly deleted", serverID)
@@ -527,7 +528,8 @@ func (a *ScalewayAPI) DeleteServerSafe(serverID string) error {
527528
return nil
528529
}
529530

531+
// FIXME: retry in a loop until timeout or Control+C
530532
logrus.Errorf("Failed to delete server %s", serverID)
531-
logrus.Errorf("Try to run 'scw rm %s' later", serverID)
533+
logrus.Errorf("Try to run 'scw rm -f %s' later", serverID)
532534
return err
533535
}

pkg/cli/cmd_rm.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ var cmdRm = &Command{
1212
Description: "Remove one or more servers",
1313
Help: "Remove one or more servers.",
1414
Examples: `
15+
$ scw rm myserver
16+
$ scw rm -f myserver
1517
$ scw rm my-stopped-server my-second-stopped-server
1618
$ scw rm $(scw ps -q)
1719
$ scw rm $(scw ps | grep mysql | awk '{print $1}')
@@ -20,10 +22,12 @@ var cmdRm = &Command{
2022

2123
func init() {
2224
cmdRm.Flag.BoolVar(&rmHelp, []string{"h", "-help"}, false, "Print usage")
25+
cmdRm.Flag.BoolVar(&rmForce, []string{"f", "-force"}, false, "Force the removal of a server")
2326
}
2427

2528
// Flags
26-
var rmHelp bool // -h, --help flag
29+
var rmHelp bool // -h, --help flag
30+
var rmForce bool // -f, --force flag
2731

2832
func runRm(cmd *Command, rawArgs []string) error {
2933
if rmHelp {
@@ -35,6 +39,7 @@ func runRm(cmd *Command, rawArgs []string) error {
3539

3640
args := commands.RmArgs{
3741
Servers: rawArgs,
42+
Force: rmForce,
3843
}
3944
ctx := cmd.GetContext(rawArgs)
4045
return commands.RunRm(ctx, args)

pkg/commands/rm.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,20 @@ import (
1313
// RmArgs are flags for the `RunRm` function
1414
type RmArgs struct {
1515
Servers []string
16+
Force bool
1617
}
1718

1819
// RunRm is the handler for 'scw rm'
1920
func RunRm(ctx CommandContext, args RmArgs) error {
2021
hasError := false
2122
for _, needle := range args.Servers {
2223
server := ctx.API.GetServerID(needle)
23-
err := ctx.API.DeleteServer(server)
24+
var err error
25+
if args.Force {
26+
err = ctx.API.DeleteServerSafe(server)
27+
} else {
28+
err = ctx.API.DeleteServer(server)
29+
}
2430
if err != nil {
2531
logrus.Errorf("failed to delete server %s: %s", server, err)
2632
hasError = true

0 commit comments

Comments
 (0)