#!/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 - The URL of the file to get" echo "-t - The type of file that is retrieved: list|tarball|maven-metadata|dir" echo "-d - An alternative destination directory (default is automatically chosen)" echo "-a - If 'no' return a special error code (99) if the download checksum is the same of the one previously downloaded" echo "-u - in case of type http, specify a http_user for curl" echo "-p - 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