blob: f24c82b8542462fe830dfd3b44e56b268031b121 [file] [log] [blame] [raw]
# OpenVZ vzctl bash completion by Kir Kolyshkin <kir@openvz.org>
# Put this file to /etc/bash_completion.d/
_get_ves()
{
local cmd=$1
case $cmd in
create)
# any VEID
echo
;;
start|mount|umount|destroy)
# stopped VEs
/usr/sbin/vzlist -H -S -ovpsid
;;
stop)
# running VEs
/usr/sbin/vzlist -H -ovpsid
;;
*)
# All VEs
/usr/sbin/vzlist -H -a -ovpsid
;;
esac
}
_vzctl()
{
local cur prev cmd vzctl_cmds vzctl_create_opts vzctl_set_opts
local iptables_names cap_names
# echo "ARGS: $*"
# echo "COMP_WORDS: $COMP_WORDS"
# echo "COMP_CWORD: $COMP_CWORD"
# echo "COMP_WORDS[1]: ${COMP_WORDS[1]}"
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
vzctl_common_opts="--quiet --verbose --help --version"
vzctl_cmds="create destroy mount umount chkpnt restore \
set start stop restart status enter exec exec2 runscript"
vzctl_create_opts="--ostemplate --config --private --root \
--ipadd --hostname FIXME"
vzctl_set_opts="--save --onboot --root --private \
--userpasswd --disabled --ipadd --ipdel \
--hostname --nameserver --searchdomain \
--numproc --numtcpsock --numothersock --vmguarpages \
--kmemsize --tcpsndbuf --tcprcvbuf --othersockbuf \
--dgramrcvbuf --oomguarpages --lockedpages --privvmpages \
--shmpages --numfile --numflock --numpty --numsiginfo \
--dcachesize --numiptent --physpages --cpuunits --cpulimit \
--iptables --netdev_add --netdev_del --veth_add --veth_del \
--diskspace --diskinodes --quotatime --quotaugidlimit \
--noatime --capability --devnodes --applyconfig"
iptables_names="iptable_filter iptable_mangle ipt_limit
ipt_multiport ipt_tos ipt_TOS ipt_REJECT ipt_TCPMSS
ipt_tcpmss ipt_ttl ipt_LOG ipt_length ip_conntrack
ip_conntrack_ftp ip_conntrack_irc ipt_conntrack ipt_state
ipt_helper iptable_nat ip_nat_ftp ip_nat_irc ipt_REDIRECT"
cap_names="chown dac_override dac_read_search fowner fsetid kill
setgid setuid setpcap linux_immutable net_bind_service
net_broadcast net_admin net_raw ipc_lock ipc_owner
sys_module sys_rawio sys_chroot sys_ptrace sys_pacct
sys_admin sys_boot sys_nice sys_resource sys_time
sys_tty_config mknod lease setveid ve_admin"
case $COMP_CWORD in
1)
# command or global option
COMPREPLY=( $( compgen -W \
"$vzctl_cmds $vzctl_common_opts" -- $cur ) )
;;
2)
case "$prev" in
--help|--version)
COMPREPLY=()
;;
--*)
# command
COMPREPLY=( $( compgen -W "$vzctl_cmds" -- $cur ) )
;;
*)
# VEID
COMPREPLY=( $( compgen -W \
"$(_get_ves $prev)" -- $cur ) )
;;
esac
;;
*) # COMP_CWORD >= 3
if [[ $COMP_CWORD -eq 3 && ! $prev =~ '^[1-9][0-9]*$' ]]; then
# VEID
COMPREPLY=( $( compgen -W \
"$(_get_ves $prev)" -- $cur ) )
else
# flag or option
case $prev in
--ostemplate)
# FIXME: get /vz/template from /etc/sysconfig/vz
COMPREPLY=( $( compgen -W \
"$(ls -1 /vz/template/cache/*.tar.gz | \
sed s/.tar.gz$//)" -- $cur ) )
;;
--onboot|--disabled|--noatime)
COMPREPLY=( $( compgen -W "yes no" -- $cur ) )
;;
--config|--applyconfig)
# FIXME: get /vz/template
# from /etc/sysconfig/vz (TEMPLATE)
local configs=$(ls -1 /etc/sysconfig/vz-scripts/*.conf-sample | sed -e 's#^/etc/sysconfig/vz-scripts/##' -e 's#.conf.sample$##')
configs=${configs/.confi-sample//}
COMPREPLY=( $( compgen -W \
"$configs" -- $cur ) )
;;
--iptables)
COMPREPLY=( $( compgen -W \
"$iptables_names" -- $cur ) )
;;
--netdev*)
local devs=`/sbin/ifconfig | \
awk '/^[^[:space:]]/ {print $1}' | \
egrep -v 'venet|lo'`
COMPREPLY=( $( compgen -W "$devs" -- $cur ) )
;;
--capability)
# capname:on|off
COMPREPLY=( $( compgen -W \
"$cap_names" -- $cur ) )
# FIXME: add :on or :off -- doesn't work :(
# if [[ ${#COMPREPLY[@]} -le 1 ]]; then
# if [[ $cur =~ ":" ]]; then
# cap=${cur%%:*}
# else
# cap=${COMPREPLY[0]%%:*}
# fi
# Single match: add :on|:off
# COMPREPLY=( $(compgen -W \
# "${cap}:on ${cap}:off" -- $cur) )
# fi
;;
--devnodes)
# FIXME: device:r|w|rw|none
local devs=''
COMPREPLY=( $( compgen -W "$devs" -- $cur ) )
;;
--ipdel)
# Get VEID
local ve=${COMP_WORDS[2]}
if [[ ! ${ve} =~ '^[1-9][0-9]*$' ]] ; then
# --verbose or --quiet used
ve=${COMP_WORDS[3]}
fi
# Get VE IPs
local ips=`/usr/sbin/vzlist -H -o ip $ve | \
grep -v -- -`
COMPREPLY=( $( compgen -W "$ips all" -- $cur ) )
;;
--private|--root)
# FIXME
# Dir autocompletion works bad since there is
# a space added. Alternatively, we could use
# -o dirname option to 'complete' -- but it
# makes no sense for other parameters (UBCs
# etc). So no action for now.
;;
*)
if [[ "${prev::2}" != "--" || \
"$prev" = "--save" ]]; then
# List options
cmd=${COMP_WORDS[1]}
if [ ${cmd::2} = "--" ] ; then
# --verbose or --quiet used
cmd=${COMP_WORDS[2]}
fi
case "$cmd" in
create)
COMPREPLY=( $( compgen -W \
"$vzctl_create_opts" \
-- $cur ) )
;;
set)
COMPREPLY=( $( compgen -W \
"$vzctl_set_opts" \
-- $cur ) )
;;
chkpnt|restore)
COMPREPLY=( $( compgen -W \
"--dumpfile" -- $cur ) )
;;
stop)
COMPREPLY=( $( compgen -W \
"--fast" -- $cur ) )
;;
*)
;;
esac
else
# Option that requires an argument
# which we can't autocomplete
COMPREPLY=( $( compgen -W \
"" -- $cur ) )
fi
;;
esac
fi
esac
return 0
}
complete -F _vzctl vzctl