#!/bin/bash function usage() { echo "Usage: ${0} " exit 1 } Version=${1} if [ "${Version}" == "" ] then usage fi Project=ops # ----- Settings LocalSoftwareDir=/opt/software/cvtt2 ProdDir=/home/cvtt/prod Location="${LocalSoftwareDir}/${Project}/${Version}/${Project}" ReleaseHosts=("cryptovaltrading.com" "cryptoval1.sheynin.home" "cloudstore.cvtt.vpn") ReleasePorts=("1588" "22" "22") ReleaseUsers=("cryptova" "cvtt" "cvtt") ReleaseDir=("/home/cryptova/opt/software/cvtt2" "/opt/software/cvtt2" "/opt/software/cvtt2") # ----- Settings function rsync_load_version() { for idx in "${!ReleaseHosts[@]}" do host=${ReleaseHosts[${idx}]} port=${ReleasePorts[${idx}]} user=${ReleaseUsers[${idx}]} rel_dir=${ReleaseDir[${idx}]} echo "Checking ${user}@${host} for ${rel_dir}/${Project}/${Version} ..." if ssh -q -p ${port} ${user}@${host} "test -d ${rel_dir}/${Project}/${Version}" then echo "Directory found..." rsync_cmd="rsync -ahvv -e \"ssh -p ${port}\"" rsync_cmd="${rsync_cmd} ${user}@${host}:${rel_dir}/${Project}/${Version}" rsync_cmd="${rsync_cmd} ${LocalSoftwareDir}/${Project}/" echo ${rsync_cmd} eval ${rsync_cmd} status=$? if [ ${status} -eq 0 ] then echo "Loading successful..." break fi else echo "Not Found ${rel_dir}/${Project}/${Version} on ${user}@${host}" fi done if [[ ! -d ${LocalSoftwareDir}/${Project} ]] ; then echo ERROR loading software exit 1 fi } # exists and not empty if [[ ! -d "${Location}" ]] ; then rsync_load_version fi Cmd="cd ${ProdDir}" Cmd="${Cmd} && rm -rf ${Project}" Cmd="${Cmd} && ln -snf ${Location} ${Project}" echo ${Cmd} eval ${Cmd} echo "Done: $0 $*"