diff options
Diffstat (limited to 'contrib/xm')
-rw-r--r-- | contrib/xm | 231 |
1 files changed, 231 insertions, 0 deletions
diff --git a/contrib/xm b/contrib/xm new file mode 100644 index 00000000..b8337e5a --- /dev/null +++ b/contrib/xm @@ -0,0 +1,231 @@ +# 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_real "$cur" + ;; + 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[@]:-} \ + $( compgen -W '$( command ls /etc/xen 2>/dev/null )' \ + -- "$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 +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh |