]> xenbits.xensource.com Git - people/dariof/xen-tools.git/commitdiff
Rename misc/{xen-tools → xen-tools.bash-completion}
authorAxel Beckert <abe@deuxchevaux.org>
Mon, 21 Jan 2013 23:21:10 +0000 (00:21 +0100)
committerAxel Beckert <abe@deuxchevaux.org>
Mon, 21 Jan 2013 23:21:10 +0000 (00:21 +0100)
This prevents name space cluttering and ambiguity in xen-tools/misc/.

Makefile
misc/xen-tools [deleted file]
misc/xen-tools.bash-completion [new file with mode: 0644]

index c3a9c77a7c79b251a91d029b931912c1ad1d7db2..8b20548abf6c103e8b560fc1797b6544d9959e56 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -110,8 +110,8 @@ install-etc:
        cp etc/xm.tmpl        ${prefix}/etc/xen-tools/
        cp etc/xm-nfs.tmpl    ${prefix}/etc/xen-tools/
        cp partitions/*-*     ${prefix}/etc/xen-tools/partitions.d/
-       -mkdir -p             ${prefix}/etc/bash_completion.d
-       cp misc/xen-tools     ${prefix}/etc/bash_completion.d/
+       -mkdir -p                         ${prefix}/etc/bash_completion.d/
+       cp misc/xen-tools.bash-completion ${prefix}/etc/bash_completion.d/xen-tools
        -mkdir -p                         ${prefix}/etc/initramfs-tools/conf.d/
        cp misc/xen-tools.initramfs-tools ${prefix}/etc/initramfs-tools/conf.d/xen-tools
 
diff --git a/misc/xen-tools b/misc/xen-tools
deleted file mode 100644 (file)
index 1a9c069..0000000
+++ /dev/null
@@ -1,508 +0,0 @@
-# -*- shell-script -*-
-#
-#  /etc/bash_completion.d/xen-tools
-#
-# Completion functions for Bash.
-#
-# This file offers basic support for all the command line options, along with
-# some specialist support to complete filesystem types, distribution targets,
-# virtual images, etc.
-#
-#  References on command line completion:
-#
-#    http://www.debian-administration.org/articles/316
-#    http://www.debian-administration.org/articles/317
-#    http://dev.gentoo.org/~plasmaroo/devmanual/tasks-reference/completion/
-#
-# Steve
-# --
-# http://www.steve.org.uk
-#
-#
-
-
-#
-#  Utility function to find the names of each existing Xen image,
-# we do this by parsing the files matching /etc/xen/*.cfg
-#
-function _find_xen_images
-{
-    local names name
-
-    for i in /etc/xen/*.cfg ; do
-        name=`grep ^name $i 2>/dev/null | awk -F\'  '{print $2}'`
-        if [ ! -z "${name}" ] ; then
-            names="${names} ${name}"
-        fi
-    done
-
-    echo "${names}"
-}
-
-#
-#  Completion for xen-create-image
-#
-#  Completes the command line flags, and will allow tab completion of
-# the supported filesystems
-#
-_xen_create_image()
-{
-    local cur prev ip roles partitions dists vgs
-
-    COMPREPLY=()
-    cur=${COMP_WORDS[COMP_CWORD]}
-    prev=${COMP_WORDS[COMP_CWORD-1]}
-
-    # Determine arguments dynamically.  Avoids out-of-dateness.
-    opts=$(xen-create-image --help|grep -- --|awk '{print $1}' |grep -- -- | sort -u)
-
-
-    #
-    # Complete the initial part of the IP in the configuration file.
-    ip=`grep ^gateway /etc/xen-tools/xen-tools.conf 2>/dev/null | awk -F'= '  '{print $2}'`
-
-    #
-    # Available distributions, by which we mean distributions which
-    # we have hook scripts available.
-    #
-    for i in `/bin/ls -1 /usr/lib/xen-tools/ ` ; do
-        if [ -d /usr/lib/xen-tools/${i} ]; then
-            dists="${dists} ${i/.d/}"
-        fi
-    done
-
-    #
-    # Volume group completion
-    #
-    vgs=`vgdisplay 2>/dev/null | grep Name 2>/dev/null | awk '{print $3}'`
-
-    #
-    # EVMS container completion
-    #
-    evmscontainers=`evms_query containers 2>/dev/null`
-
-    case "$prev" in
-        --cache)
-            COMPREPLY=( $( compgen -W 'yes no'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --cachedir)
-            _filedir -d
-            return 0
-            ;;
-        --config)
-            _filedir .conf
-            return 0
-            ;;
-        --debootstrap-cmd)
-            _filedir
-            return 0
-            ;;
-        --dir)
-            _filedir -d
-            return 0
-            ;;
-        --dist)
-            COMPREPLY=( $( compgen -W '${dists}'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --evms)
-            COMPREPLY=( $( compgen -W '${evmscontainers}'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --fs)
-            COMPREPLY=( $( compgen -W 'ext2 ext3 ext4 xfs reiserfs btrfs'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --genpass)
-            COMPREPLY=( $( compgen -W '0 1'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --hash_method)
-            COMPREPLY=( $( compgen -W 'md5 sha256 sha512'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --hooks)
-            COMPREPLY=( $( compgen -W '0 1'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --install)
-            COMPREPLY=( $( compgen -W '0 1'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --image)
-            COMPREPLY=( $( compgen -W 'sparse full'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --image-dev)
-            _filedir
-            return 0
-            ;;
-        --initrd)
-            _filedir
-            return 0
-            ;;
-        --initrd)
-            COMPREPLY=( $( compgen -W '0 1'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --install-method)
-            COMPREPLY=( $( compgen -W 'copy debootstrap rinse rpmstrap tar'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --install-source)
-            _filedir
-            return 0
-            ;;
-        --ip)
-            ip=`echo ${ip} | sed -e 's/[.][^.]*$/./'`
-            COMPREPLY=( $(compgen -W "${ip}" -- ${cur}) )
-            return 0
-            ;;
-        --kernel)
-            _filedir
-            return 0
-            ;;
-        --lvm)
-            COMPREPLY=( $( compgen -W '${vgs}'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --modules)
-            _filedir -d
-            return 0
-            ;;
-        --output)
-            _filedir -d
-            return 0
-            ;;
-        --partitions)
-            partitions=$(for x in `/bin/ls -1 /etc/xen-tools/partitions.d/ 2>/dev/null | grep -v \/ 2>/dev/null`; do echo ${x} ; done )
-            COMPREPLY=( $( compgen -W '${partitions}'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --role)
-            roles=$(ls -1 /etc/xen-tools/role.d/ | xargs echo )
-            COMPREPLY=( $( compgen -W '${roles}'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --roledir)
-            _filedir -d
-            return 0
-            ;;
-        --swap-dev)
-            _filedir
-            return 0
-            ;;
-        --template)
-            _filedir
-            return 0
-            ;;
-    esac
-
-    if [[ ${cur} == -* ]] || [[ ${prev} == xen-create-image ]]; then
-        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
-        return 0
-    fi
-}
-complete -F _xen_create_image xen-create-image
-
-
-
-
-#
-#  Completion for xen-create-nfs
-#
-_xen_create_nfs()
-{
-    local cur prev ip roles dists vgs
-
-    COMPREPLY=()
-    cur=${COMP_WORDS[COMP_CWORD]}
-    prev=${COMP_WORDS[COMP_CWORD-1]}
-
-    # Determine arguments dynamically.  Avoids out-of-dateness.
-    opts=$(xen-create-nfs --help|grep -- --|awk '{print $1}' |grep -- -- | sort -u)
-
-
-    case "$prev" in
-        --template)
-            _filedir
-            return 0
-            ;;
-    esac
-
-    if [[ ${cur} == -* ]]; then
-        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
-        return 0
-    fi
-}
-complete -F _xen_create_nfs xen-create-nfs
-
-
-
-#
-#  Completion for xen-delete-image
-#
-_xen_delete_image()
-{
-    local cur prev opts vgs names
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    prev="${COMP_WORDS[COMP_CWORD-1]}"
-
-    #
-    # Volume Group completion
-    #
-    vgs=`vgdisplay 2>/dev/null | grep Name 2>/dev/null | awk '{print $3}'`
-
-    #
-    # EVMS container completion
-    #
-    evmscontainers=`evms_query containers 2>/dev/null`
-
-    #
-    # Complete the options + all available hostnames.
-    # Determine arguments dynamically.  Avoids out-of-dateness.
-    #
-    opts=$(xen-delete-image  --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
-    opts="${opts} ${names}"
-
-    case "${prev}" in
-        --dir)
-            _filedir -d
-            return 0
-            ;;
-        --evms)
-            COMPREPLY=( $( compgen -W '${evmscontainers}'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --hostname)
-            names=`_find_xen_images`
-            COMPREPLY=( $(compgen -W "${names}" -- ${cur}) )
-            return 0
-            ;;
-        --lvm)
-            COMPREPLY=( $( compgen -W '${vgs}'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-    esac
-
-    if [[ ${cur} == -* ]]; then
-        # Completing command line arguments.
-        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
-    else
-        # Completing image names
-        names=`_find_xen_images`
-        COMPREPLY=( $(compgen -W "${names}" -- ${cur}) )
-    fi
-
-    return 0
-}
-complete -F _xen_delete_image xen-delete-image
-
-
-
-#
-#  Completion for xen-update-image
-#
-_xen_update_image()
-{
-    local cur prev opts base names vgs
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    prev="${COMP_WORDS[COMP_CWORD-1]}"
-
-    #
-    # Volume group completion
-    #
-    vgs=`vgdisplay 2>/dev/null | grep Name 2>/dev/null | awk '{print $3}'`
-
-    #
-    # EVMS container completion
-    #
-    evmscontainers=`evms_query containers 2>/dev/null`
-
-    # Determine arguments dynamically.  Avoids out-of-dateness.
-    opts=$(xen-update-image  --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
-
-    case "${prev}" in
-        --dir)
-            _filedir -d
-            return 0
-            ;;
-        --evms)
-            COMPREPLY=( $( compgen -W '${evmscontainers}'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --lvm)
-            COMPREPLY=( $( compgen -W '${vgs}'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-    esac
-
-    if [[ ${cur} == -* ]]; then
-        # Completing command line arguments.
-        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
-    else
-        # Completing image names
-        names=`_find_xen_images`
-        COMPREPLY=( $(compgen -W "${names}" -- ${cur}) )
-    fi
-    return 0
-}
-complete -F _xen_update_image xen-update-image
-
-
-
-#
-#  Completion for xen-list-images
-#
-_xen_list_images()
-{
-    local cur prev opts vgs
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    prev="${COMP_WORDS[COMP_CWORD-1]}"
-
-    # Determine arguments dynamically.  Avoids out-of-dateness.
-    opts=$(xen-list-image  --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
-
-    if [[ ${cur} == -* ]]; then
-        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
-        return 0
-    fi
-}
-complete -F _xen_list_images xen-list-images
-
-
-
-#
-#  Completion for xt-create-xen-config
-#
-_xt-create-xen-config()
-{
-    local cur prev
-
-    COMPREPLY=()
-    cur=${COMP_WORDS[COMP_CWORD]}
-    prev=${COMP_WORDS[COMP_CWORD-1]}
-
-    # Determine arguments dynamically.  Avoids out-of-dateness.
-    opts=$(xt-create-xen-config  --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
-
-
-    case "$prev" in
-        --output)
-            _filedir -d
-            return 0
-            ;;
-        --template)
-            COMPREPLY=( $( compgen -f -- ${cur#*:} ) )
-            return 0
-            ;;
-    esac
-
-    if [[ ${cur} == -* ]]; then
-        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
-        return 0
-    fi
-}
-complete -F _xt-create-xen-config xt-create-xen-config
-
-
-
-#
-#  Completion for xt-customize-image
-#
-_xt-customize-image()
-{
-    local cur prev dists
-
-    COMPREPLY=()
-    cur=${COMP_WORDS[COMP_CWORD]}
-    prev=${COMP_WORDS[COMP_CWORD-1]}
-
-    # Determine arguments dynamically.  Avoids out-of-dateness.
-    opts=$(xt-customize-image  --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
-
-    #
-    # Available distributions, from rpmstrap
-    #
-    if [ -d /usr/lib/rpmstrap/scripts ]; then
-       dists=`/bin/ls -1 /usr/lib/rpmstrap/scripts`
-    fi
-
-    case "$prev" in
-        --dist)
-            COMPREPLY=( $( compgen -W '${dists} sid sarge etch lenny'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --location)
-            _filedir -d
-            return 0
-            ;;
-    esac
-
-    if [[ ${cur} == -* ]]; then
-        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
-        return 0
-    fi
-}
-complete -F _xt-customize-image xt-customize-image
-
-
-#
-#  Completion for xt-install-image
-#
-#
-_xt-install-image()
-{
-    local cur prev dists
-
-    COMPREPLY=()
-    cur=${COMP_WORDS[COMP_CWORD]}
-    prev=${COMP_WORDS[COMP_CWORD-1]}
-
-    # Determine arguments dynamically.  Avoids out-of-dateness.
-    opts=$(xt-install-image  --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
-
-
-    #
-    # Available distributions, from rpmstrap
-    #
-    if [ -d /usr/lib/rpmstrap/scripts ]; then
-       dists=`/bin/ls -1 /usr/lib/rpmstrap/scripts`
-    fi
-
-
-    case "$prev" in
-        --cache)
-            COMPREPLY=( $( compgen -W 'yes no'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --config)
-            _filedir
-            return 0
-            ;;
-        --dist)
-            COMPREPLY=( $( compgen -W '${dists} sid sarge etch lenny'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --install-method)
-            COMPREPLY=( $( compgen -W 'copy debootstrap rinse rpmstrap tar'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
-            return 0
-            ;;
-        --location)
-            _filedir -d
-            return 0
-            ;;
-    esac
-
-    if [[ ${cur} == -* ]]; then
-        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
-        return 0
-    fi
-}
-complete -F _xt-install-image xt-install-image
-
-
diff --git a/misc/xen-tools.bash-completion b/misc/xen-tools.bash-completion
new file mode 100644 (file)
index 0000000..1a9c069
--- /dev/null
@@ -0,0 +1,508 @@
+# -*- shell-script -*-
+#
+#  /etc/bash_completion.d/xen-tools
+#
+# Completion functions for Bash.
+#
+# This file offers basic support for all the command line options, along with
+# some specialist support to complete filesystem types, distribution targets,
+# virtual images, etc.
+#
+#  References on command line completion:
+#
+#    http://www.debian-administration.org/articles/316
+#    http://www.debian-administration.org/articles/317
+#    http://dev.gentoo.org/~plasmaroo/devmanual/tasks-reference/completion/
+#
+# Steve
+# --
+# http://www.steve.org.uk
+#
+#
+
+
+#
+#  Utility function to find the names of each existing Xen image,
+# we do this by parsing the files matching /etc/xen/*.cfg
+#
+function _find_xen_images
+{
+    local names name
+
+    for i in /etc/xen/*.cfg ; do
+        name=`grep ^name $i 2>/dev/null | awk -F\'  '{print $2}'`
+        if [ ! -z "${name}" ] ; then
+            names="${names} ${name}"
+        fi
+    done
+
+    echo "${names}"
+}
+
+#
+#  Completion for xen-create-image
+#
+#  Completes the command line flags, and will allow tab completion of
+# the supported filesystems
+#
+_xen_create_image()
+{
+    local cur prev ip roles partitions dists vgs
+
+    COMPREPLY=()
+    cur=${COMP_WORDS[COMP_CWORD]}
+    prev=${COMP_WORDS[COMP_CWORD-1]}
+
+    # Determine arguments dynamically.  Avoids out-of-dateness.
+    opts=$(xen-create-image --help|grep -- --|awk '{print $1}' |grep -- -- | sort -u)
+
+
+    #
+    # Complete the initial part of the IP in the configuration file.
+    ip=`grep ^gateway /etc/xen-tools/xen-tools.conf 2>/dev/null | awk -F'= '  '{print $2}'`
+
+    #
+    # Available distributions, by which we mean distributions which
+    # we have hook scripts available.
+    #
+    for i in `/bin/ls -1 /usr/lib/xen-tools/ ` ; do
+        if [ -d /usr/lib/xen-tools/${i} ]; then
+            dists="${dists} ${i/.d/}"
+        fi
+    done
+
+    #
+    # Volume group completion
+    #
+    vgs=`vgdisplay 2>/dev/null | grep Name 2>/dev/null | awk '{print $3}'`
+
+    #
+    # EVMS container completion
+    #
+    evmscontainers=`evms_query containers 2>/dev/null`
+
+    case "$prev" in
+        --cache)
+            COMPREPLY=( $( compgen -W 'yes no'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --cachedir)
+            _filedir -d
+            return 0
+            ;;
+        --config)
+            _filedir .conf
+            return 0
+            ;;
+        --debootstrap-cmd)
+            _filedir
+            return 0
+            ;;
+        --dir)
+            _filedir -d
+            return 0
+            ;;
+        --dist)
+            COMPREPLY=( $( compgen -W '${dists}'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --evms)
+            COMPREPLY=( $( compgen -W '${evmscontainers}'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --fs)
+            COMPREPLY=( $( compgen -W 'ext2 ext3 ext4 xfs reiserfs btrfs'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --genpass)
+            COMPREPLY=( $( compgen -W '0 1'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --hash_method)
+            COMPREPLY=( $( compgen -W 'md5 sha256 sha512'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --hooks)
+            COMPREPLY=( $( compgen -W '0 1'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --install)
+            COMPREPLY=( $( compgen -W '0 1'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --image)
+            COMPREPLY=( $( compgen -W 'sparse full'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --image-dev)
+            _filedir
+            return 0
+            ;;
+        --initrd)
+            _filedir
+            return 0
+            ;;
+        --initrd)
+            COMPREPLY=( $( compgen -W '0 1'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --install-method)
+            COMPREPLY=( $( compgen -W 'copy debootstrap rinse rpmstrap tar'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --install-source)
+            _filedir
+            return 0
+            ;;
+        --ip)
+            ip=`echo ${ip} | sed -e 's/[.][^.]*$/./'`
+            COMPREPLY=( $(compgen -W "${ip}" -- ${cur}) )
+            return 0
+            ;;
+        --kernel)
+            _filedir
+            return 0
+            ;;
+        --lvm)
+            COMPREPLY=( $( compgen -W '${vgs}'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --modules)
+            _filedir -d
+            return 0
+            ;;
+        --output)
+            _filedir -d
+            return 0
+            ;;
+        --partitions)
+            partitions=$(for x in `/bin/ls -1 /etc/xen-tools/partitions.d/ 2>/dev/null | grep -v \/ 2>/dev/null`; do echo ${x} ; done )
+            COMPREPLY=( $( compgen -W '${partitions}'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --role)
+            roles=$(ls -1 /etc/xen-tools/role.d/ | xargs echo )
+            COMPREPLY=( $( compgen -W '${roles}'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --roledir)
+            _filedir -d
+            return 0
+            ;;
+        --swap-dev)
+            _filedir
+            return 0
+            ;;
+        --template)
+            _filedir
+            return 0
+            ;;
+    esac
+
+    if [[ ${cur} == -* ]] || [[ ${prev} == xen-create-image ]]; then
+        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+        return 0
+    fi
+}
+complete -F _xen_create_image xen-create-image
+
+
+
+
+#
+#  Completion for xen-create-nfs
+#
+_xen_create_nfs()
+{
+    local cur prev ip roles dists vgs
+
+    COMPREPLY=()
+    cur=${COMP_WORDS[COMP_CWORD]}
+    prev=${COMP_WORDS[COMP_CWORD-1]}
+
+    # Determine arguments dynamically.  Avoids out-of-dateness.
+    opts=$(xen-create-nfs --help|grep -- --|awk '{print $1}' |grep -- -- | sort -u)
+
+
+    case "$prev" in
+        --template)
+            _filedir
+            return 0
+            ;;
+    esac
+
+    if [[ ${cur} == -* ]]; then
+        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+        return 0
+    fi
+}
+complete -F _xen_create_nfs xen-create-nfs
+
+
+
+#
+#  Completion for xen-delete-image
+#
+_xen_delete_image()
+{
+    local cur prev opts vgs names
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    #
+    # Volume Group completion
+    #
+    vgs=`vgdisplay 2>/dev/null | grep Name 2>/dev/null | awk '{print $3}'`
+
+    #
+    # EVMS container completion
+    #
+    evmscontainers=`evms_query containers 2>/dev/null`
+
+    #
+    # Complete the options + all available hostnames.
+    # Determine arguments dynamically.  Avoids out-of-dateness.
+    #
+    opts=$(xen-delete-image  --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
+    opts="${opts} ${names}"
+
+    case "${prev}" in
+        --dir)
+            _filedir -d
+            return 0
+            ;;
+        --evms)
+            COMPREPLY=( $( compgen -W '${evmscontainers}'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --hostname)
+            names=`_find_xen_images`
+            COMPREPLY=( $(compgen -W "${names}" -- ${cur}) )
+            return 0
+            ;;
+        --lvm)
+            COMPREPLY=( $( compgen -W '${vgs}'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+    esac
+
+    if [[ ${cur} == -* ]]; then
+        # Completing command line arguments.
+        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+    else
+        # Completing image names
+        names=`_find_xen_images`
+        COMPREPLY=( $(compgen -W "${names}" -- ${cur}) )
+    fi
+
+    return 0
+}
+complete -F _xen_delete_image xen-delete-image
+
+
+
+#
+#  Completion for xen-update-image
+#
+_xen_update_image()
+{
+    local cur prev opts base names vgs
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    #
+    # Volume group completion
+    #
+    vgs=`vgdisplay 2>/dev/null | grep Name 2>/dev/null | awk '{print $3}'`
+
+    #
+    # EVMS container completion
+    #
+    evmscontainers=`evms_query containers 2>/dev/null`
+
+    # Determine arguments dynamically.  Avoids out-of-dateness.
+    opts=$(xen-update-image  --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
+
+    case "${prev}" in
+        --dir)
+            _filedir -d
+            return 0
+            ;;
+        --evms)
+            COMPREPLY=( $( compgen -W '${evmscontainers}'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --lvm)
+            COMPREPLY=( $( compgen -W '${vgs}'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+    esac
+
+    if [[ ${cur} == -* ]]; then
+        # Completing command line arguments.
+        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+    else
+        # Completing image names
+        names=`_find_xen_images`
+        COMPREPLY=( $(compgen -W "${names}" -- ${cur}) )
+    fi
+    return 0
+}
+complete -F _xen_update_image xen-update-image
+
+
+
+#
+#  Completion for xen-list-images
+#
+_xen_list_images()
+{
+    local cur prev opts vgs
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    # Determine arguments dynamically.  Avoids out-of-dateness.
+    opts=$(xen-list-image  --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
+
+    if [[ ${cur} == -* ]]; then
+        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+        return 0
+    fi
+}
+complete -F _xen_list_images xen-list-images
+
+
+
+#
+#  Completion for xt-create-xen-config
+#
+_xt-create-xen-config()
+{
+    local cur prev
+
+    COMPREPLY=()
+    cur=${COMP_WORDS[COMP_CWORD]}
+    prev=${COMP_WORDS[COMP_CWORD-1]}
+
+    # Determine arguments dynamically.  Avoids out-of-dateness.
+    opts=$(xt-create-xen-config  --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
+
+
+    case "$prev" in
+        --output)
+            _filedir -d
+            return 0
+            ;;
+        --template)
+            COMPREPLY=( $( compgen -f -- ${cur#*:} ) )
+            return 0
+            ;;
+    esac
+
+    if [[ ${cur} == -* ]]; then
+        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+        return 0
+    fi
+}
+complete -F _xt-create-xen-config xt-create-xen-config
+
+
+
+#
+#  Completion for xt-customize-image
+#
+_xt-customize-image()
+{
+    local cur prev dists
+
+    COMPREPLY=()
+    cur=${COMP_WORDS[COMP_CWORD]}
+    prev=${COMP_WORDS[COMP_CWORD-1]}
+
+    # Determine arguments dynamically.  Avoids out-of-dateness.
+    opts=$(xt-customize-image  --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
+
+    #
+    # Available distributions, from rpmstrap
+    #
+    if [ -d /usr/lib/rpmstrap/scripts ]; then
+       dists=`/bin/ls -1 /usr/lib/rpmstrap/scripts`
+    fi
+
+    case "$prev" in
+        --dist)
+            COMPREPLY=( $( compgen -W '${dists} sid sarge etch lenny'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --location)
+            _filedir -d
+            return 0
+            ;;
+    esac
+
+    if [[ ${cur} == -* ]]; then
+        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+        return 0
+    fi
+}
+complete -F _xt-customize-image xt-customize-image
+
+
+#
+#  Completion for xt-install-image
+#
+#
+_xt-install-image()
+{
+    local cur prev dists
+
+    COMPREPLY=()
+    cur=${COMP_WORDS[COMP_CWORD]}
+    prev=${COMP_WORDS[COMP_CWORD-1]}
+
+    # Determine arguments dynamically.  Avoids out-of-dateness.
+    opts=$(xt-install-image  --help|grep -- --|awk '{print $1}'|grep -- -- | sort -u)
+
+
+    #
+    # Available distributions, from rpmstrap
+    #
+    if [ -d /usr/lib/rpmstrap/scripts ]; then
+       dists=`/bin/ls -1 /usr/lib/rpmstrap/scripts`
+    fi
+
+
+    case "$prev" in
+        --cache)
+            COMPREPLY=( $( compgen -W 'yes no'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --config)
+            _filedir
+            return 0
+            ;;
+        --dist)
+            COMPREPLY=( $( compgen -W '${dists} sid sarge etch lenny'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --install-method)
+            COMPREPLY=( $( compgen -W 'copy debootstrap rinse rpmstrap tar'  -- "${COMP_WORDS[COMP_CWORD]}" ) )
+            return 0
+            ;;
+        --location)
+            _filedir -d
+            return 0
+            ;;
+    esac
+
+    if [[ ${cur} == -* ]]; then
+        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+        return 0
+    fi
+}
+complete -F _xt-install-image xt-install-image
+
+