phpservermon/puphpet/puppet/modules/puppi/files/scripts/get_file.sh

166 lines
5.5 KiB
Bash

#!/bin/bash
# get_file.sh - Made for Puppi
# Sources common header for Puppi scripts
. $(dirname $0)/header || exit 10
# Show help
showhelp () {
echo "This script is used to retrieve the file defined after the -s parameter"
echo "The source specified can be any of these:"
echo " file://local/file/path"
echo " http(s)://my.server/file/path"
echo " ssh://user@my.server/file/path"
echo " svn://user:password@my.server/file/path"
echo "Note: Avoid using chars like : / and @ outside the Uri standards paths"
echo
echo "It has the following options:"
echo "-s <source_file> - The URL of the file to get"
echo "-t <file_type> - The type of file that is retrieved: list|tarball|maven-metadata|dir"
echo "-d <local_dir> - An alternative destination directory (default is automatically chosen)"
echo "-a <yes|no> - If 'no' return a special error code (99) if the download checksum is the same of the one previously downloaded"
echo "-u <http_user> - in case of type http, specify a http_user for curl"
echo "-p <http_password> - in case of type http, specifiy http_user for curl"
echo "-k - tell curl not to validate ssl certs"
echo " This option can be used for automatic deploys (ie via cron) that actually deploy only new changes"
}
while [ $# -gt 0 ]; do
case "$1" in
-s)
type=$(echo $2 | cut -d':' -f1)
url=$2
downloadfilename=$(basename $2)
downloaddir=$predeploydir
shift 2 ;;
-t)
case $2 in
# This logic is applied:
# In $predeploydir go ($workdir/$project/deploy) go file that have to be deployed
# In $storedir go ($workdir/$project/store) go support files as tarballs or lists
list)
downloaddir=$storedir
save_runtime_config "source_type=list"
;;
tarball)
downloaddir=$storedir
save_runtime_config "source_type=tarball"
;;
tar)
downloaddir=$storedir
save_runtime_config "source_type=tar"
;;
zip)
downloaddir=$storedir
save_runtime_config "source_type=zip"
;;
maven-metadata)
downloaddir=$storedir
save_runtime_config "source_type=maven"
;;
dir)
downloaddir=$predeploydir
save_runtime_config "source_type=dir"
;;
war)
downloaddir=$predeploydir
save_runtime_config "source_type=war"
;;
mysql)
downloaddir=$storedir
save_runtime_config "source_type=mysql"
;;
gz)
downloaddir=$storedir
save_runtime_config "source_type=gz"
;;
esac
shift 2 ;;
-d)
# Enforces and overrides and alternative downloaddir
downloaddir=$2
shift 2 ;;
-a)
alwaysdeploy=$2
shift 2 ;;
-u)
http_user=$2
shift 2 ;;
-p)
http_password=$2
shift 2 ;;
-k)
ssl_arg=$1
shift 1 ;;
*)
showhelp
exit
;;
esac
done
# Define what to use for downloads
cd $downloaddir
case $type in
s3)
s3cmd get $url
check_retcode
save_runtime_config "downloadedfile=$downloaddir/$downloadfilename"
;;
ssh|scp)
# ssh://user@my.server/file/path
scpuri=$(echo $url | cut -d'/' -f3-)
scpconn=$(echo $scpuri | cut -d'/' -f1)
scppath=/$(echo $scpuri | cut -d'/' -f2-)
rsync -rlptD -e ssh $scpconn:$scppath .
check_retcode
save_runtime_config "downloadedfile=$downloaddir/$downloadfilename"
;;
http|https)
if [ -z "$http_password" ] ; then
curl $ssl_arg -s -f -L "$url" -O
else
curl $ssl_arg -s -f -L --anyauth --user $http_user:$http_password "$url" -O
fi
check_retcode
save_runtime_config "downloadedfile=$downloaddir/$downloadfilename"
;;
svn)
svnuri=$(echo $url | cut -d'/' -f3-)
svnusername=$(echo $svnuri | cut -d':' -f1)
svnpassword=$(echo $svnuri | cut -d':' -f2 | cut -d'@' -f1)
svnserver=$(echo $svnuri | cut -d'@' -f2 | cut -d'/' -f1)
svnpath=/$(echo $svnuri | cut -d'@' -f2 | cut -d'/' -f2-)
mkdir -p $(dirname $svnpath)
svn export --force --username="$svnusername" --password="$svnpassword" svn://$svnserver/$svnpath $downloaddir
check_retcode
save_runtime_config "downloadedfile=$downloaddir/$downloadfilename"
;;
file)
# file:///file/path
filesrc=$(echo $url | cut -d '/' -f3-)
rsync -rlptD $filesrc .
check_retcode
save_runtime_config "downloadedfile=$downloaddir/$downloadfilename"
;;
rsync)
rsync -a "$url" .
# rsync -rlptD $url . # Why not preserving users/groups?
check_retcode
save_runtime_config "downloadedfile=$downloaddir/$downloadfilename"
;;
esac
if [ x$alwaysdeploy == "xno" ] ; then
# Here is checked the md5sum of the downloaded file against a previously save one
# If the sums are the same the scripts exits 99 and puppi will stop the deploy without any warning or notification
[ -d $archivedir/$project ] || mkdir -p $archivedir/$project
touch $archivedir/$project/md5sum
md5sum $downloaddir/$downloadfilename > $workdir/$project/md5sum_downloaded
cat $archivedir/$project/md5sum > $workdir/$project/md5sum_deployed
diff $workdir/$project/md5sum_downloaded $workdir/$project/md5sum_deployed && exit 99
md5sum $downloaddir/$downloadfilename > $archivedir/$project/md5sum
fi