#!/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 create_provider creates a provider instance 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 } create_provider() { if [ -e $PROVIDERDIR ] then echo $PROVIDERDIR exists - exiting exit 1 fi mkdir -p $PROVIDERDIR cd $PROVIDERDIR leap $OPTS new --contacts $CONTACTS --domain $DOMAIN --name $PROVIDER --platform=$PLATFORMDIR . cd $PLATFORMDIR git checkout $PLATFORM_BRANCH git submodule update --init cd $PROVIDERDIR # for now, we use the vagrant pubkey until https://leap.se/code/issues/2039 is solved leap $OPTS add-user --self --ssh-pub-key=/usr/lib/ruby/gems/1.9.1/gems/leap_cli-0.2.1/vendor/vagrant_ssh_keys/vagrant.pub leap $OPTS cert ca && leap cert csr leap $OPTS cert dh add_nodes $NODES } deploy() { # 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 LOG="$LOGDIR/deploy-$vm.log" ERRLOG="$LOGDIR/deploy-$vm-`date +"%F-%H%M%S"`-error.log" 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() { log_start 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 } log_start() { echo echo "Starting $0 on `date`" } 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 # provider specific config source $config # common config for all providers source /etc/leap/platform-test-common.cfg [ -e $PROVIDERDIR ] && cd $PROVIDERDIR if ! $all ; then nodes=$nodelist else nodes=$NODES fi case $cmd in bootstrap) bootstrap_nodes "$nodes";; create_provider) create_provider;; deploy) deploy "$nodes";; reset_deploy) reset_deploy "$nodes";; (*) usage; echo "Please specify a command."; exit 1;; esac