Commit 11f18fbc authored by Vitaly Lipatov's avatar Vitaly Lipatov

add qm (qemu) support

parent 011651db
......@@ -38,6 +38,7 @@ check_tty
MCTL=""
[ -z "$MCTL" ] && which vzctl 2>/dev/null >/dev/null && MCTL="openvz"
[ -z "$MCTL" ] && which docker 2>/dev/null >/dev/null && MCTL="docker"
[ -z "$MCTL" ] && which qm 2>/dev/null >/dev/null && MCTL="qm"
[ -n "$MCTL" ] || warning "Can't detect supported virtualization tool"
......
#!/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/>.
#
SETLANG="-e ru_RU.UTF8"
# list all running containers (or by arg list)
list_all()
{
if [ -n "$1" ] ; then
echo "$*"
return
fi
a= qm list | grep "[0-9]\+" | sed -e "s| *\([0-9]\+\) .*|\1|" | line_filter
}
# list all containers (or by arg list)
list_ALL()
{
if [ -n "$1" ] ; then
echo "$*"
return
fi
a= qm list | grep "[0-9]\+" | sed -e "s| *\([0-9]\+\) .*|\1|" | line_filter
}
todo()
{
warning "FIXME: $@"
}
# TODO: add all support for all cases
evz_qm()
{
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 ..."
docmd qm 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
docmd qm start $i
done
;;
status) # HELPCMD: print container(s) status
LIST=$(get_list "$@")
#info "Do $CMD for $LIST ..."
for i in $LIST ; do
docmd qm status $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) # HELPCMD: print resource using
LIST=$(get_list "$@")
todo showcmd docker stats --no-stream --no-trunc
#for i in $LIST ; do
# a= docker stats --no-stream --no-trunc $i
#done
;;
stop) # HELPCMD: stop container(s)
LIST=$(get_list "$@")
for i in $LIST ; do
info "Stopping $i ..."
docmd qm stop $i
done
;;
start) # HELPCMD: start container(s)
LIST=$(get_list "$@")
for i in $LIST ; do
info "Starting $i ..."
docmd qm start $i
done
;;
restart) # HELPCMD: restart container(s)
LIST=$(get_list "$@")
for i in $LIST ; do
info "Restarting $i ..."
docmd qm reboot $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
docmd qm list "$@"
#info "See evz ports ID for print ports"
;;
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"
#a= docker exec -ti $SETLANG "$i" "$INCMD"
done
;;
enter) # HELPCMD: enter in a container with ID
todo showcmd docker exec -ti $SETLANG "$1" bash
#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)
LIST=$(get_list "$@")
#showcmd docker ps --format 'table {{.ID}}\t{{.Image}}\t{{.Status}}\t{{.Names}}\t{{.Size}}'
#a= docker ps --format 'table {{.ID}}\t{{.Image}}\t{{.Status}}\t{{.Names}}\t{{.Size}}' "$@"
for i in $LIST ; do
# a= docker ps --format 'table {{.ID}}\t{{.Image}}\t{{.Status}}\t{{.Names}}\t{{.Size}}' "$@"
#info "Executing on $i ..."
#printf "%3d: %s" $i "$(vzctl exec $i "$INCMD")"
#vzctl exec $i "$INCMD" | sed -e "s|^|$(printf "%3d: " $i)|g"
#vzctl exec $i "$INCMD"
# TODO: internal IP, red if internal hostname differs
#vzlist $LIST -o ctid,ip,hostname,diskspace
docmd qm config $i
done
#info "See evz ports ID for print ports"
;;
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
;;
check) # HELPCMD: check system
a= pveversion -v
;;
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
info "Stopping $i ..."
docmd qm stop $i
docmd qm destroy $i
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