#!/bin/sh
# copyright (C) 2013-2014 FUJITSU LIMITED All Rights Reserved

# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; version 2
# of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.

# check root
if [ ${EUID:-${UID}} != 0 ]; then
    echo "error: Because you are not root, you cannot execute this command. "
    exit 1
fi

umask 022

# check args
if [ $# -lt 1 ]; then
	echo "usage lxcf erase LXCNAME"
	exit 1
fi

# check /opt/lxcf
mkdir -p /opt/lxcf

# check /etc/lxcf/rsc
mkdir -p /etc/lxcf/rsc

# check lxcf.conf
if [ ! -e /etc/lxcf/lxcf.conf ] ; then
  cp -p /usr/lib64/lxcf/lxcf.conf /etc/lxcf/lxcf.conf
fi

# check /etc/hosts
if [ ! -e /etc/hosts ] ; then
   echo "127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4" > /etc/hosts
   echo "::1         localhost localhost.localdomain localhost6 localhost6.localdomain6" >> /etc/hosts
fi

# erase one container
lxcf_erase1() {
  LXCNAME=$1

  if ! /usr/lib64/lxcf/lxcf-parmchk-cname $LXCNAME ; then
    echo "error:" $LXCNAME "is not a container name"
    echo "        The container name must be alphanumeric character, \"-\", and \"_\"."
    exit 1
  fi

  # check lxcf container
#  if [ ! -e /opt/lxcf/${LXCNAME} ] ; then
#        echo "error:" ${LXCNAME} "is the unknown container name"
#	return 1
#  fi

  # ctrl-c
  trap '/usr/lib64/lxcf/lxcf-erase ${LXCNAME}; exit 0' 2

  # check container state
  LXCSTATE=`LANG=C /usr/bin/virsh -c lxc:/// list | /usr/bin/awk '($2 == "'${LXCNAME}'"){print $3}'`

  # stop container
  if [ -n "${LXCSTATE}" ] && [ ${LXCSTATE} = "paused" ] ; then
	/usr/bin/virsh -c lxc:/// resume ${LXCNAME} >& /dev/null
	sleep 3
	/usr/bin/virsh -c lxc:/// destroy ${LXCNAME} >& /dev/null
        echo "stop "${LXCNAME}
	sleep 3
  elif [ -n "${LXCSTATE}" ] && [ ${LXCSTATE} = "running" ] ; then
	/usr/bin/virsh -c lxc:/// destroy ${LXCNAME} >& /dev/null
        echo "stop "${LXCNAME}
	sleep 3
  fi

  sync;sync;sync

  # erase a container
  /usr/bin/virsh -c lxc:/// undefine ${LXCNAME} >& /dev/null

  echo "erase /opt/lxcf/"${LXCNAME}
  if [ -L /opt/lxcf/${LXCNAME} ] ; then
	FILEPATH=`ls -l /opt/lxcf/${LXCNAME} | awk '{n=split($0,a," ");print a[n];}'`
	echo "erase" $FILEPATH
	/bin/rm -rf $FILEPATH
  fi

  /bin/rm -rf /opt/lxcf/${LXCNAME}

  echo "erase /etc/lxcf/rsc/"${LXCNAME}

  /bin/rm -rf /etc/lxcf/rsc/${LXCNAME}

  /usr/lib64/lxcf/lxcf-erase-setup ${LXCNAME}

  # delete known_hosts entry
  sed -i "/^${LXCNAME}[ |,]/d"  /root/.ssh/known_hosts

  echo "erased " ${LXCNAME}
}

# erase containers of args
for i in $*
do
	lxcf_erase1 $i
done

exit 0
