2009-06-08 21:41:22 +03:00

219 lines
4.4 KiB
Bash

# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*-
# ex: ts=8 sw=8 noet filetype=sh
#
# bash completion for xm
have xm && {
_xen_domain_names()
{
COMPREPLY=( $(compgen -W "$( xm list 2>/dev/null | awk '!/Name|Domain-0/ { print $1 }' )" -- $cur) )
}
_xen_domain_ids()
{
COMPREPLY=( $(compgen -W "$( xm list 2>/dev/null | awk '!/Name|Domain-0/ { print $2 }' )" -- $cur) )
}
_xm()
{
# TODO: _split_longopt
local cur prev command options
COMPREPLY=()
cur=`_get_cword`
commands='console create new delete destroy domid domname dump-core \
list mem-max mem-set migrate pause reboot rename restore \
resume save shutdown start suspend sysrq trigger top unpause \
uptime vcpu-list vcpu-pin vcpu-set debug-keys dmesg info log \
serve sched-credit sched-sedf block-attach block-detach \
block-list network-attach network-detach network-list \
vtpm-list vnet-list vnet-create vnet-delete labels addlabel \
rmlabel getlabel dry-run resources makepolicy loadpolicy \
cfgbootpolicy dumppolicy help'
if [[ $COMP_CWORD -eq 1 ]] ; then
COMPREPLY=( $( compgen -W "$commands" -- $cur ) )
else
prev=${COMP_WORDS[COMP_CWORD-1]}
if [[ "$cur" == *=* ]]; then
prev=${cur/=*/}
cur=${cur/*=/}
fi
command=${COMP_WORDS[1]}
if [[ "$cur" == -* ]]; then
# possible options for the command
case $command in
create)
options='-c'
;;
dmesg)
options='--clear'
;;
list)
options='--long'
;;
reboot)
options='-w -a'
;;
shutdown)
options='-w -a -R -H'
;;
sched-credit)
options='-d -w -c'
;;
@(block|network|vtpm|vnet)-list)
options='-l --long'
;;
getpolicy)
options='--dumpxml'
;;
new)
options='-h --help --help_config -q \
--quiet --path= -f= \
--defconfig= -F= --config= \
-b --dryrun -x --xmldryrun \
-s --skipdtd -p --paused -c \
--console_autoconnect'
;;
esac
COMPREPLY=( $( compgen -W "$options" -- $cur ) )
else
case $command in
@(console|destroy|domname|domid|list|mem-@(set|max)|pause|reboot|rename|shutdown|unpause|vcpu-@(list|pin|set)|block-list|network-list|vtpm-list))
_count_args
case $args in
2)
_xen_domain_names
;;
esac
;;
migrate)
_count_args
case $args in
2)
_xen_domain_names
;;
3)
_known_hosts
;;
esac
;;
@(restore|dry-run|vnet-create))
_filedir
;;
save)
_count_args
case $args in
2)
_xen_domain_names
;;
3)
_filedir
;;
esac
;;
sysrq)
_count_args
case $args in
2)
_xen_domain_names
;;
3)
COMPREPLY=( $(compgen -W "r s e i u b" -- $cur) )
;;
esac
;;
block-attach)
_count_args
case $args in
2)
_xen_domain_names
;;
3)
COMPREPLY=( $(compgen -W "phy: file:" -- $cur) )
;;
5)
COMPREPLY=( $(compgen -W "w r" -- $cur) )
;;
6)
_xen_domain_names
;;
esac
;;
block-detach)
_count_args
case $args in
2)
_xen_domain_names
;;
3)
COMPREPLY=( $(compgen -W "$( xm block-list $prev 2>/dev/null | awk '!/Vdev/ { print $1 }' )" -- $cur) )
;;
esac
;;
network-attach)
_count_args
case $args in
2)
_xen_domain_names
;;
*)
COMPREPLY=( $(compgen -W "script= ip= mac= bridge= backend=" -- $cur) )
;;
esac
;;
network-detach)
_count_args
case $args in
2)
_xen_domain_names
;;
3)
COMPREPLY=( $(compgen -W "$( xm network-list $prev 2>/dev/null | awk '!/Idx/ { print $1 }' )" -- $cur) )
;;
esac
;;
sched-credit)
case $prev in
-d)
_xen_domain_names
return 0
;;
esac
;;
create)
_filedir
COMPREPLY=( ${COMPREPLY[@]:-} \
$( command ls /etc/xen | grep "^$cur" ) )
;;
new)
case $prev in
-@(f|F|-defconfig|-config))
_filedir
return 0
;;
--path)
_filedir -d
return 0
;;
esac
_count_args
case $args in
2)
_xen_domain_names
;;
esac
;;
esac
fi
fi
return 0
}
complete -F _xm xm
}