105 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
 | 
						|
# A useful script for testing out changes to PVC by building the debs and deploying them out to a
 | 
						|
# set of hosts automatically, including restarting the daemon (with a pause between) on the remote
 | 
						|
# side. Mostly just useful for quickly testing/debugging changes as Ansible should be used for
 | 
						|
# production upgrades.
 | 
						|
 | 
						|
# Check if we're root, or not
 | 
						|
if [[ $( id -u ) -eq 0 ]]; then
 | 
						|
    SUDO=""
 | 
						|
else
 | 
						|
    SUDO="sudo"
 | 
						|
fi
 | 
						|
 | 
						|
KEEP_ARTIFACTS=""
 | 
						|
API_ONLY=""
 | 
						|
PRIMARY_NODE=""
 | 
						|
if [[ -n ${1} ]]; then
 | 
						|
    for arg in ${@}; do
 | 
						|
        case ${arg} in
 | 
						|
            -k|--keep)
 | 
						|
                KEEP_ARTIFACTS="y"
 | 
						|
                shift
 | 
						|
            ;;
 | 
						|
            -a|--api-only)
 | 
						|
                API_ONLY="y"
 | 
						|
                shift
 | 
						|
            ;;
 | 
						|
            -p=*|--become-primary=*)
 | 
						|
                PRIMARY_NODE=$( awk -F'=' '{ print $NF }' <<<"${arg}" )
 | 
						|
                shift
 | 
						|
            ;;
 | 
						|
        esac
 | 
						|
    done
 | 
						|
fi
 | 
						|
 | 
						|
HOSTS=( ${@} )
 | 
						|
echo "Deploying to host(s): ${HOSTS[@]}"
 | 
						|
if [[ -n ${PRIMARY_NODE} ]]; then
 | 
						|
    echo "Will become primary on ${PRIMARY_NODE} after updating it"
 | 
						|
fi
 | 
						|
 | 
						|
# Move to repo root if we're not
 | 
						|
pushd $( git rev-parse --show-toplevel ) &>/dev/null
 | 
						|
 | 
						|
# Prepare code
 | 
						|
echo "> Preparing code (format and lint)..."
 | 
						|
./format || exit 1
 | 
						|
./lint || exit 1
 | 
						|
 | 
						|
# Build the packages
 | 
						|
echo -n "> Building packages..."
 | 
						|
version="$( ./build-unstable-deb.sh 2>/dev/null )"
 | 
						|
echo " done. Package version ${version}."
 | 
						|
 | 
						|
# Install the client(s) locally
 | 
						|
echo -n "> Installing client packages locally..."
 | 
						|
$SUDO dpkg -i --force-all ../pvc-client*_${version}*.deb &>/dev/null
 | 
						|
echo " done".
 | 
						|
 | 
						|
echo "> Copying packages..."
 | 
						|
for HOST in ${HOSTS[@]}; do
 | 
						|
    echo -n ">>> Copying packages to host ${HOST}..."
 | 
						|
    ssh $HOST $SUDO rm -rf /tmp/pvc &>/dev/null
 | 
						|
    ssh $HOST mkdir /tmp/pvc &>/dev/null
 | 
						|
    scp ../pvc-*_${version}*.deb $HOST:/tmp/pvc/ &>/dev/null
 | 
						|
    echo " done."
 | 
						|
done
 | 
						|
if [[ -z ${KEEP_ARTIFACTS} ]]; then
 | 
						|
    rm ../pvc*_${version}*
 | 
						|
fi
 | 
						|
 | 
						|
for HOST in ${HOSTS[@]}; do
 | 
						|
    echo "> Deploying packages on host ${HOST}"
 | 
						|
    echo -n ">>> Installing packages..."
 | 
						|
    ssh $HOST $SUDO dpkg -i --force-all /tmp/pvc/*.deb &>/dev/null
 | 
						|
    ssh $HOST rm -rf /tmp/pvc &>/dev/null
 | 
						|
    echo " done."
 | 
						|
    echo -n ">>> Restarting PVC daemons..."
 | 
						|
    ssh $HOST $SUDO systemctl restart pvcapid &>/dev/null
 | 
						|
    sleep 2
 | 
						|
    ssh $HOST $SUDO systemctl restart pvcworkerd &>/dev/null
 | 
						|
    if [[ -z ${API_ONLY} ]]; then
 | 
						|
    sleep 2
 | 
						|
    ssh $HOST $SUDO systemctl restart pvchealthd &>/dev/null
 | 
						|
    sleep 2
 | 
						|
    ssh $HOST $SUDO systemctl restart pvcnoded &>/dev/null
 | 
						|
    echo " done."
 | 
						|
    echo -n ">>> Waiting for node daemon to be running..."
 | 
						|
    while [[ $( ssh $HOST "pvc -q node list -f json ${HOST%%.*} | jq -r '.[].daemon_state'" 2>/dev/null ) != "run" ]]; do
 | 
						|
        sleep 5
 | 
						|
        echo -n "."
 | 
						|
    done
 | 
						|
    fi
 | 
						|
    echo " done."
 | 
						|
    if [[ -n ${PRIMARY_NODE} && ${PRIMARY_NODE} == ${HOST} ]]; then
 | 
						|
        echo -n ">>> Setting node $HOST to primary coordinator state... "
 | 
						|
        ssh $HOST pvc -q node primary --wait &>/dev/null
 | 
						|
        ssh $HOST $SUDO systemctl restart pvcworkerd &>/dev/null
 | 
						|
        echo "done."
 | 
						|
    fi
 | 
						|
done
 | 
						|
 | 
						|
popd &>/dev/null
 |