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