Bastian Blank
2012-Apr-22 19:21 UTC
[Pkg-xen-changes] r985 - in trunk/xen/debian: . scripts
Author: waldi Date: Sun Apr 22 19:21:25 2012 New Revision: 985 Log: * debian/scripts/Makefile: Add script. * debian/scripts/xen-init-list: Add helper script. * debian/xen-utils-common.xendomains.init - Use helper script for domain list. - Use toolstack wrapper. Added: trunk/xen/debian/scripts/xen-init-list (contents, props changed) Modified: trunk/xen/debian/scripts/Makefile trunk/xen/debian/xen-utils-common.xendomains.init Modified: trunk/xen/debian/scripts/Makefile =============================================================================--- trunk/xen/debian/scripts/Makefile Sun Apr 22 18:36:01 2012 (r984) +++ trunk/xen/debian/scripts/Makefile Sun Apr 22 19:21:25 2012 (r985) @@ -25,6 +25,7 @@ PRIVATE_SCRIPTS = \ xen-dir \ + xen-init-list \ xen-toolstack \ xen-version \ $(GLOBAL_TOOLSTACK_WRAPPER) \ Added: trunk/xen/debian/scripts/xen-init-list =============================================================================--- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/xen/debian/scripts/xen-init-list Sun Apr 22 19:21:25 2012 (r985) @@ -0,0 +1,46 @@ +#!/usr/bin/python + +import re +import subprocess + + +class SXPParser(object): + tokenizer_rules = r""" (?P<open> \( ) | (?P<close> \) ) | (?P<whitespace> \s+ ) | [^()^\s]+ """ + tokenizer_re = re.compile(tokenizer_rules, re.X) + + def __init__(self): + self.stack = [] + self.data = [] + + def __call__(self, input): + for match in self.tokenizer_re.finditer(input): + if match.group(''open''): + self.stack.append([]) + elif match.group(''close''): + top = self.stack.pop() + if self.stack: + self.stack[-1].append(top) + else: + self.data.append(top) + elif match.group(''whitespace''): + pass + else: + if self.stack: + self.stack[-1].append(match.group()) + return self.data + + +if __name__ == ''__main__'': + p = subprocess.check_output((''xen'', ''list'', ''-l'')) + s = SXPParser()(p) + for i in s: + if i and i[0] == ''domain'': + try: + data = dict(i[1:]) + domid = int(data[''domid'']) + name = data[''name''] + if domid == 0: + continue + print domid, name + except (KeyError, ValueError) as e: + pass Modified: trunk/xen/debian/xen-utils-common.xendomains.init =============================================================================--- trunk/xen/debian/xen-utils-common.xendomains.init Sun Apr 22 18:36:01 2012 (r984) +++ trunk/xen/debian/xen-utils-common.xendomains.init Sun Apr 22 19:21:25 2012 (r985) @@ -10,14 +10,7 @@ # boots / shuts down. ### END INIT INFO -CMD=xm -$CMD list &> /dev/null -if test $? -ne 0 -then - CMD=xl -fi - -$CMD list &> /dev/null +xen list &> /dev/null if test $? -ne 0 then exit 0; @@ -164,7 +157,7 @@ # read name from xen config file rdname() { - NM=$($CMD create --quiet --dryrun --defconfig "$1" | + NM=$(xen create --quiet --dryrun --defconfig "$1" | sed -n ''s/^.*(name \(.*\))$/\1/p'') } @@ -185,38 +178,17 @@ done } -LIST_GREP=''((domain\|(domid\|(name\|^{$\|"name":\|"domid":'' -parseln() -{ - if [[ "$1" =~ ''(domain'' ]] || [[ "$1" = "{" ]]; then - name=;id- elif [[ "$1" =~ ''(name'' ]]; then - name=$(echo $1 | sed -e ''s/^.*(name \(.*\))$/\1/'') - elif [[ "$1" =~ ''(domid'' ]]; then - id=$(echo $1 | sed -e ''s/^.*(domid \(.*\))$/\1/'') - elif [[ "$1" =~ ''"name":'' ]]; then - name=$(echo $1 | sed -e ''s/^.*"name": "\(.*\)",$/\1/'') - elif [[ "$1" =~ ''"domid":'' ]]; then - id=$(echo $1 | sed -e ''s/^.*"domid": \(.*\),$/\1/'') - fi - - [ -n "$name" -a -n "$id" ] && return 0 || return 1 -} - is_running() { rdname $1 RC=1 - name=;id- while read LN; do - parseln "$LN" || continue - if test $id = 0; then continue; fi + while read id name rest; do case $name in ($NM) RC=0 ;; esac - done < <($CMD list -l | grep $LIST_GREP) + done < <(/usr/lib/xen-common/bin/xen-init-list) return $RC } @@ -240,7 +212,7 @@ HEADER=`head -c 16 $dom | head -n 1 2> /dev/null` if [ $HEADER = "LinuxGuestRecord" ]; then echo -n " ${dom##*/}" - XMR=`$CMD restore $dom 2>&1 1>/dev/null` + XMR=`xen restore $dom 2>&1 1>/dev/null` #$CMD restore $dom if [ $? -ne 0 ]; then echo -e "\nAn error occurred while restoring domain ${dom##*/}:\n$XMR" @@ -276,7 +248,7 @@ if [ $? -eq 0 ] || is_running $dom; then echo -n "(skip)" else - XMC=`$CMD create --quiet --defconfig $dom` + XMC=`xen create --quiet --defconfig $dom` if [ $? -ne 0 ]; then echo -e "\nAn error occurred while creating domain ${dom##*/}: $XMC\n" rc_failed $? @@ -291,14 +263,11 @@ all_zombies() { - name=;id- while read LN; do - parseln "$LN" || continue - if test $id = 0; then continue; fi + while read id name rest; do if test "$state" != "-b---d" -a "$state" != "-----d"; then return 1; fi - done < <($CMD list -l | grep $LIST_GREP) + done < <(/usr/lib/xen-common/bin/xen-init-list) return 0 } @@ -317,7 +286,7 @@ usleep 20000 for no in `seq 0 $XENDOMAINS_STOP_MAXWAIT`; do # exit if $CMD save/migrate/shutdown is finished - PSAX=`ps axlw | grep "$CMD $1" | grep -v grep` + PSAX=`ps axlw | grep "xen $1" | grep -v grep` if test -z "$PSAX"; then exit; fi if ! test -n "$3"; then echo -n ''.''; fi sleep 1 @@ -341,10 +310,7 @@ rdnames fi echo -n "Shutting down Xen domains:" - name=;id- while read LN; do - parseln "$LN" || continue - if test $id = 0; then continue; fi + while read id name rest; do echo -n " $name" if test "$XENDOMAINS_AUTO_ONLY" = "true"; then eval " @@ -365,7 +331,7 @@ if test -n "$XENDOMAINS_SYSRQ"; then for sysrq in $XENDOMAINS_SYSRQ; do echo -n "(SR-$sysrq)" - XMR=`$CMD sysrq $id $sysrq 2>&1 1>/dev/null` + XMR=`xen sysrq $id $sysrq 2>&1 1>/dev/null` if test $? -ne 0; then echo -e "\nAn error occurred while doing sysrq on domain:\n$XMR\n" rc_failed $? @@ -383,7 +349,7 @@ echo -n "(migr)" watchdog_xencmd migrate & WDOG_PID=$! - XMR=`$CMD migrate $id $XENDOMAINS_MIGRATE 2>&1 1>/dev/null` + XMR=`xen migrate $id $XENDOMAINS_MIGRATE 2>&1 1>/dev/null` if test $? -ne 0; then echo -e "\nAn error occurred while migrating domain:\n$XMR\n" rc_failed $? @@ -403,7 +369,7 @@ watchdog_xencmd save & WDOG_PID=$! mkdir -p "$XENDOMAINS_SAVE" - XMR=`$CMD save $id $XENDOMAINS_SAVE/$name 2>&1 1>/dev/null` + XMR=`xen save $id $XENDOMAINS_SAVE/$name 2>&1 1>/dev/null` if test $? -ne 0; then echo -e "\nAn error occurred while saving domain:\n$XMR\n" rc_failed $? @@ -421,7 +387,7 @@ echo -n "(shut)" watchdog_xencmd shutdown & WDOG_PID=$! - XMR=`$CMD shutdown $id $XENDOMAINS_SHUTDOWN 2>&1 1>/dev/null` + XMR=`xen shutdown $id $XENDOMAINS_SHUTDOWN 2>&1 1>/dev/null` if test $? -ne 0; then echo -e "\nAn error occurred while shutting down domain:\n$XMR\n" rc_failed $? @@ -429,7 +395,7 @@ fi kill $WDOG_PID >/dev/null 2>&1 fi - done < <($CMD list -l | grep $LIST_GREP) + done < <(/usr/lib/xen-common/bin/xen-init-list) # NB. this shuts down ALL Xen domains (politely), not just the ones in # AUTODIR/* @@ -440,7 +406,7 @@ echo -n " SHUTDOWN_ALL " watchdog_xencmd shutdown 1 false & WDOG_PID=$! - XMR=`$CMD shutdown $XENDOMAINS_SHUTDOWN_ALL 2>&1 1>/dev/null` + XMR=`xen shutdown $XENDOMAINS_SHUTDOWN_ALL 2>&1 1>/dev/null` if test $? -ne 0; then echo -e "\nAn error occurred while shutting down all domains: $XMR\n" rc_failed $? @@ -458,15 +424,13 @@ check_domain_up() { name=;id- while read LN; do - parseln "$LN" || continue - if test $id = 0; then continue; fi + while read id name rest; do case $name in ($1) return 0 ;; esac - done < <($CMD list -l | grep $LIST_GREP) + done < <(/usr/lib/xen-common/bin/xen-init-list) return 1 }