From: Serge Hallyn Date: Mon, 23 Jan 2012 18:59:14 +0000 (-0600) Subject: Fix several nagging bugs in lxc-destroy X-Git-Tag: lxc-0.8.0-rc2~33 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=76e08ff8a09abd43994d120e415f43a2a1ef4d90;p=thirdparty%2Flxc.git Fix several nagging bugs in lxc-destroy 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 Signed-off-by: Daniel Lezcano --- diff --git a/src/lxc/lxc-destroy.in b/src/lxc/lxc-destroy.in index c662c1f52..b0f2da5a4 100644 --- a/src/lxc/lxc-destroy.in +++ b/src/lxc/lxc-destroy.in @@ -26,7 +26,8 @@ # usage() { - echo "usage: $0 -n " + echo "usage: $0 -n [-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