X-Git-Url: http://git.onelab.eu/?p=sface.git;a=blobdiff_plain;f=sfadata.py;fp=sfadata.py;h=0000000000000000000000000000000000000000;hp=1fc3708757aa5d911aebec77b3babaded21a8b50;hb=e095c7423002644d129cef273f3a63646903b788;hpb=e8b04dd7ddc2ffb22d72098400cdbf676453a094 diff --git a/sfadata.py b/sfadata.py deleted file mode 100644 index 1fc3708..0000000 --- a/sfadata.py +++ /dev/null @@ -1,228 +0,0 @@ -import os -import re -import time -from PyQt4.QtCore import QProcess, QString, QStringList - -from sfa.util.rspecHelper import RSpec - - -def find_executable(exec_name): - """find the given executable in $PATH""" - paths = os.getenv("PATH").split(':') - for p in paths: - exec_path = os.path.join(p, exec_name) - if os.path.exists(exec_path): - return exec_path - return None - -def process(command): - SFI_CMD = find_executable("sfi.py") - arguments = QStringList() - for c in command: - arguments << QString(c) - process = QProcess() - process.start(SFI_CMD, arguments) - process.waitForFinished( 200000 ) - print process.readAll() - - -class SfaData: - defaults = { 'SFI_AUTH' : None, - 'SFI_USER' : None, - 'SFI_SLICE' : None, - 'SFI_REGISTRY' : "http://www.planet-lab.org:12345", - 'SFI_AM' : "http://www.planet-lab.org:12346", - 'SFI_SM' : "http://www.planet-lab.org:12347", - 'SFACE_VERBOSE' : False, - 'SFACE_DEBUG' : False, - } - - # let the UI set the slicename if that was set by user - def __init__(self, slice=None): - self.read_config() - - def read_config(self): - filename = os.path.expanduser("~/.sfi/sfi_config") - execfile(filename, SfaData.__dict__) - for (k,v) in SfaData.defaults.items(): - if not hasattr(SfaData,k): setattr(SfaData,k,v) - if SfaData.SFACE_VERBOSE: - print "After reading config from %s"%filename - for (k,v) in SfaData.defaults.items(): - print "%-20s: %r"%(k,getattr(SfaData,k)) - - def save_config(self): - config_keys = SfaData.defaults.keys() - configfile = os.path.expanduser("~/.sfi/sfi_config") - tmpfile = configfile + ".tmp" - - out = open(tmpfile, "w") - for line in open(os.path.expanduser("~/.sfi/sfi_config")): - try: - key, val = line.split('=') - key = key.strip() - val = val.strip() - if key in config_keys: - line = "%s = '%s'\n" % (key, getattr(self, key)) - except: - pass - out.write(line) - out.close() - - os.unlink(configfile) - os.rename(tmpfile, configfile) - - - def getAuthority(self): - return SfaData.SFI_AUTH - - def getUser(self): - return SfaData.SFI_USER - - def setUser(self, user): - SfaData.SFI_USER = user - - # Should probably get authority from user record instead... - a = user.split('.') - SfaData.SFI_AUTH = '.'.join(a[:len(a)-1]) - - def getSlice(self): - return SfaData.SFI_SLICE - - def setSlice(self, slice): - SfaData.SFI_SLICE = slice - - def registry(self): - return SfaData.SFI_REGISTRY - - def slicemgr(self): - return SfaData.SFI_SM - - def aggmgr(self): - return SfaData.SFI_AM - - def trace_command (self, command): - self._trace=time.time() - if self.SFACE_VERBOSE: - print time.strftime('%M:%S'),'Invoking',' '.join(command) - - def trace_end (self): - if self.SFACE_VERBOSE: - print time.strftime('%M:%S'),"[%.3f s]"%(time.time()-self._trace),'Done' - - def getRecord(self, hrn): - command = ["-u", self.getUser(), "-a", self.getAuthority(), - "-r", self.registry(), "-s", self.slicemgr(), "show", hrn] - self.trace_command(command) - process(command) - self.trace_end() - return text - - def listChildren(self, hrn): - children = [] - command=["-u", self.getUser(), "-a", self.getAuthority(), - "-r", self.registry(), "-s", self.slicemgr(), "list", hrn] - self.trace_command(command) - process(command) - self.trace_end() - lines = text.split('\n') - for line in lines: - if line: - (hrn, kind) = line.split() - children.append((hrn, kind)) - - return children - - def getRSpecFromSM(self): - return self.__getRSpec(self.slicemgr()) - - def getRSpecFromAM(self): - return self.__getRSpec(self.aggmgr()) - - def __getRSpec(self, mgr): - slice = self.getSlice() - # Write RSpec to file for testing. - filename = os.path.expanduser("~/.sfi/" + slice + ".rspec") - try: - os.remove(filename) - except: - pass - command=["-u", self.getUser(), "-a", self.getAuthority(), - "-r", self.registry(), "-s", mgr, "resources", - "-o", filename, slice] - self.trace_command(command) - process(command) - self.trace_end() - f = open(filename, "r") - xml = f.read() - f.close() - return xml - - def applyRSpec(self, xml): - slice = self.getSlice() - filename = os.path.expanduser("~/.sfi/" + slice + ".rspec") - f = open(filename, "w") - f.write(xml) - f.close() - command=["-u", self.getUser(), "-a", self.getAuthority(), - "-r", self.registry(), "-s", self.slicemgr(), "create", slice, filename] - self.trace_command(command) - process(command) - self.trace_end() - -class PlanetLabData(SfaData): - def __init__(self): - SfaData.__init__(self) - self.rspec = None - - def refreshRSpec(self): - xml = SfaData.getRSpec(self) - self.rspec = RSpec(xml) - - def getRSpec(self): - if self.rspec is None: - self.refreshRSpec() - return self.rspec - - def applyRSpec(self): - xml = self.rspec.toxml() - SfaData.applyRSpec(self, xml) - -class PLEData(PlanetLabData): - def __init__(self): - PlanetLabData.__init__(self) - self.SFI_AM = "http://www.planet-lab.eu:12346" - -class PLJData(PlanetLabData): - def __init__(self): - PlanetLabData.__init__(self) - self.SFI_AM = "http://www.planet-lab.jp:12346" - -class ViniData(PlanetLabData): - def __init__(self): - PlanetLabData.__init__(self) - self.SFI_AM = "http://www.vini-veritas.net:12346" - -class GpENIData(PlanetLabData): - def __init__(self): - PlanetLabData.__init__(self) - self.SFI_AM = "http://198.248.241.100:12346" - -class OpenCirrusData(SfaData): - def __init__(self): - SfaData.__init__(self) - self.SFI_REGISTRY = "http://198.55.37.29:12345" - self.SFI_AM = "http://198.55.37.29:12346" - - def refreshRSpec(self): - xml = SfaData.getRSpec(self) - self.rspec = xml - - def getRSpec(self): - if self.rspec is None: - self.refreshRSpec() - return self.rspec - - def applyRSpec(self): - xml = self.rspec - SfaData.applyRSpec(self, xml)