5 from sfa.util.rspecHelper import RSpec
8 defaults = { 'SFI_AUTH' : None,
11 'SFI_REGISTRY' : "http://www.planet-lab.org:12345",
12 'SFI_SM' : "http://www.planet-lab.org:12346",
13 'SFAUI_VERBOSE' : False,
17 self.filename = os.path.expanduser("~/.sfi/sfi_config")
18 execfile(self.filename, SfaData.__dict__)
19 for (k,v) in SfaData.defaults.items():
20 if not hasattr(SfaData,k): setattr(SfaData,k,v)
22 def show(self,classname):
23 if SfaData.SFAUI_VERBOSE:
24 print "instance of %s after reading config from %s"%(classname,self.filename)
25 for (k,v) in SfaData.defaults.items():
26 print "%-20s: %r"%(k,getattr(SfaData,k))
28 def getAuthority(self):
29 return SfaData.SFI_AUTH
32 return SfaData.SFI_USER
34 def setUser(self, user):
35 SfaData.SFI_USER = user
37 # Should probably get authority from user record instead...
39 SfaData.SFI_AUTH = '.'.join(a[:len(a)-1])
42 return SfaData.SFI_SLICE
44 def setSlice(self, slice):
45 SfaData.SFI_SLICE = slice
48 return SfaData.SFI_REGISTRY
53 def trace_command (self, command):
54 self._trace=time.time()
55 if self.SFAUI_VERBOSE:
56 print time.strftime('%M:%S'),'Invoking',' '.join(command)
58 if self.SFAUI_VERBOSE:
59 print time.strftime('%M:%S'),"[%.3f s]"%(time.time()-self._trace),'Done'
61 def getRecord(self, hrn):
62 command = ["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(),
63 "-r", self.registry(), "-s", self.slicemgr(), "show", hrn]
64 self.trace_command(command)
65 text = subprocess.Popen(command, stdout=subprocess.PIPE).communicate()[0]
69 def listChildren(self, hrn):
71 command=["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(),
72 "-r", self.registry(), "-s", self.slicemgr(), "list", hrn]
73 self.trace_command(command)
74 text = subprocess.Popen(command, stdout=subprocess.PIPE).communicate()[0]
76 lines = text.split('\n')
79 (hrn, kind) = line.split()
80 children.append((hrn, kind))
85 slice = self.getSlice()
86 # Write RSpec to file for testing.
87 filename = os.path.expanduser("~/.sfi/" + slice + ".rspec")
92 command=["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(),
93 "-r", self.registry(), "-s", self.slicemgr(), "resources",
94 "-o", filename, slice]
95 self.trace_command(command)
96 subprocess.call(command)
98 f = open(filename, "r")
103 def applyRSpec(self, xml):
104 slice = self.getSlice()
105 filename = os.path.expanduser("~/.sfi/" + slice + ".rspec")
106 f = open(filename, "w")
109 command=["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(),
110 "-r", self.registry(), "-s", self.slicemgr(), "create", slice, filename]
111 self.trace_command(command)
112 subprocess.call(command)
115 class PlanetLabData(SfaData):
117 SfaData.__init__(self)
120 def refreshRSpec(self):
121 xml = SfaData.getRSpec(self)
122 self.rspec = RSpec(xml)
125 if self.rspec is None:
129 def applyRSpec(self):
130 xml = self.rspec.toxml()
131 SfaData.applyRSpec(self, xml)
133 class PLEData(PlanetLabData):
135 PlanetLabData.__init__(self)
136 SfaData.SFI_REGISTRY = "http://www.planet-lab.eu:12345"
137 SfaData.SFI_SM = "http://www.planet-lab.eu:12346"
138 self.show("PlanetLabData")
140 class PLJData(PlanetLabData):
142 PlanetLabData.__init__(self)
143 SfaData.SFI_SM = "http://www.planet-lab.jp:12346"
146 class ViniData(PlanetLabData):
148 PlanetLabData.__init__(self)
149 SfaData.SFI_SM = "http://www.vini-veritas.net:12346"
150 self.show("ViniData")
152 class GpENIData(PlanetLabData):
154 PlanetLabData.__init__(self)
155 SfaData.SFI_SM = "http://198.248.241.100:12346"
156 self.show("GpENIData")
158 class OpenCirrusData(SfaData):
160 SfaData.__init__(self)
161 self.SFI_REGISTRY = "http://198.55.37.29:12345"
162 SfaData.SFI_SM = "http://198.55.37.29:12346"
163 self.show("OpenCirrusData")
165 def refreshRSpec(self):
166 xml = SfaData.getRSpec(self)
170 if self.rspec is None:
174 def applyRSpec(self):
176 SfaData.applyRSpec(self, xml)