vshost-util-vserver

Build script and sources for util-vserver.
git clone https://ccx.te2000.cz/git/vshost-util-vserver
Log | Files | Refs

vsomething (3821B)


      1 #! /bin/bash
      2 # $Id$
      3 
      4 # Copyright (C) 2005 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
      5 #  
      6 # This program is free software; you can redistribute it and/or modify
      7 # it under the terms of the GNU General Public License as published by
      8 # the Free Software Foundation; version 2 of the License.
      9 #  
     10 # This program is distributed in the hope that it will be useful,
     11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13 # GNU General Public License for more details.
     14 #  
     15 # You should have received a copy of the GNU General Public License
     16 # along with this program; if not, write to the Free Software
     17 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     18 
     19 : ${UTIL_VSERVER_VARS:=/usr/lib/util-vserver/util-vserver-vars}
     20 test -e "$UTIL_VSERVER_VARS" || {
     21     echo $"Can not find util-vserver installation (the file '$UTIL_VSERVER_VARS' would be expected); aborting..." >&2
     22     exit 1
     23 }
     24 . "$UTIL_VSERVER_VARS"
     25 . "$_LIB_FUNCTIONS"
     26 . "$_LIB_VSERVER_FUNCTIONS"
     27 
     28 
     29 function showHelp()
     30 {
     31     echo \
     32 $"Usage: $0 [--quiet|-q] [--debug] <cmd> [--] <vserver-name>* [<filter>] -- <params>+
     33 where <filter> is any combination of:
     34 --all        All guests
     35 --running    All running guests
     36 --stopped    All stopped guests
     37 --marked     All guests with a mark set
     38 --unmarked   All guests without a mark set
     39 --mark <m>   All guests with mark <m> set
     40 
     41 Execute <cmd> <vserver> <params>* foreach vserver.
     42 
     43 Report bugs to <$PACKAGE_BUGREPORT>."
     44     exit 0
     45 }
     46 
     47 function showVersion()
     48 {
     49     echo \
     50 $"vsomething $PACKAGE_VERSION -- execute something for a set of vservers
     51 This program is part of $PACKAGE_STRING
     52 
     53 Copyright (C) 2005 Enrico Scholz
     54 This program is free software; you may redistribute it under the terms of
     55 the GNU General Public License.  This program has absolutely no warranty."
     56     exit 0
     57 }
     58 
     59 
     60 is_quiet=
     61 declare -a vservers=()
     62 
     63 tmp=$(getopt -o +q --long help,version,debug,quiet -n "$0" -- "$@") || exit 1
     64 eval set -- "$tmp"
     65 
     66 while true; do
     67     case "$1" in
     68 	(--help)    	showHelp $0 ;;
     69 	(--version) 	showVersion ;;
     70 	(--debug)	set -x;;
     71 	(--quiet|-q)	is_quiet=1 ;;
     72 	(--)	   	shift; break;;
     73 	(*)	   	echo $"vserver: internal error; arg=='$1'" >&2; exit 1;;
     74     esac
     75     shift
     76 done
     77 
     78 test "$#" -ge 1 || \
     79     panic $"vsomething: no operation specified; try '--help' for more information"
     80 
     81 cmd=$1
     82 title=${VSOMETHING_TITLE:-$cmd}
     83 shift
     84 
     85 test "$1" != "--" || \
     86    shift
     87 
     88 if getAllVserversByArg tmp "$@"; then
     89     vservers=( "${vservers[@]}" "${tmp[@]}" )
     90     while test "$#" -ge 1 -a "$1" != "--"; do
     91         shift
     92     done
     93     shift
     94 else
     95     while test "$#" -ge 1; do
     96 	case "$1" in
     97 	    (--) shift; break;;
     98 	    (*)  vservers=( "${vservers[@]}" "$1" )
     99 	esac
    100 	shift
    101     done
    102 fi
    103 
    104 
    105 test "${#vservers[@]}" -ne 1 || is_quiet=1
    106 
    107 
    108 cnt=0
    109 res=255
    110 for i in "${vservers[@]}"; do
    111     cnt=$[ cnt + 1 ]
    112 
    113     test -n "$is_quiet" || {
    114 	colorize bold echo -n "$title: operating on vserver "
    115 	colorize bold colorize emph echo "$i"
    116 	xtermTitle "$title: operating on vserver '$i'  [$cnt/${#vservers[@]}]"
    117     }
    118 
    119     if test -n "$VSOMETHING_PKGMGMT"; then
    120 	if pkgmgmt.isInternal "$i"; then
    121 	    $_VSERVER "$i" exec "$cmd" "$@"
    122 	else
    123 	    _setVserverDir "$i"
    124 	    # subshell so we don't have to clean up
    125 	    ( _generateChbindOptions "$VSERVER_DIR"
    126 	      _generateSpaceOptions  "$VSERVER_DIR"
    127 	      $_VSERVER "$i" status &> /dev/null || \
    128 		CHBIND_CMD=()
    129 	      callInNamespace "$i" \
    130 		$_VNAMESPACE --new -- \
    131 		"${CHBIND_CMD[@]}" \
    132 		"$VSOMETHING_WORKER" "$i" "$@" )
    133 	fi
    134     else
    135 	"$cmd" "$i" "$@"
    136     fi
    137 	
    138     res=$?
    139 
    140     test $res -eq 0 -o -n "$is_quiet" || {
    141 	colorize error echo -n $"$title failed on vserver '$i' with errorcode $res"
    142 	echo
    143     }
    144 	
    145     test -n "$is_quiet" || echo
    146 done
    147 
    148 test "$cnt" -ge 0 || warning $"No vservers specified"
    149 exit $res