#!/bin/bash

# Copyright (C) 2015-2016 NIWA Hideyuki

FULCONDIR=/var/lib/fulcon
DOCKERFILEDIR=/var/lib/fulcon/driver/dockerfile
OCFDIR=/var/lib/fulcon/OCF

usage()
{
	cd $DOCKERFILEDIR
	echo "usage: setup  [ [ -d ] [ -n ] [ -p ] IMAGENAME ] "
	echo "Effective IMAGENAME:"
	for i in *
	do
		echo "   " $i
	done
} 

# check options
FLG_N=0
FLG_P=0
FLG_D=0
FLG_S=0

while getopts dnp OPT
do
  case $OPT in
    "d" ) FLG_D=1 ;;
    "n" ) FLG_N=1 ;;
    "p" ) FLG_P=1 ;;
    \?  ) usage; exit -1;;
  esac
done

shift `expr $OPTIND - 1`

if [ $FLG_D -eq 0 -a $FLG_N -eq 0 -a $# -eq 1 -a x"$1" == x"setup"  ]; then
	usage
	exit -1
elif [ $# -ne 1 ]; then
	usage
	exit -1
fi

if [ $FLG_D -eq 1 -a $FLG_N -eq 1 ]; then
	echo "error: -d and -n cannot be specified at the same time"
	exit -1
fi

IMAGENAME=$1

ls $DOCKERFILEDIR/* >& /dev/null
if [ $? -ne 0 ]; then
	echo "Dockerfile is not exist"
	exit 0
fi

if [ $FLG_P -ne 0 ]; then
	echo "update proxy settings"
	HTTPPROXY=`env | egrep http_proxy | awk -F "=" '{print $2}'`
	HTTPSPROXY=`env | egrep https_proxy | awk -F "=" '{print $2}'`
	FTPPROXY=`env | egrep ftp_proxy | awk -F "=" '{print $2}'`
else
	HTTPPROXY=""
	HTTPSPROXY=""
	FTPPROXY=""
fi

BUILDRESULT=""

download_new_image()
{
	i=$1
	echo "download new image:" $i
	docker pull fulcon/$i:latest
	if [ $? -eq 0 ]; then
		RESULT="success"
		mkdir -p $OCFDIR/$i
		ID=`docker run -d fulcon/$i /bin/true`
		docker export $ID | gzip -c > $OCFDIR/$i/${i}.tgz
		docker rm $ID
		echo "generated OCF image:" $OCFDIR/$i/${i}.tgz
		cd ..
	else
		RESULT="failed"
	fi

	BUILDRESULT=`printf "%s*download fulcon/%s : %s" "$BUILDRESULT" "$i" "$RESULT"`
	echo
	echo
	cd ..
}

generate_new_image()
{
	i=$1
	cd $i
	if [ $FLG_P -ne 0 ]; then
		# set environmet variable of proxy
		if [ x"$HTTPPROXY" != x"" ]; then
			echo "setup http proxy :" $HTTPPROXY
			sed -i "s%#ENV http_proxy http://xxx%ENV http_proxy "$HTTPPROXY"%" Dockerfile
		fi
		if [ x"$HTTPSPROXY" != x"" ]; then
			echo "setup https proxy :" $HTTPSPROXY
			sed -i "s%#ENV https_proxy http://xxx%ENV https_proxy "$HTTPSPROXY"%" Dockerfile
		fi
		if [ x"$FTPPROXY" != x"" ]; then
			echo "setup ftp proxy :" $FTPPROXY
			sed -i "s%#ENV ftp_proxy http://xxx%ENV ftp_proxy "$FTPPROXY"%" Dockerfile
		fi
		# for centos
		if [ x"$HTTPPROXY" != x"" ]; then
			sed -i 's%#RUN /usr/bin/echo "proxy=http://xxx"%RUN /usr/bin/echo "proxy='$HTTPPROXY'"%' Dockerfile
		fi
		# for ubuntu
		sed -i 's/#ADD 80proxy/ADD 80proxy/' Dockerfile
		if [ -f 80proxy ]; then
			if [ x"$HTTPPROXY" != x"" ]; then
				sed -i 's%Acquire::http::proxy "http://xxx";%Acquire::http::proxy "'$HTTPPROXY'";%' 80proxy
			fi
			if [ x"$HTTPSPROXY" != x"" ]; then
				sed -i 's%Acquire::https::proxy "http://xxx";%Acquire::http::proxy "'$HTTPSPROXY'";%' 80proxy
			fi
			if [ x"$FTPPROXY" != x"" ]; then
				sed -i 's%Acquire::ftp::proxy "http://xxx";%Acquire::http::proxy "'$FTPPROXY'";%' 80proxy
			fi
		fi
	fi
	echo docker build -t fulcon/$i .
	docker build --no-cache -t fulcon/$i .
	if [ $? -eq 0 ]; then
		RESULT="success"
		mkdir -p $OCFDIR/$i
		ID=`docker run -d fulcon/$i /bin/true`
		docker export $ID | gzip -c > $OCFDIR/$i/${i}.tgz
		docker rm $ID
		echo "generated OCF image:" $OCFDIR/$i/${i}.tgz
		cd ..
	else
		RESULT="failed"
	fi

	BUILDRESULT=`printf "%s*built fulcon/%s : %s" "$BUILDRESULT" "$i" "$RESULT"`
	echo
	echo
	cd ..
}

cd $DOCKERFILEDIR
BUILDRESULT=""
MATCHFLG=0
for i in *
do
	if [ x"$IMAGENAME" == x"$i" ]; then
		MATCHFLG=1
		if [ $FLG_N -eq 1 ]; then
			setup_new_image $i
		else
			download_new_image $i
		fi
	fi
done

if [ $MATCHFLG -eq 0 ]; then
	usage
	exit -1
fi

(docker rmi `docker images | grep '<none>' | awk '{printf "%s ",$3}'`) >& /dev/null
echo $BUILDRESULT | awk '{split($0,a,"*");for (i in a) print a[i]}'
echo 

DEFAULTIMAGE=`fulcon default-image`
docker images | egrep $DEFAULTIMAGE >& /dev/null
if [ $? -ne 0 ]; then
	DEFAULTIMAGE=""
fi

if [ x"$DEFAULTIMAGE" == x"" ]; then
	fulcon set-default-image "fulcon/$IMAGENAME"
	echo "fulcon/"$IMAGENAME "is set to the default image."
fi

exit 0

