(STOPPED) ! $_VSERVER "$_ga_i" running &>/dev/null || _ga_doadd=;;
(RUNNING) $_VSERVER "$_ga_i" running &>/dev/null || _ga_doadd=;;
(ALL) ;;
+ (MARK) test -s "$_ga_markfile" && grep -qx "$3" "$_ga_markfile" || _ga_doadd=;;
(*) panic $"Unknown vserver tagging '$2'";;
esac
function getAllVserversByArg
{
local _gav_mark=
-
- case $2 in
- (--all) _gav_mark=ALL;;
- (--marked) _gav_mark=MARKED;;
- (--unmarked) _gav_mark=UNMARKED;;
- (--stopped) _gav_mark=STOPPED;;
- (--running) _gav_mark=RUNNING;;
- (*) return 1;;
- esac
+ local _gav_v="$1"
+ local _gav_first=1
+ local _gav_res=()
+ shift
+
+ while test "$#" -ge 1; do
+ local _gav_extra=
+ local _gav_tmp=()
+
+ case "$1" in
+ (--all) _gav_mark=ALL;;
+ (--marked) _gav_mark=MARKED;;
+ (--unmarked) _gav_mark=UNMARKED;;
+ (--stopped) _gav_mark=STOPPED;;
+ (--running) _gav_mark=RUNNING;;
+ (--mark*) _gav_mark=MARK
+ _gav_extra=${_gav_i##*=}
+ test -n "$_gav_extra" -a "$_gav_extra" != "--mark" || \
+ _gav_extra="$2"
+ shift
+ ;;
+ (--) break;;
+ (*) return 1;;
+ esac
- getAllVservers "$1" "$_gav_mark"
+ getAllVservers _gav_tmp "$_gav_mark" $_gav_extra
+ if test -n "$_gav_first"; then
+ _gav_res=( "${_gav_tmp[@]}" )
+ else
+ local _gav_i=0
+ while test $_gav_i -lt "${#_gav_res[@]}"; do
+ local _gav_found=0
+ for _gav_j in "${_gav_tmp[@]}"; do
+ if test "$_gav_j" = "${_gav_res[$_gav_i]}"; then
+ _gav_found=1
+ break
+ fi
+ done
+ if test "$_gav_found" = 0; then
+ unset _gav_res[$_gav_i]
+ fi
+ let ++_gav_i
+ done
+ _gav_res=( "${_gav_res[@]}" )
+ fi
+ shift
+ _gav_first=
+ done
+ eval $_gav_v='( "${_gav_res[@]}" )'
}
## Usage: _getProcNumberCount <ctx> <var>
function showHelp()
{
echo \
-$"Usage: $0 [--quiet|-q] [--debug] <cmd> [--] <vserver-name>* [--all] -- <params>+
+$"Usage: $0 [--quiet|-q] [--debug] <cmd> [--] <vserver-name>* [<filter>] -- <params>+
+where <filter> is any combination of:
+--all All guests
+--running All running guests
+--stopped All stopped guests
+--marked All guests with a mark set
+--unmarked All guests without a mark set
+--mark <m> All guests with mark <m> set
Execute <cmd> <vserver> <params>* foreach vserver.
title=${VSOMETHING_TITLE:-$cmd}
shift
-while test "$#" -ge 1; do
- if getAllVserversByArg tmp "$1"; then
- vservers=( "${vservers[@]}" "${tmp[@]}" )
- else
+test "$1" != "--" || \
+ shift
+
+if getAllVserversByArg tmp "$@"; then
+ vservers=( "${vservers[@]}" "${tmp[@]}" )
+ while test "$1" != "--"; do
+ shift
+ done
+ shift
+else
+ while test "$#" -ge 1; do
case "$1" in
(--) shift; break;;
(*) vservers=( "${vservers[@]}" "$1" )
esac
- fi
- shift
-done
+ shift
+ done
+fi
test "${#vservers[@]}" -ne 1 || is_quiet=1