Commit 504c884b authored by Nicolas Wavrant's avatar Nicolas Wavrant

runner: "run" and "proxy" functions adapted to supervisor

parent 84bba7b6
......@@ -238,15 +238,15 @@ def updateInstanceParameter(config, software_type=None):
config: Slaprunner configuration.
software_type: reconfigure Software Instance with software type.
"""
time.sleep(1)
if not (updateProxy(config) and requestInstance(config, software_type)):
return False
def startProxy(config):
"""Start Slapproxy server"""
if sup_process.isRunning('slapproxy'):
if sup_process.isRunning(config, 'slapproxy'):
return
try:
sup_process.runProcess(config, "slapproxy")
except xmlrpclib.Fault:
......@@ -266,15 +266,11 @@ def removeProxyDb(config):
os.unlink(config['database_uri'])
def isSoftwareRunning(config=None):
def isSoftwareRunning(config):
"""
Return True if slapos is still running and false if slapos if not
"""
# XXX-Cedric Hardcoded pidfile
if config:
slapgrid_pid = os.path.join(config['run_dir'], 'slapgrid-sr.pid')
return isPidFileProcessRunning(slapgrid_pid)
return isRunning('slapgrid-sr')
return sup_process.isRunning(config, 'slapgrid-sr')
def slapgridResultToFile(config, step, returncode, datetime):
......@@ -300,17 +296,14 @@ def waitProcess(config, process, step):
slapgridResultToFile(config, step, process.returncode, date)
def runSoftwareWithLock(config, lock=True):
def runSoftwareWithLock(config, lock=False):
"""
Use Slapgrid to compile current Software Release and wait until
compilation is done
"""
if isSoftwareRunning():
return False
if sup_process.isRunning(config, 'slapgrid-sr'):
return 1
slapgrid_pid = os.path.join(config['run_dir'], 'slapgrid-sr.pid')
if isPidFileProcessRunning(slapgrid_pid):
return False
if not os.path.exists(config['software_root']):
os.mkdir(config['software_root'])
stopProxy(config)
......@@ -319,16 +312,16 @@ def runSoftwareWithLock(config, lock=True):
if os.path.exists(config['software_log']):
os.remove(config['software_log'])
if not updateProxy(config):
return False
return 1
try:
sup_process.runProcess(config, "slapgrid-sr")
if lock:
sup_process.waitForProcessEnd(config, "slapgrid-sr")
#Saves the current compile software for re-use
config_SR_folder(config)
return True
return sup_process.returnCode(config, "slapgrid-sr")
except xmlrpclib.Fault:
return False
return 1
def config_SR_folder(config):
......@@ -392,39 +385,34 @@ def loadSoftwareRList(config):
return list
def isInstanceRunning(config=None):
def isInstanceRunning(config):
"""
Return True if slapos is still running and False otherwise
"""
# XXX-Cedric Hardcoded pidfile
if config:
slapgrid_pid = os.path.join(config['run_dir'], 'slapgrid-cp.pid')
return isPidFileProcessRunning(slapgrid_pid)
return isRunning('slapgrid-cp')
return sup_process.isRunning(config, 'slapgrid-cp')
def runInstanceWithLock(config, lock=True):
def runInstanceWithLock(config, lock=False):
"""
Use Slapgrid to deploy current Software Release and wait until
deployment is done.
"""
if isInstanceRunning():
return False
if sup_process.isRunning(config, 'slapgrid-cp'):
return 1
slapgrid_pid = os.path.join(config['run_dir'], 'slapgrid-cp.pid')
startProxy(config)
# XXX Hackish and unreliable
if os.path.exists(config['instance_log']):
os.remove(config['instance_log'])
if not (updateProxy(config) and requestInstance(config)):
return False
return 1
try:
sup_process.runProcess(config, "slapgrid-cp")
if lock:
sup_process.waitForProcessEnd(config, "slapgrid-cp")
return True
return sup_process.returnCode(config, "slapgrid-cp")
except xmlrpclib.Fault:
return False
return 1
def getProfilePath(projectDir, profile):
......@@ -557,10 +545,8 @@ def configNewSR(config, projectpath):
"""
folder = realpath(config, projectpath)
if folder:
if isInstanceRunning():
killRunningProcess('slapgrid-cp')
if isSoftwareRunning():
killRunningProcess('slapgrid-sr')
sup_process.stopIfRunning(config, 'slapgrid-cp')
sup_process.stopIfRunning(config, 'slapgrid-sr')
stopProxy(config)
removeProxyDb(config)
startProxy(config)
......@@ -652,7 +638,7 @@ def removeSoftwareByName(config, md5, folderName):
config: slaprunner configuration
foldername: the link name given to the software release
md5: the md5 filename given by slapgrid to SR folder"""
if isSoftwareRunning() or isInstanceRunning():
if isSoftwareRunning(config) or isInstanceRunning(config):
raise Exception("Software installation or instantiation in progress, cannot remove")
path = os.path.join(config['software_root'], md5)
linkpath = os.path.join(config['software_link'], folderName)
......@@ -890,8 +876,9 @@ def runSlapgridUntilSuccess(config, step):
# XXX-Nico runSoftwareWithLock can return 0 or False (0==False)
while counter > 0:
counter -= 1
slapgrid = runSlapgridWithLock(config)
if slapgrid:
slapgrid = runSlapgridWithLock(config, lock=True)
# slapgrid == 0 because EXIT_SUCCESS == 0
if slapgrid == 0:
break
times_left = int(open(counter_file).read()) - 1
if times_left > 0 :
......@@ -902,7 +889,7 @@ def runSlapgridUntilSuccess(config, step):
max_tries -= counter
# run instance only if we are deploying the software release,
# if it is defined so, and sr is correctly deployed
if step == "software" and params['run_instance'] and slapgrid:
if step == "software" and params['run_instance'] and slapgrid == 0:
return (max_tries, runSlapgridUntilSuccess(config, "instance"))
else:
return max_tries
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment