X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fscripts%2Fopencloud;h=b307e6678a3496d040a340022599eada11655a5d;hb=a99cbefc194c3f107848bf3fdc74b19ea809d865;hp=63b64402b9e3196c2e8a5a79a2b7caa62ec2a6c3;hpb=f4db3814901b5d8cbd628aad2659afc7dec1198d;p=plstackapi.git diff --git a/planetstack/scripts/opencloud b/planetstack/scripts/opencloud index 63b6440..b307e66 100755 --- a/planetstack/scripts/opencloud +++ b/planetstack/scripts/opencloud @@ -5,24 +5,39 @@ if [ -z "$1" ]; then exit fi +BACKUP_DIR=/opt/planetstack_backups + +DJANGO_17=`python -c "import django; from distutils.version import StrictVersion; print int(StrictVersion(django.get_version()) >= StrictVersion('1.7'))"` + cd /opt/planetstack -function initdb { - #Figure out if the script is running on Fedora 16 or 17 - if grep 16 /etc/fedora-release; then +function ensure_postgres_running { + # "sudo -u postgres pg_ctl -D /var/lib/postgres/data status" doesn't work + # right on Vicci, so let's try to detect it by seeing if the port is + # being listened on + + netstat -nl | grep -i ":5432 " + if [[ $? == 0 ]]; then + echo "Postgres is already running" + return + fi + + /sbin/service postgresql initdb + /sbin/service postgresql start + /sbin/chkconfig postgresql on + + netstat -nl | grep -i ":5432 " + if [[ $? != 0 ]]; then + # it's still not running + echo "Trying fallback mechanism to start Postgres" sudo -u postgres initdb -D /var/lib/pgsql/data/ sudo -u postgres pg_ctl -D /var/lib/pgsql/data -l logfile start - else - #Try normal Fedora 17 commands - echo "Trying Fedora 17 commands" > /dev/stdout - /sbin/service postgresql initdb - /sbin/service postgresql start - /sbin/chkconfig postgresql on fi + } function createdb { echo "Creating OpenCloud database..." - sudo -u postgres createdb planetstack + sudo -u postgres createdb planetstack } function dropdb { echo "Dropping OpenCloud database..." @@ -31,38 +46,123 @@ function dropdb { function syncdb { echo "Syncing OpenCloud services..." python /opt/planetstack/manage.py syncdb --noinput + if [[ $DJANGO_17 ]]; then + echo "Loading initial data from fixture..." + python /opt/planetstack/manage.py loaddata /opt/planetstack/core/fixtures/initial_data.json + fi +} +function evolvedb { + echo "Evolving OpenCloud services..." + python /opt/planetstack/manage.py evolve --hint --execute --noinput +} +function migratedb { + echo "Migrating OpenCloud services..." + python /opt/planetstack/manage.py migrate +} +function stopserver { + echo "Stopping any running OpenCloud Service(s)" + pkill -f "python.*runserver" } function runserver { - echo "Starting OpenCloud Service on $HOSTNAME:8000" - python manage.py runserver $HOSTNAME:8000& + PUBLIC_HOSTNAME=`/opt/planetstack/planetstack-config.py get server_hostname $HOSTNAME` + echo "Starting OpenCloud Service on $PUBLIC_HOSTNAME:8000" + python manage.py runserver $PUBLIC_HOSTNAME:8000& } function dumpdata { - echo "Saving off OpenCloud data to /opt/planetstack/initial_data.json. Please compare against /opt/planetstack/core/fixtures/initial_data.json to be sure of replacing these changes as the default initialization values." - python manage.py dumpdata core hpc syndicate requestrouter --indent 4 > /opt/planetstack/initial_data.json + mkdir -p $BACKUP_DIR + FN="$BACKUP_DIR/dumpdata-`date +%Y-%m-%d_%H:%M:%S`.json" + echo "Saving data to $FN" + python manage.py dumpdata core hpc syndicate_storage requestrouter -a --indent 4 > $FN + if [[ ! -f $FN ]]; then + echo "FAILED to create $FN" + exit + fi + SIZE=$(du -k "$FN" | cut -f 1) + if [[ $SIZE -lt 9 ]]; then + echo "Dumpdata was empty. Deleting and aborting" + rm $FN + exit + fi + rm -f $BACKUP_DIR/dumpdata-latest.json + ln -s $FN $BACKUP_DIR/dumpdata-latest.json +} + +function genkeys { + mkdir -p public_keys + mkdir -p private_keys + echo "Generating keys" + keyczart create --location=private_keys --name="OpenCloud" --purpose=crypt --asymmetric=rsa + keyczart addkey --location=private_keys --status=primary --size=1024 + keyczart pubkey --location=private_keys --destination=public_keys + if [[ ! -f public_keys/1 ]]; then + echo "FAILED to create keys" + exit + fi } COMMAND=$1 if [ "$COMMAND" = "initdb" ]; then - initdb + stopserver + ensure_postgres_running createdb syncdb - runserver +fi +if [ "$COMMAND" = "repairdb" ]; then + stopserver + ensure_postgres_running + dumpdata + # TODO: This is where we could run migration scripts to upgrade the + # dumped data to the new models. + mv /opt/planetstack/core/fixtures/initial_data.json /opt/planetstack/core/fixtures/initial_data.json-old + cp $BACKUP_DIR/dumpdata-latest.json /opt/planetstack/core/fixtures/initial_data.json + dropdb + createdb + syncdb +fi +if [ "$COMMAND" = "restoredb" ]; then + if [[ ! -f $BACKUP_DIR/dumpdata-latest.json ]]; then + echo There is no dumpdata to restore + exit + fi + stopserver + ensure_postgres_running + mv /opt/planetstack/core/fixtures/initial_data.json /opt/planetstack/core/fixtures/initial_data.json-old + cp $BACKUP_DIR/dumpdata-latest.json /opt/planetstack/core/fixtures/initial_data.json + dropdb + createdb + syncdb +fi +if [ "$COMMAND" = "evolvedb" -o "$COMMAND" = "migratedb" ]; then + stopserver + ensure_postgres_running + if [[ $DJANGO_17 ]]; then + migratedb + else + evolvedb + fi fi if [ "$COMMAND" = "resetdb" ]; then + stopserver dropdb createdb syncdb - runserver fi if [ "$COMMAND" = "syncdb" ]; then + stopserver syncdb - runserver fi if [ "$COMMAND" = "runserver" ]; then + stopserver runserver fi +if [ "$COMMAND" = "stopserver" ]; then + stopserver +fi if [ "$COMMAND" = "dumpdata" ]; then dumpdata fi +if [ "$COMMAND" = "genkeys" ]; then + genkeys +fi