From: Daniel Hokka Zakrisson Date: Sat, 6 Nov 2010 21:32:25 +0000 (+0000) Subject: New vsomething features. X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cd841ad88a1deb62271fff26455c4c2bbd23c6e0;p=util-vserver.git New vsomething features. git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@2923 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- diff --git a/scripts/functions b/scripts/functions index c1be17f..32863d8 100644 --- a/scripts/functions +++ b/scripts/functions @@ -543,6 +543,7 @@ function getAllVservers (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 @@ -556,17 +557,55 @@ function getAllVservers 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 diff --git a/scripts/vsomething b/scripts/vsomething index 40185e5..c65c3ee 100755 --- a/scripts/vsomething +++ b/scripts/vsomething @@ -29,7 +29,14 @@ test -e "$UTIL_VSERVER_VARS" || { function showHelp() { echo \ -$"Usage: $0 [--quiet|-q] [--debug] [--] * [--all] -- + +$"Usage: $0 [--quiet|-q] [--debug] [--] * [] -- + +where 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 All guests with mark set Execute * foreach vserver. @@ -75,17 +82,24 @@ cmd=$1 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