
Initial submission for a Python-based virtualbox installer for StarlingX Co-Authored-By: Ovidiu.Poncea <ovidiu.poncea@windriver.com> Co-Authored-By: Wei Zhou <wei.zhou@windriver.com> Co-Authored-By: William Jia <william.jia@windriver.com> Co-Authored-By: Sebastien Papineau <sebastien.papineau@windriver.com> Co-Authored-By: Timothy Mather <timothy.mather@windriver.com> Co-Authored-By: Paul Buzuloiu <paul.buzuloiu@windriver.com> DocImpact Story: 2005051 Task: 29552 Signed-off-by: Maria Yousaf <maria.yousaf@windriver.com> Change-Id: Iad5b6d8103886d7eeeab7bf2782eca4adb95e3e6
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
|
|
|