
Running osbash as root or using sudo is not necessary and can lead to unexpected behavior (e.g., "invisible" VMs owned by root rather than the user). With this patch, osbash complains and aborts if it run as root. Change-Id: I08367980a78012e1aed21fde7ca7fb6408fd5933 Partial-Bug: #1602272
254 lines
7.4 KiB
Bash
Executable File
254 lines
7.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -o errexit
|
|
set -o nounset
|
|
|
|
# Kill entire process group
|
|
trap 'kill -- -$$' SIGINT
|
|
|
|
TOP_DIR=$(cd "$(dirname "$0")" && pwd)
|
|
|
|
source "$TOP_DIR/config/localrc"
|
|
source "$TOP_DIR/config/paths"
|
|
source "$CONFIG_DIR/openstack"
|
|
source "$CONFIG_DIR/deploy.osbash"
|
|
source "$OSBASH_LIB_DIR/lib.$DISTRO.sh"
|
|
source "$OSBASH_LIB_DIR/functions-host.sh"
|
|
source "$OSBASH_LIB_DIR/$PROVIDER-functions.sh"
|
|
source "$OSBASH_LIB_DIR/$PROVIDER-install_base.sh"
|
|
source "$LIB_DIR/osbash/lib-color.sh"
|
|
|
|
function usage {
|
|
echo "Usage: $0 {-b|-w} [-g GUI] [--no-color] [-n] [-t SNAP] {TARGET}"
|
|
# Don't advertise export until it is working properly
|
|
# echo " $0 [-e EXPORT] [-n] NODE [NODE..]"
|
|
echo
|
|
echo "-h|--help Help"
|
|
echo "-n Print configuration status and exit"
|
|
echo "-b Build basedisk (if necessary) and node VMs (if any)"
|
|
|
|
# Don't use -t directly, have tools/repeat-test.sh call it
|
|
#echo "-t SNAP Jump to snapshot SNAP and continue build"
|
|
|
|
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 "--no-snap-cycle Disables snapshot cycles during build"
|
|
echo
|
|
echo "TARGET basedisk: build configured basedisk"
|
|
echo " cluster : build OpenStack cluster [all nodes]"
|
|
echo " (and basedisk if necessary)"
|
|
echo "GUI console type: gui, sdl (VirtualBox only), vnc (KVM only),"
|
|
echo " or headless"
|
|
|
|
# Don't use -t SNAP directly, have tools/repeat-test.sh call it
|
|
#echo "SNAP Name of snapshot from which build continues"
|
|
|
|
#echo "EXPORT ova (OVA package file) or dir (VM clone directory)"
|
|
exit
|
|
}
|
|
|
|
function print_config {
|
|
local basedisk=$(get_base_disk_name)
|
|
if [ "$CMD" = "basedisk" ]; then
|
|
echo -e "${CInfo:-}Target is base disk:${CData:-} $basedisk${CReset:-}"
|
|
else
|
|
echo -e "${CInfo:-}Base disk:${CData:-} $basedisk${CReset:-}"
|
|
echo -e "${CInfo:-}Distribution name: ${CData:-} $(get_distro_name "$DISTRO")${CReset:-}"
|
|
fi
|
|
|
|
echo -e "${CInfo:-}Virtualization provider:${CReset:-}" \
|
|
"${CData:-}$PROVIDER${CReset:-}"
|
|
|
|
if [ "${SNAP_CYCLE:-}" = "no" ]; then
|
|
echo -e "${CInfo:-}Skipping snapshot cycles.${CReset:-}"
|
|
fi
|
|
|
|
if [ -n "${EXPORT_OVA:-}" ]; then
|
|
echo "Exporting to OVA: ${EXPORT_OVA}"
|
|
elif [ -n "${EXPORT_VM_DIR:-}" ]; then
|
|
echo "Exporting to directory: ${EXPORT_VM_DIR}"
|
|
else
|
|
echo -e -n "${CInfo:-}Creating Windows batch scripts:${CReset:-} "
|
|
${WBATCH:-:} echo -e "${CData:-}yes${CReset:-}"
|
|
${WBATCH:+:} echo -e "${CData:-}no${CReset:-}"
|
|
|
|
echo -e -n "${CInfo:-}Creating $CMD on this machine:${CReset:-} "
|
|
${OSBASH:-:} echo -e "${CData:-}yes${CReset:-}"
|
|
${OSBASH:+:} echo -e "${CData:-}no${CReset:-}"
|
|
|
|
echo -e "${CInfo:-}VM access method:${CData:-} $VM_ACCESS${CReset:-}"
|
|
|
|
# GUI is the VirtualBox default
|
|
echo -e "${CInfo:-}GUI type:${CData:-} ${VM_UI:-gui}${CReset:-}"
|
|
|
|
if [ -n "${JUMP_SNAPSHOT:-}" ]; then
|
|
echo -e "${CInfo:-}Continuing from snapshot:" \
|
|
"${CData:-}${JUMP_SNAPSHOT}${CReset:-}"
|
|
fi
|
|
fi
|
|
|
|
}
|
|
|
|
if [ $(whoami) = "root" ]; then
|
|
echo "Please run this program as a regular user, not as root or with sudo."
|
|
exit 1
|
|
fi
|
|
|
|
while getopts :be:g:-:hnt:w opt; do
|
|
case $opt in
|
|
e)
|
|
if [ "$OPTARG" = ova ]; then
|
|
EXPORT_OVA=$IMG_DIR/labs-$DISTRO.ova
|
|
elif [ "$OPTARG" = dir ]; then
|
|
EXPORT_VM_DIR=$IMG_DIR/labs-$DISTRO
|
|
else
|
|
echo -e "${CError:-}Error: -e argument must be ova or dir${CReset:-}"
|
|
exit
|
|
fi
|
|
OSBASH=exec_cmd
|
|
;;
|
|
b)
|
|
OSBASH=exec_cmd
|
|
;;
|
|
g)
|
|
if [[ "$OPTARG" =~ (headless|gui|sdl|vnc) ]]; then
|
|
VM_UI=$OPTARG
|
|
else
|
|
echo -e "${CError:-}Error: -g argument must be gui, sdl, vnc, or headless${CReset:-}"
|
|
exit
|
|
fi
|
|
;;
|
|
-)
|
|
case $OPTARG in
|
|
no-color)
|
|
unset CError CStatus CInfo CProcess CData CMissing CReset
|
|
;;
|
|
no-snap-cycle)
|
|
SNAP_CYCLE="no"
|
|
;;
|
|
help)
|
|
usage
|
|
;;
|
|
*)
|
|
echo -e "${CError:-}Error: invalid option -$OPTARG${CReset:-}"
|
|
echo
|
|
usage
|
|
;;
|
|
esac
|
|
;;
|
|
h)
|
|
usage
|
|
;;
|
|
n)
|
|
INFO_ONLY=1
|
|
;;
|
|
t)
|
|
JUMP_SNAPSHOT=$OPTARG
|
|
;;
|
|
w)
|
|
source "$LIB_DIR/wbatch/batch_for_windows.sh"
|
|
;;
|
|
:)
|
|
echo -e "${CError:-}Error: -$OPTARG needs argument${CReset:-}"
|
|
;;
|
|
?)
|
|
echo -e "${CError:-}Error: invalid option -$OPTARG${CReset:-}"
|
|
echo
|
|
usage
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Remove processed options from arguments
|
|
shift $(( OPTIND - 1 ));
|
|
|
|
if [ $# -eq 0 ]; then
|
|
# No argument given
|
|
usage
|
|
else
|
|
CMD=$1
|
|
fi
|
|
|
|
# Install over ssh by default
|
|
: ${VM_ACCESS:=ssh}
|
|
|
|
print_config
|
|
|
|
if [ "${INFO_ONLY:-0}" -eq 1 ]; then
|
|
exit
|
|
fi
|
|
|
|
# Clean wbatch directory
|
|
${WBATCH:-:} wbatch_reset
|
|
|
|
if [ -n "${EXPORT_OVA:-}" ]; then
|
|
vm_export_ova "$EXPORT_OVA" "$nodes"
|
|
exit
|
|
fi
|
|
|
|
if [ -n "${EXPORT_VM_DIR:-}" ]; then
|
|
vm_export_dir "$EXPORT_VM_DIR" "$nodes"
|
|
exit
|
|
fi
|
|
|
|
if [ -z "${OSBASH:-}" -a -z "${WBATCH:-}" ]; then
|
|
echo
|
|
echo -e "${CMissing:-}No -b, -w, or -e option given. Exiting.${CReset:-}"
|
|
exit
|
|
fi
|
|
|
|
STARTTIME=$(date +%s)
|
|
echo -e >&2 "${CStatus:-} $(date) osbash starting ${CReset:-}"
|
|
|
|
clean_dir "$LOG_DIR"
|
|
|
|
function check_existing_base_disk {
|
|
if [ "$CMD" = basedisk ]; then
|
|
if base_disk_exists; then
|
|
|
|
echo >&2 "Found existing base disk: $(get_base_disk_name)"
|
|
|
|
if ! yes_or_no "Keep this base disk?"; then
|
|
base_disk_delete
|
|
else
|
|
echo -e >&2 "${CMissing:-}Nothing to do. Exiting.${CReset:-}"
|
|
exit
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
${OSBASH:-:} check_existing_base_disk
|
|
|
|
#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
if ! base_disk_exists; then
|
|
echo -e >&2 "${CStatus:-}Creating basedisk.${CReset:-}"
|
|
vm_install_base
|
|
else
|
|
echo -e >&2 "${CStatus:-}basedisk already exists.${CReset:-}"
|
|
# Leave base disk alone, but call the function if wbatch is active
|
|
OSBASH= ${WBATCH:-:} vm_install_base
|
|
fi
|
|
#-------------------------------------------------------------------------------
|
|
if [ "$CMD" = basedisk ]; then
|
|
exit
|
|
fi
|
|
|
|
# Don't stop VMs if LEAVE_VMS_RUNNING is set (needed by repeat-test)
|
|
${LEAVE_VMS_RUNNING:+:} stop_running_cluster_vms
|
|
|
|
echo "Building nodes using base disk $(get_base_disk_name)"
|
|
|
|
create_host_networks
|
|
${WBATCH:-:} wbatch_create_hostnet
|
|
#-------------------------------------------------------------------------------
|
|
source "$OSBASH_LIB_DIR/$PROVIDER-install_nodes.sh"
|
|
vm_build_nodes "$CMD"
|
|
#-------------------------------------------------------------------------------
|
|
ENDTIME=$(date +%s)
|
|
echo -e >&2 "${CStatus:-}$(date) osbash finished successfully${CReset:-}"
|
|
echo -e >&2 "${CStatus:-}osbash completed in $((ENDTIME - STARTTIME))" \
|
|
"seconds.${CReset:-}"
|