#!/bin/sh

# LXCF - LXC Facility
# copyright (C) 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.

LOGFILE="/var/log/lxcf/lxcf-messages"
EXJOB="/var/lib/lxcf/exjob"


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

# check args
if [ $# -ne 1 ]; then
	echo "usage: lxcf queue cancel UUID"
	exit 1
fi

UUID=$1

LINE=`egrep -h "${UUID}" /var/lib/lxcf/*queue /etc/lxcf/rsc/*/uuid`
if [ $? -eq 1 ]; then
  LINE=`egrep -h "${UUID}" /var/lib/lxcf/exjob | \
    awk '{printf "%s %s %s %s\n",$2,$3,$4,$5}'`
  if [ $? -eq 1 ]; then
    echo "error: uuid" $UUID "is not exist"
    exit -1
  fi
fi

cancel_queue() {
	flock $1 sed -i "/^$UUID/d" $1
}

cancel_job() {
  flock ${EXJOB} \
	egrep "${UUID}" ${EXJOB} >& /dev/null; \
	if [ $? -eq 0 ] ; then \
		EXJOBPID=`egrep "${UUID}" ${EXJOB} | awk '{print $1}'`; \
		kill -9 ${EXJOBPID} >& /dev/null; \
	fi
}

lsdir() {
  ls -f --ind=none $1 | sed '/^\.\{1,2\}$/d'
}

cancel_container() {
	for i in `lsdir /etc/lxcf/rsc`
	do
		if [ -e /etc/lxcf/rsc/${i}/uuid -a \
		     x${UUID} == x`cat /etc/lxcf/rsc/${i}/uuid` ]; then
			LINE=`echo ${UUID} ${i}`
			/usr/sbin/lxcf erase ${i} >> $LOGFILE
		fi
	done
}

TM=`LANG=C date +"%c"`

cancel_queue  /var/lib/lxcf/hqueue
cancel_queue  /var/lib/lxcf/qqueue
cancel_queue  /var/lib/lxcf/lqueue
cancel_job
cancel_container

flock $LOGFILE echo "###" $TM "CANCELED :" $LINE "###" >> $LOGFILE 

echo "Canceled :" $LINE

exit 0
