#!{{ shell_binary }} set -e LC_ALL=C export LC_ALL umask 077 # Redirect output to log exec > >(tee -ai {{ output_log_file }}) exec 2>&1 echo -e "\n\nrunner-import run at : $(date)" srv_directory={{ directory['srv'] }} restore_element () { backup_path=$1 restore_path=$2 shift 2 element_list=$* for element in $element_list do cd $backup_path; if [ -f $element ] || [ -d $element ]; then command="{{ rsync_binary }} --stats -av --delete --exclude *.sock --exclude *.pid --exclude .installed.cfg --exclude .installed-switch-softwaretype.cfg $backup_path/$element $restore_path" echo "Running: \"$command\"" $command fi done } restore_element {{ directory['backup'] }}/runner/ $srv_directory/runner instance project proxy.db restore_element {{ directory['backup'] }}/etc/ {{ directory['etc'] }} config.json cp -r {{ directory['backup'] }}/etc/.??* {{ directory['etc'] }}; # Invoke arbitrary script to perform specific restoration # procedure. RESTORE_EXIT_CODE=0 runner_import_restore=$srv_directory/runner-import-restore if [ ! -e "$runner_import_restore" ]; then touch $runner_import_restore chmod +x $runner_import_restore fi echo "Running $runner_import_restore script..." $srv_directory/runner-import-restore || RESTORE_EXIT_CODE=$? echo "Updating slapproxy database, software release and instances..." HOME="{{ directory['home'] }}" # XXX Hardcoded export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" export MAKEFLAGS=-j4 SLAPOS="{{ directory['bin'] }}/slapos" # XXX hardcoded SQLITE3="$HOME/software_release/parts/sqlite3/bin/sqlite3" DATABASE="$HOME/srv/runner/proxy.db" # Change slapproxy database to point instances to new software release # XXX hardcoded PARTITION=$(basename $HOME) OLD_SOFTWARE_RELEASE=$($SQLITE3 $DATABASE "select software_release from partition11 where reference='slappart0';") SOFTWARE_RELEASE=$(echo $OLD_SOFTWARE_RELEASE | sed -e 's/\(.*\)\(slappart\|test0-\)[0-9][0-9]\?/\1'"$PARTITION"'/') $SQLITE3 $DATABASE "update partition11 set software_release='$SOFTWARE_RELEASE' where software_release NOT NULL;" $SQLITE3 $DATABASE "update software11 set url='$SOFTWARE_RELEASE' where url='$OLD_SOFTWARE_RELEASE';" || $SQLITE3 $DATABASE "delete from software11 where url='$OLD_SOFTWARE_RELEASE';" # Change slapproxy database to have all instances stopped $SQLITE3 $DATABASE "update partition11 set slap_state='stopped';" # Run slapproxy on different port (in case of running inside of erp5testnode # with only one IP and port 50000 already taken by slapproxy of main instance) HOST="{{ proxy_host }}" PORT="50001" URL="http://$HOST:$PORT" $SLAPOS proxy start --cfg $HOME/etc/slapos.cfg --port $PORT >/dev/null 2>&1 & SLAPPROXY_PID=$! trap "kill $SLAPPROXY_PID" EXIT TERM INT sleep 5 echo "Building newest software..." $SLAPOS node software --cfg $HOME/etc/slapos.cfg --all --master-url=$URL --logfile $HOME/srv/runner/software.log --pidfile $HOME/var/run/slapos-node-software.pid >/dev/null 2>&1 || $SLAPOS node software --cfg $HOME/etc/slapos.cfg --all --master-url=$URL --logfile $HOME/srv/runner/software.log --pidfile $HOME/var/run/slapos-node-software.pid >/dev/null 2>&1 || $SLAPOS node software --cfg $HOME/etc/slapos.cfg --all --master-url=$URL --logfile $HOME/srv/runner/software.log --pidfile $HOME/var/run/slapos-node-software.pid >/dev/null 2>&1 # Remove defined scripts to force buildout to recreate them to have updated paths rm $srv_directory/runner/instance/slappart*/srv/runner-import-restore || true echo "Running slapos node instance..." # XXX hardcoded $SLAPOS node instance --cfg $HOME/etc/slapos.cfg --master-url=$URL --logfile $HOME/srv/runner/instance.log --pidfile $HOME/var/run/slapos-node-instance.pid >/dev/null 2>&1 || true $SLAPOS node instance --cfg $HOME/etc/slapos.cfg --master-url=$URL --logfile $HOME/srv/runner/instance.log --pidfile $HOME/var/run/slapos-node-instance.pid >/dev/null 2>&1 || true $SLAPOS node instance --cfg $HOME/etc/slapos.cfg --master-url=$URL --logfile $HOME/srv/runner/instance.log --pidfile $HOME/var/run/slapos-node-instance.pid >/dev/null 2>&1 || true # Invoke defined scripts for each partition inside of slaprunner for partition in $srv_directory/runner/instance/slappart*/ do script=$partition/srv/runner-import-restore if [ -e "$script" ]; then echo "Running $script script..." $script || RESTORE_EXIT_CODE=$? fi done # Change back slapproxy database to have all instances started $SQLITE3 $DATABASE "update partition11 set slap_state='started';" # Write exit code to an arbitrary file that will be checked by promise/monitor RESTORE_EXIT_CODE_FILE="{{ restore_exit_code_file }}" echo $RESTORE_EXIT_CODE > $RESTORE_EXIT_CODE_FILE exit $RESTORE_EXIT_CODE