training-guides/labs/osbash.sh
Roger Luethi c474a3a671 labs: reattach shared dirs after export
Shared directories are removed when exporting VMs to an OVA file. This
patch reattaches the shared directories after the VMs haven been
exported.

Change-Id: I3527aac6958df906e2aac8d95744b2362e8660f9
2014-08-25 13:04:18 +02:00

191 lines
5.1 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)
: ${DISTRO:=ubuntu-14.04-server-amd64}
source "$TOP_DIR/config/localrc"
source "$TOP_DIR/config/paths"
source "$CONFIG_DIR/openstack"
source "$CONFIG_DIR/deploy.osbash"
source "$CONFIG_DIR/provider.virtualbox"
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"
function usage {
echo "Usage: $0 [-h] [-r] [-w|-f] [-e] [-n] {basedisk|cluster}"
echo ""
echo "-h Help"
echo "-n Print configuration status and exit"
echo "-w Create Windows batch files, too"
echo "-f Only create Windows batch files (fast)"
echo "-e Export OVA file of VM cluster"
echo ""
echo "basedisk Create configured basedisk"
echo "cluster Create configured VM cluster (and basedisk if necessary)"
exit
}
function print_config {
if [ "$CMD" = "basedisk" ]; then
echo "Target is base disk: $BASE_DISK"
else
echo "Base disk: $BASE_DISK"
echo "Exporting VM cluster: ${EXPORT_OVA:-no}"
fi
echo -n "Creating Windows batch scripts: "
${WBATCH:-:} echo "yes"
${WBATCH:+:} echo "no"
echo -n "Creating $CMD on this machine: "
${OSBASH:-:} echo "yes"
${OSBASH:+:} echo "no"
echo "VM access method: $VM_ACCESS"
}
while getopts efhnw opt; do
case $opt in
e)
EXPORT_OVA=$IMG_DIR/oslabs-$DISTRO.ova
;;
f)
source "$LIB_DIR/wbatch/batch_for_windows"
wbatch_reset
unset OSBASH
;;
h)
usage
;;
n)
INFO_ONLY=1
;;
w)
source "$LIB_DIR/wbatch/batch_for_windows"
;;
?)
echo "Error: unhandled option $opt"
;;
esac
done
# Remove processed options from arguments
shift $(( OPTIND - 1 ));
# Make sure we have exactly one argument, either basedisk or cluster
if [ $# -eq 1 ]; then
CMD=$1
if [ "$CMD" = cluster ]; then
nodes="controller compute network"
else
nodes="$CMD"
fi
else
usage
fi
# Install over ssh by default
: ${VM_ACCESS:=ssh}
# Get base disk path if none is configured
: ${BASE_DISK:=$(get_base_disk_path)}
print_config
if [ "${INFO_ONLY:-0}" -eq 1 ]; then
exit
fi
echo >&2 "$(date) osbash starting"
clean_dir "$LOG_DIR"
function cleanup_base_disk {
if [ "$CMD" = basedisk -a -f "$BASE_DISK" ]; then
echo >&2 "Found existing base disk: $BASE_DISK"
if ! yes_or_no "Keep this base disk?"; then
if disk_registered "$BASE_DISK"; then
# Remove users of base disk
echo >&2 "Unregistering and removing all disks attached to" \
"base disk path."
disk_delete_child_vms "$BASE_DISK"
echo >&2 "Unregistering old base disk."
disk_unregister "$BASE_DISK"
fi
echo >&2 "Removing old base disk."
rm -f "$BASE_DISK"
else
echo >&2 "Nothing to do. Exiting."
exit
fi
fi
}
${OSBASH:-:} cleanup_base_disk
#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
if [ ! -f "$BASE_DISK" ]; then
vm_install_base "$BASE_DISK"
else
# Leave base disk alone, but call the function if wbatch is active
OSBASH= ${WBATCH:-:} vm_install_base "$BASE_DISK"
fi
#-------------------------------------------------------------------------------
if [ "$CMD" = basedisk ]; then
exit
fi
echo "Using base disk $BASE_DISK"
${WBATCH:-:} wbatch_create_hostnet
MGMT_NET_IF=$(create_network "$MGMT_NET")
DATA_NET_IF=$(create_network "$DATA_NET")
API_NET_IF=$(create_network "$API_NET")
#-------------------------------------------------------------------------------
source "$OSBASH_LIB_DIR/virtualbox.install_node"
for node in $nodes; do
vm_build_node "$node"
done
#-------------------------------------------------------------------------------
function export_appliance {
if [ -n "${EXPORT_OVA:-}" ]; then
echo >&2 "Removing shared folders for export"
local -a share_paths
local node
for node in $nodes; do
local share_path=$(vm_get_share_path "$node")
share_paths+=("$share_path")
if [ -n "$share_path" ]; then
vm_rm_share "$node" "$SHARE_NAME"
fi
done
rm -f "$EXPORT_OVA"
mkdir -pv "$IMG_DIR"
$VBM export controller network compute --output "$EXPORT_OVA"
echo >&2 "Appliance exported"
echo >&2 "Reattaching shared folders"
local ii=0
for node in $nodes; do
if [ -n "${share_paths[$ii]}" ]; then
vm_add_share "$node" "$SHARE_DIR" "$SHARE_NAME"
fi
ii=$(($ii + 1))
done
fi
}
export_appliance
#-------------------------------------------------------------------------------
echo >&2 "$(date) osbash finished successfully"