summaryrefslogtreecommitdiff
path: root/contrib/xm
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/xm')
-rw-r--r--contrib/xm231
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