]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
Fix several nagging bugs in lxc-destroy
authorSerge Hallyn <serge.hallyn@canonical.com>
Mon, 23 Jan 2012 18:59:14 +0000 (12:59 -0600)
committerDaniel Lezcano <daniel.lezcano@free.fr>
Sun, 26 Feb 2012 09:44:40 +0000 (10:44 +0100)
Don't delete a running container.  If it's running, abort the delete
unless a new '-f' (force) flag is given, in which case, stop it first.

Handle the case where we can't find $rootfs in config

Fix broken detection of lvm backing store

Signed-off-by: Serge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
src/lxc/lxc-destroy.in

index c662c1f52231e0b62948114e83ef7d359f692d67..b0f2da5a435daf244f4e3db72c0c263a34448d47 100644 (file)
@@ -26,7 +26,8 @@
 #
 
 usage() {
-    echo "usage: $0 -n <name>"
+    echo "usage: $0 -n <name> [-f]"
+    echo "  -f: if a container is running, stop it first.  Default is to abort"
 }
 
 if [ "$(id -u)" != "0" ]; then
@@ -34,10 +35,11 @@ if [ "$(id -u)" != "0" ]; then
    exit 1
 fi
 
-shortoptions='n:'
+shortoptions='n:f'
 longoptions='name:'
 localstatedir=@LOCALSTATEDIR@
 lxc_path=@LXCPATH@
+force=0
 
 getopt=$(getopt -o $shortoptions --longoptions  $longoptions -- "$@")
 if [ $? != 0 ]; then
@@ -54,6 +56,10 @@ while true; do
                lxc_name=$1
                shift
                ;;
+           -f)
+               force=1
+               shift
+               ;;
             --)
                shift
                break;;
@@ -76,14 +82,28 @@ if [ ! -d "$lxc_path/$lxc_name" ]; then
     exit 1
 fi
 
+# make sure the container isn't running
+lxc-info -n $lxc_name 2>/dev/null | grep -q RUNNING
+if [ $? -eq 0 ]; then
+       if [ $force -eq 1 ]; then
+               lxc-stop -n $lxc_name
+       else
+               echo "Container $lxc_name is running, aborting the deletion."
+               exit 1
+       fi
+fi
+
 # Deduce the type of rootfs
 # If LVM partition, destroy it.  If anything else, ignore it.  We'll support
 # deletion of others later.
-rootdev=`grep lxc.rootfs $lxc_path/$lxc_name/config | awk -F= '{ print $2 '}`
-if [ -b $rootdev -o -h $rootdev ]; then
-       lvdisplay $rootdev > /dev/null 2>&1
-       if [ $? -eq 0 ]; then
-               lvremove $rootdev
+rootdev=`grep lxc.rootfs $lxc_path/$lxc_name/config 2>/dev/null | sed -e 's/^[^/]*/\//'`
+if [ ! -z "$rootdev" ]; then
+       if [ -b "$rootdev" -o -h "$rootdev" ]; then
+               lvdisplay $rootdev > /dev/null 2>&1
+               if [ $? -eq 0 ]; then
+                       echo "removing backing store: $rootdev"
+                       lvremove -f $rootdev
+               fi
        fi
 fi
 # recursively remove the container to remove old container configuration