453 lines
10 KiB
Bash
453 lines
10 KiB
Bash
# -*- 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
|
|
;;
|
|
--config)
|
|
_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 'xfs ext3 reiserfs' -- "${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
|
|
;;
|
|
--install-method)
|
|
COMPREPLY=( $( compgen -W 'copy debootstrap rinse rpmstrap tar' -- "${COMP_WORDS[COMP_CWORD]}" ) )
|
|
return 0
|
|
;;
|
|
--ip)
|
|
ip=`echo ${ip} | sed -e 's/[.][^.]*$/./'`
|
|
COMPREPLY=( $(compgen -W "${ip}" -- ${cur}) )
|
|
return 0
|
|
;;
|
|
--lvm)
|
|
COMPREPLY=( $( compgen -W '${vgs}' -- "${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
|
|
;;
|
|
--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
|
|
;;
|
|
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
|
|
|
|
|