Commit 170b67d2 authored by Vitaly Lipatov's avatar Vitaly Lipatov

add vboxmanage (VirtualBox) support

parent 18cd75a1
#!/bin/sh
#
# Copyright (C) 2020 Etersoft
# Copyright (C) 2020 Vitaly Lipatov <lav@etersoft.ru>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# list all running containers (or by arg list)
list_all()
{
if [ -n "$1" ] ; then
echo "$*"
return
fi
a= docmd vboxmanage list runningvms | sed -e "s|.*{\(.*\)}|\1|"
# | line_filter
}
# list all containers (or by arg list)
list_ALL()
{
if [ -n "$1" ] ; then
echo "$*"
return
fi
a= vboxmanage list vms | sed -e "s|.*{\(.*\)}|\1|"
# | line_filter
}
todo()
{
warning "$@"
}
# TODO: add all support for all cases
evz_vboxmanage()
{
CMD=$1
shift
case $CMD in
off) # HELPCMD: stop container(s) and disable start on boot
LIST=$(get_list "$@")
for i in $LIST ; do
#info "Stopping $i ..."
todo docmd docker stop $i
todo docmd docker update --restart no $i
done
;;
on) # HELPCMD: enable start on boot and start container(s)
for i in "$@" ; do
#info "Starting $i ..."
# TODO: check if enabled
todo docmd docker update --restart always $i
todo docmd docker start $i
done
;;
status) # HELPCMD: print container(s) status
LIST=$(get_list "$@")
#info "Do $CMD for $LIST ..."
for i in $LIST ; do
todo docmd docker stats --no-stream --no-trunc $i
done
;;
compact) # HELPCMD: do named operation on container(s)
LIST=$(get_list "$@")
for i in $LIST ; do
info "Do $CMD on $i ..."
todo vzctl $CMD $i
done
;;
ports) # HELPCMD: show public ports
LIST=$(get_list "$@")
for i in $LIST ; do
#info "Do $CMD on $i ..."
todo docmd docker port $i
done
;;
set) # HELPCMD: set param. Use with --option param
OPTIONS="$1 $2"
shift 2
LIST=$(get_list "$@")
for i in $LIST ; do
info "Do $CMD on $i ..."
todo vzctl $CMD $i $OPTIONS --save
done
;;
ubc|resources|show) # HELPCMD: print resource using
LIST=$(get_list "$@")
for i in $LIST ; do
docmd vboxmanage showvminfo $i
done
;;
stop) # HELPCMD: stop container(s)
LIST=$(get_list "$@")
for i in $LIST ; do
info "Stopping $i ..."
if [ -n "$force" ] ; then
docmd vboxmanage controlvm $i poweroff
continue
fi
docmd vboxmanage controlvm $i acpipowerbutton
done
;;
start) # HELPCMD: start container(s)
LIST=$(get_list "$@")
for i in $LIST ; do
info "Starting $i ..."
docmd vboxmanage startvm --type headless $i
done
;;
restart) # HELPCMD: restart container(s)
LIST=$(get_list "$@")
for i in $LIST ; do
info "Restarting $i ..."
todo docmd ker restart $i
done
;;
list|ps) # HELPCMD: list available container(s) (use -q|-1 for list only ID, list -a for list ever stopped containers)
# if -q, just id list
if [ -z "$verbose" ] || [ "$1" = "-1" ] || [ "$1" = "-q" ] ; then
[ -z "$verbose" ] || shift
get_list "$@"
exit
fi
if [ "$1" = "-a" ] ;then
docmd vboxmanage list vms
else
docmd vboxmanage list runningvms
fi
;;
exec) # HELPCMD: execute command by list (all for all containers)
INCMD="$1"
shift
LIST=$(get_list "$@")
for i in $LIST ; do
todo showcmd docker exec -ti $SETLANG "$i" "$INCMD"
todo a= docker exec -ti $SETLANG "$i" "$INCMD"
done
;;
enter) # HELPCMD: enter in a container with ID
todo showcmd docker exec -ti $SETLANG "$1" bash
todo a= docker exec -ti $SETLANG "$1" bash
;;
log|logs) # HELPCMD: print container log
todo docmd docker logs "$1"
;;
info) # HELPCMD: print containers(s) info (vzlist like)
docmd vboxmanage list systemproperties
;;
load) # HELPCMD: print load average for container(s) by list
todo LOAD
#for id in $(get_list "$@") ; do
# HN=$(a= docker inspect --format '{{.Name}}' $id)
# CPU=$(a= docker stats --no-stream --format " {{.CPUPerc}}" $id)
# printf "%4s (%30s): %6s\n" $id $HN $CPU
#done
;;
destroy) # HELPCMD: destroy container(s) by list
echo "You request to destroy follow containers:"
# don't support all/ALL
#LIST=$(get_list "$@")
LIST="$@"
echo "$LIST"
#local response
read -r -p "Are you sure? [Yes/No]" response
[ "$response" = "Yes" ] || fatal "Have no receive your accept."
for i in $LIST ; do
docmd vboxmanage unregistervm $i --delete
done
;;
*)
fatal "Unknow command '$CMD'. Use --help to get help."
;;
esac
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment