diff --git a/labs/lib/osbash/lib.color b/labs/lib/osbash/lib.color new file mode 100644 index 00000000..d69a61c8 --- /dev/null +++ b/labs/lib/osbash/lib.color @@ -0,0 +1,54 @@ +#!/bin/bash +# Colors and decorations + +function colorizer { + + # Text Reset + local Reset_Color='\x1b[0m' + + # Regular + local Black='\x1b[0;30m' + local Red='\x1b[0;31m' + local Green='\x1b[0;32m' + local Yellow='\x1b[0;33m' + local Blue='\x1b[0;34m' + local Purple='\x1b[0;35m' + local Cyan='\x1b[0;36m' + local White='\x1b[0;37m' + + # Bold + local Bold_Black='\x1b[1;30m' + local Bold_Red='\x1b[1;31m' + local Bold_Green='\x1b[1;32m' + local Bold_Yellow='\x1b[1;33m' + local Bold_Blue='\x1b[1;34m' + local Bold_Purple='\x1b[1;35m' + local Bold_Cyan='\x1b[1;36m' + local Bold_White='\x1b[1;37m' + + # Underline + local Underline_Black='\x1b[4;30m' + local Underline_Red='\x1b[4;31m' + local Underline_Green='\x1b[4;32m' + local Underline_Yellow='\x1b[4;33m' + local Underline_Blue='\x1b[4;34m' + local Underline_Purple='\x1b[1;35m' + local Underline_Cyan='\x1b[4;36m' + local Underline_White='\x1b[4;37m' + + # Background + local On_Black='\x1b[40m' + local On_Blue='\x1b[44m' + local On_White='\x1b[47m' + + # Color codes + CError=$Red + CStatus=$Bold_Purple + CInfo=$Bold_Yellow + CProcess=$Bold_Blue + CData=$Bold_Cyan + CMissing=$Bold_Red + CReset=$Reset_Color +} +colorizer +unset colorizer diff --git a/labs/osbash.sh b/labs/osbash.sh index fd0f0e93..c44715ef 100755 --- a/labs/osbash.sh +++ b/labs/osbash.sh @@ -19,9 +19,10 @@ source "$OSBASH_LIB_DIR/lib.$DISTRO" source "$OSBASH_LIB_DIR/functions.host" source "$OSBASH_LIB_DIR/virtualbox.functions" source "$OSBASH_LIB_DIR/virtualbox.install_base" +source "$LIB_DIR/osbash/lib.color" function usage { - echo "Usage: $0 {-b|-w} [-g GUI] [-n] {basedisk|cluster}" + echo "Usage: $0 {-b|-w} [-g GUI] [--no-color] [-n] {basedisk|NODE [NODE..]}" # Don't advertise export until it is working properly #echo " $0 [-e EXPORT] [-n] NODE [NODE..]" echo "" @@ -31,6 +32,7 @@ function usage { echo "-w Create Windows batch files" echo "-g GUI GUI type during build" #echo "-e EXPORT Export node VMs" + echo "--no-color Disables colors during build" echo "" echo "basedisk Build configured basedisk" echo "cluster Build OpenStack cluster [all nodes]" \ @@ -44,10 +46,10 @@ function usage { function print_config { if [ "$CMD" = "basedisk" ]; then - echo "Target is base disk: $BASE_DISK" + echo -e "${CInfo:-}Target is base disk:${CData:-} $BASE_DISK${CReset:-}" else - echo "Base disk: $BASE_DISK" - echo "Distribution name: $(get_distro_name "$DISTRO")" + echo -e "${CInfo:-}Base disk:${CData:-} $BASE_DISK${CReset:-}" + echo -e "${CInfo:-}Distribution name: ${CData:-} $(get_distro_name "$DISTRO")${CReset:-}" fi if [ -n "${EXPORT_OVA:-}" ]; then @@ -55,23 +57,23 @@ function print_config { elif [ -n "${EXPORT_VM_DIR:-}" ]; then echo "Exporting to directory: ${EXPORT_VM_DIR}" else - echo -n "Creating Windows batch scripts: " - ${WBATCH:-:} echo "yes" - ${WBATCH:+:} echo "no" + echo -e -n "${CInfo:-}Creating Windows batch scripts:${CReset:-} " + ${WBATCH:-:} echo -e "${CData:-}yes${CReset:-}" + ${WBATCH:+:} echo -e "${CData:-}no${CReset:-}" - echo -n "Creating $CMD on this machine: " - ${OSBASH:-:} echo "yes" - ${OSBASH:+:} echo "no" + echo -e -n "${CInfo:-}Creating $CMD on this machine:${CReset:-} " + ${OSBASH:-:} echo -e "${CData:-}yes${CReset:-}" + ${OSBASH:+:} echo -e "${CData:-}no${CReset:-}" - echo "VM access method: $VM_ACCESS" + echo -e "${CInfo:-}VM access method:${CData:-} $VM_ACCESS${CReset:-}" # GUI is the VirtualBox default - echo "GUI type: ${VM_UI:-gui}" + echo -e "${CInfo:-}GUI type:${CData:-} ${VM_UI:-gui}${CReset:-}" fi } -while getopts :be:g:hnw opt; do +while getopts :be:g:-:hnw opt; do case $opt in e) if [ "$OPTARG" = ova ]; then @@ -79,7 +81,7 @@ while getopts :be:g:hnw opt; do elif [ "$OPTARG" = dir ]; then EXPORT_VM_DIR=$IMG_DIR/oslabs-$DISTRO else - echo "Error: -e argument must be ova or dir" + echo -e "${CError:-}Error: -e argument must be ova or dir${CReset:-}" exit fi OSBASH=exec_cmd @@ -91,10 +93,22 @@ while getopts :be:g:hnw opt; do if [[ "$OPTARG" =~ (headless|gui|sdl) ]]; then VM_UI=$OPTARG else - echo "Error: -g argument must be gui, sdl, or headless" + echo -e "${CError:-}Error: -g argument must be gui, sdl, or headless${CReset:-}" exit fi ;; + -) + case $OPTARG in + no-color) + unset CError CStatus CInfo CProcess CData CMissing CReset + ;; + *) + echo -e "${CError:-}Error: invalid option -$OPTARG${CReset:-}" + echo + usage + ;; + esac + ;; h) usage ;; @@ -105,10 +119,10 @@ while getopts :be:g:hnw opt; do source "$LIB_DIR/wbatch/batch_for_windows" ;; :) - echo "Error: -$OPTARG needs argument" + echo -e "${CError:-}Error: -$OPTARG needs argument${CReset:-}" ;; ?) - echo "Error: invalid option -$OPTARG" + echo -e "${CError:-}Error: invalid option -$OPTARG${CReset:-}" echo usage ;; @@ -152,12 +166,12 @@ fi if [ -z "${OSBASH:-}" -a -z "${WBATCH:-}" ]; then echo - echo "No -b, -w, or -e option given. Exiting." + echo -e "${CMissing:-}No -b, -w, or -e option given. Exiting.${CReset:-}" exit fi STARTTIME=$(date +%s) -echo >&2 "$(date) osbash starting" +echo -e >&2 "${CStatus:-} $(date) osbash starting ${CReset:-}" clean_dir "$LOG_DIR" @@ -175,10 +189,10 @@ function cleanup_base_disk { echo >&2 "Unregistering old base disk." disk_unregister "$BASE_DISK" fi - echo >&2 "Removing old base disk." + echo -e >&2 "${CStatus:-}Removing old base disk.${CReset:-}" rm -f "$BASE_DISK" else - echo >&2 "Nothing to do. Exiting." + echo -e >&2 "${CMissing:-}Nothing to do. Exiting.${CReset:-}" exit fi fi @@ -209,5 +223,5 @@ source "$OSBASH_LIB_DIR/virtualbox.install_nodes" vm_build_nodes "$CMD" #------------------------------------------------------------------------------- ENDTIME=$(date +%s) -echo >&2 "$(date) osbash finished successfully" -echo "osbash completed in $(($ENDTIME - $STARTTIME)) seconds." +echo -e >&2 "${CStatus:-}$(date) osbash finished successfully${CReset:-}" +echo "${CStatus:-}osbash completed in $(($ENDTIME - $STARTTIME)) seconds.${CReset:-}"