callInNamespace(): call 'shift' to remove the vserver-name from $@
[util-vserver.git] / util-vserver / scripts / functions
index 4ff4e41..a2ad7f3 100644 (file)
@@ -242,9 +242,13 @@ function pkgInit
 
 function isAvoidNamespace
 {
-    test ! -e "$1"/namespace || return 1
+    local cfgdir
+
+    $_VSERVER_INFO - FEATURE namespace   || return 0
+    cfgdir=$($_VSERVER_INFO "$1" CFGDIR) || return 0
+    test ! -e "$cfgdir"/namespace        || return 1
     test -e "$CONFDIR"/.defaults/nonamespace -o \
-         -e "$1"/nonamespace
+         -e "$cfgdir"/nonamespace
 }
 
 function getAllVservers
@@ -279,10 +283,10 @@ function getVserverStatus
     local _tmp=$($_VPS ax | $_AWK '{print $2}' | $_GREP -x "$_ctx" | $_WC -l )
     eval "$3"=\$_tmp
 
-    test "$4" -a $_tmp = 0 || return 0
+    test "$4" -o $_tmp != 0 || return 1
     _tmp=$($_READLINK "$1/run")
-    test "$_tmp"           || return 1
-    rm -f "$_tmp"
+    test "$_tmp" || return 1
+    test -z "$4" || rm -f "$_tmp"
     return 0
 }
 
@@ -355,3 +359,19 @@ function isKernelAPI
     local api=$($_VSERVER_INFO - APIVER) || api=0
     test $[ $api ] -${2:-ge} $[ $1 ]
 }
+
+## Usage: callInNamespace <vserver> <command> <args>*
+function callInNamespace
+{
+    local ctx=
+    
+    isAvoidNamespace "$1" || \
+    ctx=$( $_VSERVER_INFO "$1" CONTEXT t ) || ctx=
+
+    shift
+    if test "$ctx"; then
+       $_VNAMESPACE --enter "$ctx" -- "$@"
+    else
+       "$@"
+    fi
+}