summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryves <steve.harrison@gmx.net>2011-12-30 03:22:46 +0100
committeryves <steve.harrison@gmx.net>2011-12-30 03:22:46 +0100
commit34209bea7a38c94bb4734f10f1ac169d79730936 (patch)
tree4685d7e3d564cb9f8ea23a6a1e9b4347c51533af
parentc1c61b52e40998b93ca944dbf8ded1e3a6d45db5 (diff)
downloadiscsi-helper-34209bea7a38c94bb4734f10f1ac169d79730936.tar.gz
iscsi-helper-34209bea7a38c94bb4734f10f1ac169d79730936.tar.bz2
iscsi-helper-34209bea7a38c94bb4734f10f1ac169d79730936.zip
rewrote hole execution ifrastructure
-rw-r--r--shared.py116
1 files 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)