X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plc.d%2Ffunctions;h=3ca315b8757589363450e18c7308b1dba6537477;hb=21b4f7a59f68f5eb6acbc66f3a1fdc55675e405c;hp=29c5881ada636c8b1692c4a97b782e56d18bbeec;hpb=ddabda845fded2f97bc0e67fa839c36c4ef29d00;p=myplc.git diff --git a/plc.d/functions b/plc.d/functions index 29c5881..3ca315b 100644 --- a/plc.d/functions +++ b/plc.d/functions @@ -1,12 +1,9 @@ # -*-Shell-script-*- -# # Common functions for PLC startup/shutdown scripts # # Mark Huang # Copyright (C) 2006 The Trustees of Princeton University # -# $Id$ -# export PATH=/sbin:/bin:/usr/bin:/usr/sbin @@ -17,20 +14,17 @@ export PATH=/sbin:/bin:/usr/bin:/usr/sbin ERRORS=0 # Count the exit status of the last command -check () -{ +function check () { ERRORS=$(($ERRORS+$?)) } # Print status header -dialog () -{ +function dialog () { echo -n "PLC: $*: " >&3 } # Print result -result () -{ +function result () { if [ $ERRORS -eq 0 ] ; then success "$*" >&3 else @@ -40,8 +34,7 @@ result () } # Start up a program with a plc_ prefix -plc_daemon () -{ +function plc_daemon () { base=${1##*/} # See if it's already running. Look *only* at the pid file. @@ -76,22 +69,19 @@ plc_daemon () } # Print IP address of hostname if resolvable -gethostbyname () -{ +function gethostbyname () { python -c 'import socket; import sys; print socket.gethostbyname(sys.argv[1])' $1 2>/dev/null } # Forcefully make a symlink -symlink () -{ +function symlink () { mkdir -p $(dirname $2) rm -f $2 ln -s $1 $2 } # Argument(s) or stdin to lowercase stdout -lower () -{ +function lower () { if [ ${#*} -ge 1 ] ; then tr A-Z a-z <<<$* else @@ -100,8 +90,7 @@ lower () } # Argument(s) or stdin to uppercase stdout -upper () -{ +function upper () { if [ ${#*} -ge 1 ] ; then tr a-z A-Z <<<$* else @@ -109,6 +98,46 @@ upper () fi } +# Regenerate configuration files +function plc_reload () { + force=$1 + + # Regenerate the main configuration file from default values + # overlaid with site-specific and current values. + # Thierry -- 2007-07-05 : values in plc_config.xml are *not* taken into account here + files=( + /etc/planetlab/default_config.xml + /etc/planetlab/configs/site.xml + ) + + for file in "${files[@]}" ; do + if [ -n "$force" -o $file -nt /etc/planetlab/plc_config.xml ] ; then + tmp=$(mktemp /tmp/plc_config.xml.XXXXXX) + plc-config --xml "${files[@]}" >$tmp + if [ $? -eq 0 ] ; then + mv $tmp /etc/planetlab/plc_config.xml + chmod 444 /etc/planetlab/plc_config.xml + else + echo "PLC: Warning: Invalid configuration file(s) detected" + rm -f $tmp + fi + break + fi + done + + # Convert configuration to various formats + if [ -n "$force" -o /etc/planetlab/plc_config.xml -nt /etc/planetlab/plc_config ] ; then + plc-config --shell >/etc/planetlab/plc_config + fi + if [ -n "$force" -o /etc/planetlab/plc_config.xml -nt /etc/planetlab/plc_config.py ] ; then + plc-config --python >/etc/planetlab/plc_config.py + fi + if [ -n "$force" -o /etc/planetlab/plc_config.xml -nt /etc/planetlab/php/plc_config.php ] ; then + mkdir -p /etc/planetlab/php + plc-config --php >/etc/planetlab/php/plc_config.php + fi +} + # Make copies of stdout and stderr. The plc initscript redirects # stdout and stderr to a logfile if -v is not specified. [ ! -e /proc/self/fd/3 ] && exec 3>&1