Ignore error when force deleting a non-existing container

This patch mimics the behavior of "rm -rf" so that if a container
doesn't exist and you force delete it, it won't error out.

Signed-off-by: Antonio Murdaca <runcom@redhat.com>
This commit is contained in:
Antonio Murdaca
2017-05-16 22:17:34 +02:00
parent c1287819af
commit d1a743674a
2 changed files with 10 additions and 1 deletions
+5 -1
View File
@@ -50,6 +50,7 @@ status of "ubuntu01" as "stopped" the following will delete resources held for
} }
id := context.Args().First() id := context.Args().First()
force := context.Bool("force")
container, err := getContainer(context) container, err := getContainer(context)
if err != nil { if err != nil {
if lerr, ok := err.(libcontainer.Error); ok && lerr.Code() == libcontainer.ContainerNotExists { if lerr, ok := err.(libcontainer.Error); ok && lerr.Code() == libcontainer.ContainerNotExists {
@@ -59,6 +60,9 @@ status of "ubuntu01" as "stopped" the following will delete resources held for
if e := os.RemoveAll(path); e != nil { if e := os.RemoveAll(path); e != nil {
fmt.Fprintf(os.Stderr, "remove %s: %v\n", path, e) fmt.Fprintf(os.Stderr, "remove %s: %v\n", path, e)
} }
if force {
return nil
}
} }
return err return err
} }
@@ -72,7 +76,7 @@ status of "ubuntu01" as "stopped" the following will delete resources held for
case libcontainer.Created: case libcontainer.Created:
return killContainer(container) return killContainer(container)
default: default:
if context.Bool("force") { if force {
return killContainer(container) return killContainer(container)
} else { } else {
return fmt.Errorf("cannot delete container %s that is not stopped: %s\n", id, s) return fmt.Errorf("cannot delete container %s that is not stopped: %s\n", id, s)
+5
View File
@@ -46,3 +46,8 @@ function teardown() {
runc state test_busybox runc state test_busybox
[ "$status" -ne 0 ] [ "$status" -ne 0 ]
} }
@test "runc delete --force ignore not exist" {
runc delete --force notexists
[ "$status" -eq 0 ]
}