3 from subprocess import *
4 from sfa.util.rspecHelper import RSpec
10 filename = os.path.expanduser("~/.sfi/sfi_config")
11 execfile(filename, SfaData.__dict__)
12 if not hasattr(SfaData, 'SFI_AUTH'):
13 SfaData.SFI_AUTH = None
14 if not hasattr(SfaData, 'SFI_USER'):
15 SfaData.SFI_USER = None
16 if not hasattr(SfaData, 'SFI_SLICE'):
17 SfaData.SFI_SLICE = None
19 def getAuthority(self):
20 return SfaData.SFI_AUTH
23 return SfaData.SFI_USER
25 def setUser(self, user):
26 SfaData.SFI_USER = user
28 # Should probably get authority from user record instead...
30 SfaData.SFI_AUTH = '.'.join(a[:len(a)-1])
33 return SfaData.SFI_SLICE
35 def setSlice(self, slice):
36 SfaData.SFI_SLICE = slice
38 def getRecord(self, hrn):
39 text = Popen(["sfi.py", "-u", self.getUser(), "-a",
40 self.getAuthority(), "-r", self.registry,
41 "-s", self.slicemgr, "show", hrn],
42 stdout=PIPE).communicate()[0]
45 def listChildren(self, hrn):
47 text = Popen(["sfi.py", "-u", self.getUser(), "-a",
48 self.getAuthority(), "-r", self.registry,
49 "-s", self.slicemgr, "list", hrn],
50 stdout=PIPE).communicate()[0]
51 lines = text.split('\n')
54 (hrn, kind) = line.split()
55 children.append((hrn, kind))
60 slice = self.getSlice()
61 # Write RSpec to file for testing.
62 filename = os.path.expanduser("~/.sfi/" + slice + ".rspec")
67 call(["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(),
68 "-r", self.registry, "-s", self.slicemgr, "resources",
69 "-o", filename, slice])
70 f = open(filename, "r")
75 def applyRSpec(self, xml):
76 slice = self.getSlice()
77 filename = os.path.expanduser("~/.sfi/" + slice + ".rspec")
78 f = open(filename, "w")
81 call(["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(),
82 "-r", self.registry, "-s", self.slicemgr, "create",
85 class PlanetLabData(SfaData):
87 SfaData.__init__(self)
88 self.registry = "http://www.planet-lab.org:12345"
89 self.slicemgr = "http://www.planet-lab.org:12346"
92 def refreshRSpec(self):
93 xml = SfaData.getRSpec(self)
94 self.rspec = RSpec(xml)
97 if self.rspec is None:
101 def applyRSpec(self):
102 xml = self.rspec.toxml()
103 SfaData.applyRSpec(self, xml)
105 class PLEData(PlanetLabData):
107 PlanetLabData.__init__(self)
108 self.slicemgr = "http://www.planet-lab.eu:12346"
110 class PLJData(PlanetLabData):
112 PlanetLabData.__init__(self)
113 self.slicemgr = "http://www.planet-lab.jp:12346"
115 class ViniData(PlanetLabData):
117 PlanetLabData.__init__(self)
118 self.slicemgr = "http://www.vini-veritas.net:12346"
120 class GpENIData(PlanetLabData):
122 PlanetLabData.__init__(self)
123 self.slicemgr = "http://198.248.241.100:12346"
125 class OpenCirrusData(SfaData):
127 SfaData.__init__(self)
128 self.registry = "http://198.55.37.29:12345"
129 self.slicemgr = "http://198.55.37.29:12346"
131 def refreshRSpec(self):
132 xml = SfaData.getRSpec(self)
136 if self.rspec is None:
140 def applyRSpec(self):
142 SfaData.applyRSpec(self, xml)