From d1a743674a98e23d348b29f52c43436356f56b79 Mon Sep 17 00:00:00 2001 From: Antonio Murdaca Date: Tue, 16 May 2017 22:17:34 +0200 Subject: [PATCH] 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 --- delete.go | 6 +++++- tests/integration/delete.bats | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/delete.go b/delete.go index b43dcaa7..1e0b08f8 100644 --- a/delete.go +++ b/delete.go @@ -50,6 +50,7 @@ status of "ubuntu01" as "stopped" the following will delete resources held for } id := context.Args().First() + force := context.Bool("force") container, err := getContainer(context) if err != nil { 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 { fmt.Fprintf(os.Stderr, "remove %s: %v\n", path, e) } + if force { + return nil + } } return err } @@ -72,7 +76,7 @@ status of "ubuntu01" as "stopped" the following will delete resources held for case libcontainer.Created: return killContainer(container) default: - if context.Bool("force") { + if force { return killContainer(container) } else { return fmt.Errorf("cannot delete container %s that is not stopped: %s\n", id, s) diff --git a/tests/integration/delete.bats b/tests/integration/delete.bats index f4d7d019..c5ed215d 100644 --- a/tests/integration/delete.bats +++ b/tests/integration/delete.bats @@ -46,3 +46,8 @@ function teardown() { runc state test_busybox [ "$status" -ne 0 ] } + +@test "runc delete --force ignore not exist" { + runc delete --force notexists + [ "$status" -eq 0 ] +}