import os import re from subprocess import * from sfa.util.rspecHelper import RSpec class SfaData: authority = "plc.princeton" user = "plc.princeton.acb" slice = "plc.princeton.iias" def __init__(self): self.registry = None self.slicemgr = None def getAuthority(self): return SfaData.authority def getUser(self): return SfaData.user def setUser(self, user): SfaData.user = user # Should probably get authority from user record instead... a = SfaData.user.split('.') SfaData.authority = '.'.join(a[:len(a)-1]) def getSlice(self): return SfaData.slice def setSlice(self, slice): SfaData.slice = slice def getRecord(self, hrn): text = Popen(["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(), "-r", self.registry, "-s", self.slicemgr, "show", hrn], stdout=PIPE).communicate()[0] return text def listChildren(self, hrn): children = [] text = Popen(["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(), "-r", self.registry, "-s", self.slicemgr, "list", hrn], stdout=PIPE).communicate()[0] lines = text.split('\n') for line in lines: if line: (hrn, kind) = line.split() children.append((hrn, kind)) return children def getRSpec(self): slice = self.getSlice() call(["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(), "-r", self.registry, "-s", self.slicemgr, "resources", "-o", slice, slice]) filename = os.path.expanduser("~/.sfi/" + slice + ".rspec") 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() call(["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(), "-r", self.registry, "-s", self.slicemgr, "create", slice, filename]) class ViniData(SfaData): def __init__(self): SfaData.__init__(self) self.registry = "http://www.planet-lab.org:12345" self.slicemgr = "http://www.vini-veritas.net:12346" 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 PlanetLabData(SfaData): def __init__(self): SfaData.__init__(self) self.registry = "http://www.planet-lab.org:12345" self.slicemgr = "http://www.planet-lab.org:12346" 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 OpenCirrusData(SfaData): def __init__(self): SfaData.__init__(self) self.registry = "http://www.planet-lab.org:12345" self.slicemgr = "http://www.planet-lab.org:12346"