From 34209bea7a38c94bb4734f10f1ac169d79730936 Mon Sep 17 00:00:00 2001 From: yves Date: Fri, 30 Dec 2011 03:22:46 +0100 Subject: rewrote hole execution ifrastructure --- shared.py | 116 ++++++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 83 insertions(+), 33 deletions(-) diff --git a/shared.py b/shared.py index be9e457..cfd9ec3 100644 --- a/shared.py +++ b/shared.py @@ -1,58 +1,108 @@ #coding: UTF-8 import subprocess import sys +import os import re def logInfo(msg): print("\033[1;32mINFO\033[0m " + str(msg)) -def logErr(msg): + +def logErr(msg,logFile=None): print("\033[1;31mERROR\033[0m " + str(msg)) + if(logFile): + logFile.write(str(msg)) + logFile.flush() -def openLogFile(comment=sys.argv[0]): - logFile = open("/tmp/" + comment + ".log","a") - logFile.write("# ### Starting new run \"" + comment + "\" ### #\r\n") - logFile.flush() - return logFile -def execute(cmd, logFile=None): - # safty anker subprocess.call(cmd) - try: - subprocess.call(['echo','#>>>'] + cmd,stdout=logFile) - ret = subprocess.call(['echo'] + cmd, stdout=logFile, stderr=logFile) +class ExecRecepie: + + def __init__(self, desc, command): + self.desc = desc + self.cmd = command + + def execute(self, logFile=None, dry=False): + try: + logFile.write('excuting: ' + str(self.cmd)) + logFile.flush() + + if not dry: + ret = subprocess.call(['echo'] + cmd, stdout=logFile, stderr=logFile) - if ret != 0: + if ret != 0: + print() + logErr( "\"" + cmd[0] + "\" returned error code: " + str(ret), logFile) + + except OSError as e: print() - logErr( "\"" + cmd[0] + "\" returned error code: " + str(ret) + - ". Logged to " + logFile.name) + logErr("failed to execute command \"" + cmd[0] + "\". Logged to " + + logFile.name + ". Error was: " + str(e)) sys.exit(1) - except OSError as e: - print() - logErr("failed to execute command \"" + cmd[0] + "\". Logged to " - + logFile.name + ". Error was: " + str(e)) - sys.exit(1) +class ConfigRecepie: + + def __init__(self, desc, directory, contentmap): + self.desc = desc + self.directory = directory + self.contentmap = contentmap + + def execute(self, logFile=None, dry=False): + + if( dry and not self.directory[:4] is "/tmp"): + self.directory = '/tmp/' + self.directory + + try: + os.makedirs(self.directory) + except OSError as e: + logInfo(self.directory + " already there") + + for (filename, content) in self.contentmap.items(): + try: + fd = open(self.directory + '/' + filename,'w') + fd.write(content) + fd.close() + except IOError: + logErr('Unable to write file: ' + self.directory + filename) + sys.exit(2) + +class FstabRecepie: + def __init__(self, desc, fstab, rootDisk): + self.desc = desc + self.fstab = fstab + self.rootDisk = rootDisk + + def execute(self, logFile=None, dry=False): + + if( dry): + self.fstab = '/tmp/' + self.fstab + + with open(self.fstab, 'a') as fstab: + fstab.write(self.rootDisk + ' / ext4 defaults,relatime 0 1\n') + fstab.close() -class ProgressLogger: +class Executor: - def __init__(self, totalSteps, steps=[]): - self.totalSteps = totalSteps - self.progress=1 + def __init__(self, steps, comment=sys.argv[0]): + logFile = open("/tmp/" + comment + ".log","a") + logFile.write("# ### Starting new run \"" + comment + "\" ### #\r\n") + logFile.flush() + self.logFile = logFile self.steps=steps + self.dry=True - def start(self, step=None): - if(step == None): - step = self.steps.pop() + def do(self): - print("[" + str(self.progress) + "/" + str(self.totalSteps) - + "] excuting: " + step, end="") + totalSteps = len(self.steps) + progress=1 - self.current=step + for step in self.steps: + print("[" + str(progress) + "/" + str(totalSteps) + + "] excuting: " + step.desc, end="") + step.execute(self.logFile, self.dry) + print("\r[" + str(progress) + "/" + str(totalSteps) + "] excuted: " + + step.desc + " ") - def done(self): - print("\r[" + str(self.progress) + "/" + str(self.totalSteps) + "] excuted: " - + self.current + " ") - self.progress = self.progress + 1 + progress = progress + 1 def parseIp(rawString): match = re.match('^130\.133\.110\.([0-9]{1,3})$',rawString) -- cgit v1.2.3-1-g7c22