
The lab-setup files are refactored, as detailed below. In addition, recovery, administration and logging improvements are implemented. The following lab-setup files are removed: - lab_setup1.sh - lab_setup2.sh The corresponding code, previously run locally in the VM, is now integrated to the main Python code. The files lab_setup.sh and lab_setup.conf are kept, because they are useful to populate the stx-openStack application. These should be reviewed by a new task under the context of stx-openStack. Test Plan - AIO-SX Virtual Deployment (PASS) - AIO-DX Virtual Deployment (PASS) Story: 2005051 Task: 48402 Change-Id: I940e5a16ea98a4325efe1ee0dd45127674d6b192 Signed-off-by: Roger Ferraz <rogerio.ferraz@encora.com>
128 lines
3.4 KiB
Bash
Executable File
128 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
|
|
|
|
GROUP=$1
|
|
ACTION=$2
|
|
SNAP_NAME=$3
|
|
|
|
if [ $# -lt 2 ]; then
|
|
echo "Usage: $0 <group_name> <action> [<snap_name>]"
|
|
echo "Available cmds:"
|
|
echo " Instance actions: pause|resume|poweroff|poweron"
|
|
echo " Snapshot actions: take|delete|restore"
|
|
|
|
echo ""
|
|
|
|
echo "###### Available groups: "
|
|
groups=$(vboxmanage list groups)
|
|
for grp in $groups; do
|
|
grp_txt=${grp:2:-1}
|
|
if [ ! -z "$grp_txt" ]; then
|
|
echo "$grp_txt"
|
|
fi
|
|
done
|
|
|
|
exit 0
|
|
fi
|
|
|
|
|
|
echo "###### Params:"
|
|
echo "Group name: $GROUP"
|
|
echo "Action: $ACTION"
|
|
if [ ! -z "$SNAP_NAME" ]; then
|
|
echo "Snapshot name: $SNAP_NAME"
|
|
fi
|
|
|
|
BASIC_INST_ACTIONS="pause poweroff"
|
|
SNAP_ACTIONS="take delete restore"
|
|
|
|
get_vms_by_group () {
|
|
local group=$1
|
|
vms=$(vboxmanage list -l vms |
|
|
awk -v group="/$group" \
|
|
'/^Name:/ { name = $2; } '`
|
|
'/^Groups:/ { groups = $2; } '`
|
|
'/^UUID:/ { uuid = $2; if (groups == group) print name, uuid; }')
|
|
echo "###### VMs in group:" >&2
|
|
echo "$vms" >&2
|
|
echo "$vms"
|
|
|
|
}
|
|
|
|
if [[ "$SNAP_ACTIONS" = *"$ACTION"* ]]; then
|
|
if [ $# -lt 3 ]; then
|
|
echo "###### ERROR:"
|
|
echo "Action '$ACTION' requires a snapshot name."
|
|
fi
|
|
vms=$(get_vms_by_group "$GROUP")
|
|
echo "#### Executing action on vms"
|
|
while read -r vm; do
|
|
vm=(${vm})
|
|
echo "Executing '$ACTION' on ${vm[0]}..."
|
|
vboxmanage snapshot ${vm[1]} "${ACTION}" "${SNAP_NAME}"
|
|
done <<< "$vms"
|
|
elif [[ "$BASIC_INST_ACTIONS" = *"$ACTION"* ]]; then
|
|
vms=$(get_vms_by_group "$GROUP")
|
|
echo "#### Executing action on vms"
|
|
while read -r vm; do
|
|
vm=(${vm})
|
|
echo "Executing '$ACTION' on '${vm[0]}'..."
|
|
vboxmanage controlvm ${vm[1]} "${ACTION}"
|
|
done <<< "$vms"
|
|
wait
|
|
elif [[ "$ACTION" = "resume" ]]; then
|
|
echo "resume"
|
|
vms=$(get_vms_by_group "$GROUP")
|
|
# Getting vm's in saved state
|
|
saved_vms=""
|
|
while read -r vm; do
|
|
vmA=(${vm})
|
|
state=$(vboxmanage showvminfo ${vmA[1]} --machinereadable |
|
|
grep "VMState=")
|
|
if [[ "$state" = *"saved"* ]]; then
|
|
if [ -z "$saved_vms" ]; then
|
|
saved_vms="$vm"
|
|
else
|
|
saved_vms=$(printf '%s\n%s' "$saved_vms" "$vm")
|
|
fi
|
|
fi
|
|
done <<< "$vms"
|
|
echo "#### VMs in saved state:"
|
|
echo "$saved_vms"
|
|
# Powering on each VM
|
|
echo "#### Preparing vms for start"
|
|
if [ ! -z "$saved_vms" ]; then
|
|
while read -r vm; do
|
|
vm=(${vm})
|
|
echo "Powering on VM \"${vm[1]}\"."
|
|
(VBoxHeadless --start-paused --startvm ${vm[1]} \
|
|
--vrde config >/dev/null 2>&1) &
|
|
sleep 1
|
|
while true; do
|
|
state=$(vboxmanage showvminfo ${vm[1]} --machinereadable |
|
|
grep "VMState=")
|
|
if [[ "$state" = *"paused"* ]]; then
|
|
break
|
|
fi
|
|
done
|
|
done <<< "$saved_vms"
|
|
fi
|
|
elif [[ "$ACTION" = "poweron" ]]; then
|
|
vms=$(get_vms_by_group "$GROUP")
|
|
echo "#### Powering on vms"
|
|
while read -r vm; do
|
|
vm=(${vm})
|
|
(vboxmanage startvm ${vm[1]} --type headless) &
|
|
done <<< "$vms"
|
|
wait
|
|
elif [[ "$ACTION" = "poweroff" ]]; then
|
|
echo "poweroff"
|
|
else
|
|
echo "###### ERROR:"
|
|
echo "ERROR: Action '$ACTION' not supported"
|
|
fi
|
|
|