[bonfiredemokit] View of /virt-cluster/vc/vc-node-init.py
View of /virt-cluster/vc/vc-node-init.py
Parent Directory
| Revision Log
Revision 10 -
( download)
( as text)
( annotate)
Fri Aug 31 10:40:38 2012 UTC
(11 years, 11 months ago)
by agomez
File size: 3529 byte(s)
Corrected minor error in license text
Powerpoint presentation to show how to use the software (also in PDF).
#!/usr/bin/python
#
# BonFIRE Virtual Clusters on Federated Clouds Demonstration Kit
#
# Copyright (c) Fundacion Centro Tecnologico de Supercomputacion de Galicia 2012
#
# License GPL Version 3
#
# The research leading to these results has received funding from
# the European Community's Seventh Framework Programme (FP7/2007-2013)
# under agreement number 257386
#
# This software is provided with ABSOLUTELY NO WARRANTY
#
import os
import os.path
import subprocess
import sys
import time
from logger import log,configure
if len(sys.argv)>1:
configure(logfile = sys.argv[1], debug=True, console=False)
else:
configure(debug=True, console=True)
try:
import bonfire
import hostsfile
import ogs
import vcutil
allow_single_cluster = True
default_bonfire = "/etc/default/bonfire"
bonfire.read_defaults(default_bonfire)
hosts_file = "/etc/hosts"
log.info("Bonfire URI: %s" % bonfire.uri)
log.info("Credentials: %s:%s" % (bonfire.user,bonfire.password,))
log.info("Experiment: %s" % bonfire.experiment_id)
#Basic hostsfile for main nodes
while True:
try:
log.info("Get experiment")
master_host = None
shadow_host = None
while (master_host == None) and ((not allow_single_cluster) or (shadow_host == None)) :
experiment = bonfire.get_experiment(bonfire.experiment_id)
for compute in experiment['computes']:
if compute["hostname"].startswith("master"):
master_host = (compute['ip'],compute['hostname'])
elif compute["hostname"].startswith("shadow"):
shadow_host = (compute['ip'],compute['hostname'])
main_hosts = [('127.0.0.1','localhost'),(bonfire.wan_ip,bonfire.hostname), master_host]
if shadow_host:
main_hosts.append(shadow_host)
data_host = master_host
if bonfire.hostname.startswith("client-shadow"):
data_host = shadow_host
log.debug(str(main_hosts))
break
except Exception as excpt:
log.exception(excpt)
time.sleep(20)
hostsfile.store(hosts_file,main_hosts)
#Try to mount shared
log.info("Try to mount NFS volume")
while True:
try:
log.debug(vcutil.execute("mount -t nfs %s:/volume /shared" % data_host[1]))
break
except Exception as excpt:
log.debug("NFS volume not available")
log.exception(excpt)
try:
log.debug(vcutil.execute("umount /shared"))
except Exception as excpt:
log.exception(excpt)
time.sleep(20)
#Mount shared
log.debug(vcutil.execute("umount /shared"))
log.info("Sync mount NFS volume")
log.debug(vcutil.execute("mount -t nfs -o nordirplus,hard,nointr,rw %s:/volume /shared" % data_host[1]))
while not (os.path.exists("/shared/ogs/default/common/sgeexecd") and os.path.exists("/shared/ogs/default/common/settings.sh")):
log.debug("OGS directory not available")
time.sleep(5)
#Configure OGS installation
log.debug(vcutil.execute("""export SGE_ROOT=/shared/ogs
cd $SGE_ROOT
echo \". $SGE_ROOT/default/common/settings.sh\" >> /root/.bashrc
ln -s $SGE_ROOT/default/common/sgeexecd /etc/init.d/sgeexecd
"""))
log.debug("Checking if OGS is available")
while True:
try:
log.debug(vcutil.execute(". /shared/ogs/default/common/settings.sh; qstat"))
break
except Exception as excpt:
log.exception(excpt)
time.sleep(10)
log.debug(vcutil.execute(". /shared/ogs/default/common/settings.sh; python -u /root/vc/vc-node-execd.py /var/log/vc-node-execd.log" , fork = True))
except Exception as excpt:
log.exception(excpt)
|