X-Git-Url: http://git.onelab.eu/?p=sfa-gui.git;a=blobdiff_plain;f=SfaData.py;h=b99c56ecf019f471fe4aa03fd4423e85d96bca6a;hp=e1abfac28a0637ed852408a2a80829b922c90ff7;hb=4c3865f7bc1d92a5598dc1d62f13b293f2d0fe9f;hpb=7ce5cc20aaa8c2504abff63921268c0f6fa8a676 diff --git a/SfaData.py b/SfaData.py index e1abfac..b99c56e 100644 --- a/SfaData.py +++ b/SfaData.py @@ -1,5 +1,6 @@ import os -from subprocess import call +import re +from subprocess import * from sfa.util.rspecHelper import RSpec class SfaData: @@ -30,8 +31,26 @@ class SfaData: def setSlice(self, slice): SfaData.slice = slice - def getRecord(self): - pass + 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() @@ -44,25 +63,55 @@ class SfaData: 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 getRSpec(self): + def refreshRSpec(self): xml = SfaData.getRSpec(self) - return RSpec(xml) + 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 getRSpec(self): + def refreshRSpec(self): xml = SfaData.getRSpec(self) - return RSpec(xml) + 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):