* tentative merge of onelab myplc
[myplc.git] / plc.d / api
index ecbcdef..4740f67 100755 (executable)
--- a/plc.d/api
+++ b/plc.d/api
@@ -1,20 +1,23 @@
 #!/bin/bash
 #
-# priority: 800
+# priority: 450
 #
-# Bootstrap the database
+# Configure the API. Must be done after SSL certificates are generated
+# and before the API web server is brought up.
 #
 # Mark Huang <mlhuang@cs.princeton.edu>
 # Copyright (C) 2006 The Trustees of Princeton University
 #
-# $Id: api,v 1.1 2006/04/06 21:51:59 mlhuang Exp $
+# $Id: api 635 2007-07-05 11:08:14Z thierry $
 #
 
 # Source function library and configuration
 . /etc/plc.d/functions
+. /etc/planetlab/plc_config
+local_config=/etc/planetlab/configs/site.xml
 
-# Export so that we do not have to specify -p to psql invocations
-export PGPORT=$PLC_DB_PORT
+# Be verbose
+set -x
 
 case "$1" in
     start)
@@ -22,19 +25,31 @@ case "$1" in
            exit 0
        fi
 
-       MESSAGE=$"Bootstrapping the database"
+       MESSAGE=$"Configuring the API"
        dialog "$MESSAGE"
 
-       # Update the maintenance account username. This can't be
-       # done through the api-config script since it uses the
-       # maintenance account to access the API. The maintenance
-       # account should be person_id 1 since it is created by the
-       # DB schema itself.
-       psql -U $PLC_DB_USER -c "UPDATE persons SET email='$PLC_API_MAINTENANCE_USER' WHERE person_id=1" $PLC_DB_NAME
+       # Make sure that the API maintenance account is protected by a
+       # password.
+       if [ -z "$PLC_API_MAINTENANCE_PASSWORD" ] ; then
+           PLC_API_MAINTENANCE_PASSWORD=$(uuidgen)
+           plc-config --category=plc_api --variable=maintenance_password --value="$PLC_API_MAINTENANCE_PASSWORD" --save=$local_config $local_config
+           service plc reload
+       fi
 
-       # Bootstrap the DB
-       api-config
-       check
+       # Make sure that all PLC servers are allowed to access the API
+       # through the maintenance account.
+       PLC_API_MAINTENANCE_SOURCES=($((
+           for ip in $PLC_API_MAINTENANCE_SOURCES ; do
+               echo $ip
+           done
+           for server in API BOOT WWW ; do
+               hostname=PLC_${server}_HOST
+               gethostbyname ${!hostname}
+           done
+        ) | sort -u))
+       PLC_API_MAINTENANCE_SOURCES=${PLC_API_MAINTENANCE_SOURCES[*]}
+       plc-config --category=plc_api --variable=maintenance_sources --value="$PLC_API_MAINTENANCE_SOURCES" --save=$local_config $local_config
+       service plc reload
 
        result "$MESSAGE"
        ;;