Skip to content
Snippets Groups Projects
common 4.65 KiB
Newer Older
  • Learn to ignore specific revisions
  • ulisse's avatar
    ulisse committed
    #!/bin/bash
    
    ###################################################
    
    # VirtualBox VM Scripts 18.6.1 - Common functions
    
    ulisse's avatar
    ulisse committed
    # by ulisse aka A. Livio Beccaria
    
    ###################################################
    
    ulisse's avatar
    ulisse committed
    
    
    ulisse's avatar
    ulisse committed
    # the user executing these scripts
    USER=`whoami`
    
    
    ulisse's avatar
    ulisse committed
    # templates folder
    TEMPLATE_DIR="${SRC_DIR}/templates"
    
    #-------------------------------------------------------------------------------
    
    
    # some terminal output formatting helpers
    BOLD=$(tput bold) # bold
    NORMAL=$(tput sgr0) # reset formatting
    RED=$(tput setaf 1) # red
    GREEN=$(tput setaf 2) # green
    ERROR=$RED # error
    
    # WARNING: this function is just for reference,
    # its only purpose is to remind me how to get a script's source folder properly
    # (the inner command is used at the very beginning of these vbox-scripts, too)
    get_script_source_folder () {
    		local myscript=$1
    		# some alternatives:
    		#echo "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
    		#echo "$( cd "${BASH_SOURCE[0]%/*}" && pwd )"
    		#echo "$(dirname $(readlink -f ${BASH_SOURCE[0]}))"
    		#echo "$(dirname $(readlink -f $0))"
    		echo "$(dirname $(readlink -f $myscript))"
    }
    
    # Check if files matching a wildcard name exist.
    # Example: doesAnyFileExist "test*.settings"
    doesAnyFileExist () {
       local arg="$*"
       local files=($arg)
       [ ${#files[@]} -gt 1 ] || [ ${#files[@]} -eq 1 ] && [ -e "${files[0]}" ]
    }
    
    #declare -a vms=()
    
    # Get all VMs' IDs and put them in the global array vms
    #create_vm_list () {
    #		vms=()
    #		local vms_user=()
    #		local vms_global=()
    #
    #		if [ -d "${VM_SETTINGS_DIR}" ]; then
    #				# add settings files in the folder
    #				for f in $(ls -U "${VM_SETTINGS_DIR}/"*.settings 2> /dev/null) ; do
    #						vms_global=("${vms_global[@]}" "`basename $f .settings`")
    #				done
    #		fi
    #		if [ -d "${VM_USER_SETTINGS_DIR}" ]; then
    #				# add settings files in the folder
    #				for f in $(ls -U "${VM_USER_SETTINGS_DIR}/"*.settings 2> /dev/null) ; do
    #						vms_user=("${vms_user[@]}" "`basename $f .settings`")
    #				done
    #		fi
    #
    #		# get the final list removing duplicates
    #		OLDIFS="$IFS"
    #		IFS=$'\n'
    #		vms=(`for R in "${vms_user[@]}" "${vms_global[@]}" ; do echo "$R" ; done | sort -du`)
    #		IFS="$OLDIFS"
    #}
    
    
    declare -A vms
    
    # Get all VMs' IDs and put them in the global associative array vms
    # key <== VM_ID
    # value <== settings file
    
    ulisse's avatar
    ulisse committed
    create_vm_list () {
    
    		vms=()
    
    		if [ -d "${VM_SETTINGS_DIR}" ]; then
    				# add settings files in the folder
    				for f in $(ls -U "${VM_SETTINGS_DIR}/"*.settings 2> /dev/null) ; do
    						vms_id=("`basename $f .settings`")
    						vms[$vms_id]=$f
    				done
    		fi
    		if [ -d "${VM_USER_SETTINGS_DIR}" ]; then
    				# add settings files in the folder
    				for f in $(ls -U "${VM_USER_SETTINGS_DIR}/"*.settings 2> /dev/null) ; do
    					vms_id=("`basename $f .settings`")
    					vms[$vms_id]=$f
    				done
    		fi
    
    ulisse's avatar
    ulisse committed
    }
    
    
    ulisse's avatar
    ulisse committed
    print_vm_list () {
    
    		create_vm_list
    		# make a sorted array by key (vm_id)
    		mapfile -d '' sorted < <(printf '%s\0' "${!vms[@]}" | sort -z)
    		echo "Available VM IDs:"
    		for k in "${sorted[@]}"; do
    				echo -n "${BOLD}  ${k}${NORMAL}"
    				if [[ ${vms[$k]} == ${VM_USER_SETTINGS_DIR}* ]]; then
    						echo "${GREEN} (user)${NORMAL}"
    				else
    						echo
    				fi
    		done
    
    ulisse's avatar
    ulisse committed
    }
    
    
    
    # Get a VM's settings given its ID
    get_vm_settings_by_id () {
    	  create_vm_list
    		echo "${vms[$1]}"
    #		local fuser=""
    #		local fglobal=""
    #		fuser=`find ${VM_USER_SETTINGS_DIR} -name $1.settings`
    #	  if [ "$fuser" != "" ]; then
    #	    	echo "$fuser"
    #	  else
    #				fglobal=`find ${VM_SETTINGS_DIR} -name $1.settings`
    #				if [ "$fglobal" != "" ]; then
    #	      		echo "$fglobal"
    #				else
    #						echo ""
    #				fi
    #	  fi
    
    # Get a VM's settings given its name
    get_vm_settings_by_name () {
    		local fuser=""
    		local fglobal=""
    		fuser=`grep -liR "VM_NAME=\"$1\"" ${VM_USER_SETTINGS_DIR}/*.settings`
    		if [ "$fuser" != "" ]; then
    				echo "$fuser"
    		else
    				fglobal=`grep -liR "VM_NAME=\"$1\"" ${VM_SETTINGS_DIR}/*.settings`
    				if [ "$fglobal" != "" ]; then
    						echo "$fglobal"
    				else
    						echo ""
    				fi
    		fi
    
    ulisse's avatar
    ulisse committed
    }
    
    
    # Get a VM's settings given its ID or name
    get_vm_settings () {
    		local vm_id=$1
    		local vm_settings=""
    		vm_settings=`get_vm_settings_by_id "${vm_id}"`
    		if [[ "$vm_settings" == "" ]]; then
    		  	vm_settings=`get_vm_settings_by_name "${vm_id}"`
    		fi
    		echo "${vm_settings}"
    }
    
    # Get a VM's ID given its name
    get_vm_id_by_name () {
    		local fuser=`grep -liR "VM_NAME=\"$1\"" ${VM_USER_SETTINGS_DIR}/*.settings`
    	  if [ "$fuser" != "" ]; then
    	    	echo `basename $fuser .settings`
    	  else
    				local fglobal=`grep -liR "VM_NAME=\"$1\"" ${VM_SETTINGS_DIR}/*.settings`
    				if [ "$fglobal" != "" ]; then
    	      		echo `basename $fglobal .settings`
    				else
    						echo ""
    				fi
    	  fi
    }
    
    # Terminate the script with a message and an error code
    die () {
      	echo  >&2 "$@"
    		exit 1