#!/bin/bash usage() { cat << EOF usage: $0 [options] command [arguments...] This script runs the leap platform deploy tests OPTIONS -c|--config file specify config file -a|--all run command on all nodes -h|--help show help COMMANDS bootstrap bootstrap node(s): - leap local start - leap node int - sets up hostname and runs apt-get dist-upgrade - leap local save deploy deploy node(s) reset_deploy reset and deploy node(s) EOF } add_nodes() { for i in $@ do case $i in openvpn) config='openvpn.gateway_address:10.5.5.99' ;; *) config='' ;; esac leap node add --local $i $config services:$i done } bootstrap_nodes() { for vm in $@ do leap $OPTS local start $vm sleep $SLEEP leap $OPTS node init $vm # set hostname + do dist-upgrade leap $OPTS deploy $vm --tags site_apt::dist_upgrade,site_config::hosts leap $OPTS local save $vm done } compile () { leap $OPTS clean leap $OPTS compile } deploy() { LOG="$LOGDIR/deploy-$vm.log" ERRLOG="$LOGDIR/deploy-$vm-`date +"%F-%H%M%S"`-error.log" # remove colors until #1751 is fixed RMCOLORS='s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g' # we need to deploy with verbose level 2, and filter out unwanted stuff # until puppet errors show up in verbose level 0 +1 (#1750) FILTER_CLI='= read|= loading|= no change| - executing| = executing| = applying| = ran git| = checking| = synching| = skipping file_path| - cd .*; rsync -a| - hiera| = created hiera/| - cd /root/| - rolling backexecuting| - files/ca/client_ca.crt|\[bin,puppet\] ->' FILTER_PUPPET='] notice: |] No change to hostname|] Puppet apply complete|] warning: Dynamic lookup|] warning: Scope\(Class' FILTER_ALL="($FILTER_CLI|$FILTER_PUPPET)" for vm in $@ do echo "Deploying \"$vm\" on `date`"|tee -a $LOG leap $OPTS -v 2 deploy $vm 2>&1 | sed -r "$RMCOLORS" | tee -a $LOG | egrep -v "$FILTER_ALL" > $ERRLOG if [ $? -eq 0 ] then msg="From: $MAIL_FROM\nTo: $MAIL_TO\nSubject: Deploy to \"$vm\" had errors !\n\n`cat $ERRLOG`" echo "Deploy to \"$vm\" on `date` had errors." | tee -a $LOG echo cat $ERRLOG if [ "$MAIL_TO" != '' ]; then echo "Sending this mail to $MAIL_TO:" printf "$msg" | sendmail -t fi else echo "Deploy to $vm on `date` went fine."| tee -a $LOG fi done } reset_deploy() { compile echo "Starting deploy_nodes for nodes $@ as background tasks on `date`" for i in $@ do leap $OPTS local reset $i # only sleep one time if $need_to_sleep ; then echo "Waiting $SLEEP secs for VM to come up..." sleep $SLEEP need_to_sleep=false fi echo $i deploy $i & done } config="" all=false if ! options=$(getopt -o ac:h -l all,config:,help -- "$@") then # something went wrong, getopt will put out an error message for us usage exit 1 fi eval set -- "$options" while [ $# -gt 0 ] do case $1 in -h|--help) usage; exit 1;; -c|--config) config=$2; shift ;; -a|--all) all=true;; -v|--verbose) VERBOSE=1 ;; (--) shift; break;; (-*) echo "$0: error - unrecognized option $1" 1>&2; exit 1;; (*) break;; esac shift done cmd=$1 shift nodelist=$@ #echo "config: $config" #echo "cmd: $cmd" #echo "nodelist: $nodelist" #echo "all: $all" if [ -z $config ] then usage echo "Please provide a config file" exit 1 fi source $config cd $ROOTDIR/$PROVIDER if ! $all ; then nodes=$nodelist else nodes=$NODES fi echo echo "Starting $0 on `date`" case $cmd in bootstrap) bootstrap_nodes "$nodes";; deploy) deploy "$nodes";; reset_deploy) reset_deploy "$nodes";; esac