Add functions used inside and outside of VMs

The helper functions in this library are for use by host-side scripts
(osbash) and by scripts running inside the node VMs.

Partial-Bug: 1312764
Implements: blueprint openstack-training-labs
Change-Id: Ie3f7ec480a70beea1abedb3bb81d7380b978d7b2
This commit is contained in:
Roger Luethi 2014-06-17 10:44:46 +02:00
parent eec809bee2
commit 0064265812

142
labs/lib/functions Normal file
View File

@ -0,0 +1,142 @@
# This file contains bash functions that may be used by both guest and host
# systems.
# Non-recursive removal of all files except README.*
function clean_dir {
local CLEAN_DIR=$1
if [ ! -e "$CLEAN_DIR" ]; then
mkdir -pv "$CLEAN_DIR"
elif [ ! -d "$CLEAN_DIR" ]; then
echo >&2 "Not a directory: $CLEAN_DIR"
return 1
fi
shopt -s nullglob
local ENTRIES=("$CLEAN_DIR"/*)
if [ -n "${ENTRIES[0]-}" ]; then
for f in "${ENTRIES[@]}"; do
# Skip directories
if [ ! -f "$f" ]; then
continue
fi
# Skip README.*
if [[ $f =~ /README\. ]]; then
continue
fi
rm -f "$f"
done
fi
}
function is_root {
if [ $EUID -eq 0 ]; then
return 0
else
return 1
fi
}
function yes_or_no {
local prompt=$1
local input=""
while [ : ]; do
read -p "$prompt (Y/n): " input
case "$input" in
N|n)
return 1
;;
""|Y|y)
return 0
;;
*)
echo "Invalid input: $input"
;;
esac
done
}
#-------------------------------------------------------------------------------
# Helpers to incrementally number files via name prefixes
#-------------------------------------------------------------------------------
function get_next_file_number {
local DIR=$1
local EXT=${2:-""}
# Get number of *.log files in directory
shopt -s nullglob
if [ -n "$EXT" ]; then
# Count files with specific extension
local FILES=("$DIR/"*".$EXT")
else
# Count all files
local FILES=("$DIR/"*)
fi
echo "${#FILES[*]}"
}
function get_next_prefix {
local DIR=$1
local EXT=$2
# Number of digits in prefix string (default 3)
local DIGITS=${3:-3}
# Get number of *.$EXT files in $DIR
local CNT="$(get_next_file_number "$DIR" "$EXT")"
printf "%0${DIGITS}d" "$CNT"
}
#-------------------------------------------------------------------------------
# Helpers for scripts configuration files (config/scripts.*)
#-------------------------------------------------------------------------------
# Configuration files use codes for directories rather than full paths (to make
# them easier to read and write)
function src_dir_code_to_dir {
local SRC_DIR_CODE=$1
case "$SRC_DIR_CODE" in
osbash)
echo "$OSBASH_SCRIPTS_DIR"
;;
scripts)
echo "$SCRIPTS_DIR"
;;
config)
echo "$CONFIG_DIR"
;;
*)
# No code, it must be a path already
echo "$SRC_DIR_CODE"
;;
esac
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Returns list of enabled scripts (to disable, comment out with #)
function get_script_paths_from_config {
local CONFIG_FILE=$1
local CONFIG_PATH=$CONFIG_DIR/$CONFIG_FILE
if [ ! -f "$CONFIG_PATH" ]; then
echo >&2 "Config file not found: $CONFIG_FILE"
return 1
fi
local DIR_CODE=""
local NAME=""
while read -r DIR_CODE NAME; do
if [[ $DIR_CODE =~ ^# ]]; then
# Skip lines that are commented out
continue
else
local DIR="$(src_dir_code_to_dir "$DIR_CODE")"
local SCR_PATH=$DIR/$NAME
echo "$SCR_PATH"
fi
done < "$CONFIG_PATH"
}
# vim: set ai ts=4 sw=4 et ft=sh: