diff -r a2342f26c9de -r b0b56e0f8c7f dev/provisioning/modules/puppi/files/scripts/functions --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dev/provisioning/modules/puppi/files/scripts/functions Fri Jan 15 15:35:00 2016 +0100 @@ -0,0 +1,229 @@ +#!/bin/bash +# General Puppi functions + +BOOTUP=color +RES_COL=75 +MOVE_TO_COL="echo -en \\033[${RES_COL}G" +SETCOLOR_SUCCESS="echo -en \\033[0;32m" +SETCOLOR_FAILURE="echo -en \\033[0;31m" +SETCOLOR_WARNING="echo -en \\033[0;33m" +SETCOLOR_NORMAL="echo -en \\033[0;39m" +SETCOLOR_TITLE="echo -en \\033[0;35m" +SETCOLOR_BOLD="echo -en \\033[0;1m" + +echo_success() { + [ "$BOOTUP" = "color" ] && $MOVE_TO_COL + echo -n "[" + [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS + echo -n $" OK " + [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL + echo -n "]" + echo -ne "\r" + return 0 +} + +echo_dontdeploy() { + [ "$BOOTUP" = "color" ] && $MOVE_TO_COL + echo -n "[" + [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS + echo -n $" NO NEED TO DEPLOY " + [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL + echo -n "]" + echo -ne "\r" + return 0 +} + +echo_failure() { + [ "$BOOTUP" = "color" ] && $MOVE_TO_COL + echo -n "[" + [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE + echo -n $"FAILED" + [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL + echo -n "]" + echo -ne "\r" + return 1 +} + +echo_passed() { + [ "$BOOTUP" = "color" ] && $MOVE_TO_COL + echo -n "[" + [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING + echo -n $"PASSED" + [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL + echo -n "]" + echo -ne "\r" + return 1 +} + +echo_warning() { + [ "$BOOTUP" = "color" ] && $MOVE_TO_COL + echo -n "[" + [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING + echo -n $"WARNING" + [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL + echo -n "]" + echo -ne "\r" + return 1 +} + +echo_title () { + echo + echo + [ "$BOOTUP" = "color" ] && $SETCOLOR_TITLE + echo "$1" + [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL +} + +check_retcode () { + if [ $? = "0" ] ; then + true + else + exit 2 + fi +} + +handle_result () { + RETVAL=$? + if [ "$RETVAL" = "0" ] ; then + showresult="echo_success" + result="OK" + fi + if [ "$RETVAL" = "1" ] ; then + showresult="echo_warning" + EXITWARN="1" + result="WARNING" + fi + if [ "$RETVAL" = "2" ] ; then + showresult="echo_failure" + EXITCRIT="1" + result="CRITICAL" + fi + if [ "$RETVAL" = "99" ] ; then + showresult="echo_dontdeploy" + DONTDEPLOY="1" + result="OK" + fi + if [ x$show == "xyes" ] ; then + $showresult + echo + echo -e "$output" + echo + elif [ x$show == "xfail" ] && [ x$RETVAL != "x0" ] ; then + $showresult + echo + echo -e "$output" + echo + fi + + # Output to file + if [ ! -d $logdir/$project/$tag ] ; then + mkdir -p $logdir/$project/$tag + fi + let counter=counter+1 + echo $title > $logdir/$project/$tag/$counter-$command + echo $code >> $logdir/$project/$tag/$counter-$command + echo $result >> $logdir/$project/$tag/$counter-$command + echo $output >> $logdir/$project/$tag/$counter-$command + +} + + +# Function taken from http://www.threadstates.com/articles/parsing_xml_in_bash.html +xml_parse () { + local tag=$1 + local xml=$2 + + # Find tag in the xml, convert tabs to spaces, remove leading spaces, remove the tag. + grep $tag $xml | \ + tr '\011' '\040' | \ + sed -e 's/^[ ]*//' \ + -e 's/^<.*>\([^<].*\)<.*>$/\1/' +} + +# Stores the passed arguments in Project runtime config file +# Only if the parameter is not already defined +# Usage: +# save_runtime_config parameter=value # Sets or overrides parameter +# save_runtime_config parameter=value notforce # Sets parameters only if is not already set +save_runtime_config () { + parameter=$(echo $1 | cut -d '=' -f1) + value=$(echo $1 | cut -d '=' -f2-) + force=$2 + + if [[ ! $(grep $parameter $workdir/$project/config) ]] ; then + echo >> $workdir/$project/config + echo "# Added by $0" >> $workdir/$project/config + echo "$parameter=\"$value\"" >> $workdir/$project/config + else +# sed -i "/^$parameter=/d" $workdir/$project/config # No real need to remove lines with old configs + if [[ x$force == xnotforce ]] ; then + echo >> $workdir/$project/config + echo "# CHANGE NOT FORCED by $0" >> $workdir/$project/config + echo "# $parameter=\"$value\"" >> $workdir/$project/config + else + echo >> $workdir/$project/config + echo "# CHANGED by $0" >> $workdir/$project/config + echo "$parameter=\"$value\"" >> $workdir/$project/config + fi + fi + +} + +# Adds a runtime comment to Project runtime config file +save_runtime_comment () { + echo >> $workdir/$project/config + echo "# Added by $0" >> $workdir/$project/config + echo " ## $1" >> $workdir/$project/config +} + + +# Stores the passed arguments in Project runtime config file +# Forces parameter overwrite if already defined +overwrite_runtime_config () { + echo "$1" >> $workdir/$project/config +} + +ask_interactive () { + if [ x$show == "xyes" ] ; then + echo -n $title + fi + + if [ "$interactive" = "yes" ] ; then + echo + echo "INTERACTIVE MODE: Press 'x' to exit or just return to go on" + read press + case $press in + x) exit 2 ;; + *) return + esac + fi +} + +# Shows or executes a command +show_command () { + echo + $SETCOLOR_BOLD ; echo "$HOSTNAME: $*" ; $SETCOLOR_NORMAL + + bash -c "$*" + +# Grep filter at show_command level +# if [ ! -z "$greppattern" ] ; then +# bash -c "$*" | grep $greppattern +# else +# bash -c "$*" +# fi +} + +# Filtering out only: $ ; ` | < > +shell_filter () { + echo $1 | sed 's/\$//g' | sed 's/;//g' | sed 's/`//g' | sed 's/|//g' | sed 's///g' +} + +shell_filter_strict () { +# Filtering out: $ ; ` | < > = ! { } [ ] / \ # & + echo $1 | sed 's/\$//g' | sed 's/;//g' | sed 's/`//g' | sed 's/|//g' | sed 's///g' | sed 's/=//g' | sed 's/!//g' | sed 's/{//g' | sed 's/}//g' | sed 's/\[//g' | sed 's/\]//g' | sed 's/\///g' | sed 's/\\//g' | sed 's/#//g' | sed 's/&//g' + +# Filtering out: all but accepted chars +# echo $1 | sed "s/[^a-Z0-9_\-]//Ig" +} +