diff options
Diffstat (limited to 'scripts/inc')
-rwxr-xr-x | scripts/inc/functions.sh | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/scripts/inc/functions.sh b/scripts/inc/functions.sh new file mode 100755 index 0000000..0fdc8a1 --- /dev/null +++ b/scripts/inc/functions.sh @@ -0,0 +1,131 @@ +#!/bin/bash + +function parse_args() { + if [ $# -lt 1 ] + then return 1 + fi + + arg_source_machine="$1" + return 0 +} + +function print_usage() { + echo "Usage : $0 <source_machine>" +} + +export LOG_NOTICE="notice" +export LOG_WARN="warning" +export LOG_ERR="error" +function log() { + { + echo -n "$(date --rfc-3339 seconds) $(hostname) $0: $2: <$(eval echo \$$1)> " + shift 2 + echo "$*" + } | tee -a ./bkp.log +} + +function run_or_die() { + local l_exit_value_on_failure="$1" + local l_func_to_call="$2" + shift 2 + + $l_func_to_call "$@" + res=$? + if [ $res -ne 0 ] + then log "$log_type" "$l_func_to_call" "$log_message" + exit $l_exit_value_on_failure + fi +} + +function check_env() { + if [ $UID -ne 0 ] + then log LOG_WARN "This script is intended to be ran by root" + return 1 + fi + return 0 +} + +#INI function from http://ajdiaz.wordpress.com/2008/02/09/bash-ini-parser/ +cfg_parser () +{ + ini="$(<$1)" # read the file + ini="${ini//[/\[}" # escape [ + ini="${ini//]/\]}" # escape ] + IFS=$'\n' && ini=( ${ini} ) # convert to line-array + ini=( ${ini[*]//;*/} ) # remove comments with ; + ini=( ${ini[*]/\ =/=} ) # remove tabs before = + ini=( ${ini[*]/=\ /=} ) # remove tabs be = + ini=( ${ini[*]/\ =\ /=} ) # remove anything with a space around = +ini=( ${ini[*]/#/cfg_} ) # lpo : Add cfg prefix for keys + ini=( ${ini[*]/#cfg_\\[/\}$'\n'cfg.section.} ) # set section prefix + ini=( ${ini[*]/%\\]/ \(} ) # convert text2function (1) + ini=( ${ini[*]/=/=\( } ) # convert item to array + ini=( ${ini[*]/%/ \)} ) # close array parenthesis + ini=( ${ini[*]/%\\ \)/ \\} ) # the multiline trick + ini=( ${ini[*]/%\( \)/\(\) \{} ) # convert text2function (2) + ini=( ${ini[*]/%\} \)/\}} ) # remove extra parenthesis + ini[0]="" # remove first element + ini[${#ini[*]} + 1]='}' # add the last brace + eval "$(echo "${ini[*]}")" # eval the result +} + +#function array_key_exists() { +# local l_key="$1" +# #Special behavior : pass as 2nd arg the keys of array with "${!array[@]}" +# shift +# +# for k in "$@" +# do +# [ "x$l_key" == "x$k" ] && return 0 +# done +# +# return 1 +#} + +function load_conf() { + local l_conffile="$1" + local l_source_machine="$2" + + cfg_parser "$l_conffile" + cfg.section.common + cfg.section.$l_source_machine + +# source "$l_conffile" + +# if array_key_exists "$l_source_machine" "${!CONF_SOURCE_POSSIBLE_ADDRESSES[@]}" +# then cfg_source_possible_addresses=${CONF_SOURCE_POSSIBLE_ADDRESSES["$l_source_machine"]} +# else log LOG_ERROR load_conf "No definition for CONF_SOURCE_POSSIBLE_ADDRESSES['$l_source_machine']" +# return 1 +# fi + + #TODO : check loaded values +} + +function find_source_address() { + local l_oldifs="$IFS" + local l_hostname="$(hostname)" + + if [ x"$l_hostname" == x"$arg_source_machine" ] + then runtime_source_address="" # Empty string means localhost + return 0 + fi + + runtime_source_address="" + IFS=", " + for a in $* + do + ping -w 1 -c 1 -q "$a" &>/dev/null + if [ $? -eq 0 ] + then runtime_source_address="$a" + break + fi + done + IFS="$l_oldifs" + + if [ -z "$runtime_source_address" ] + then return 1 + fi + + return 0 +} + |