OpenCirrus: Create the panel for making requests.
[sfa-gui.git] / SfaData.py
1 import os
2 import re
3 from subprocess import *
4 from sfa.util.rspecHelper import RSpec
5
6 class SfaData:
7     def __init__(self):
8         self.registry = None
9         self.slicemgr = None
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
18
19     def getAuthority(self):
20         return SfaData.SFI_AUTH
21
22     def getUser(self):
23         return SfaData.SFI_USER
24
25     def setUser(self, user):
26         SfaData.SFI_USER = user
27
28         # Should probably get authority from user record instead...
29         a = user.split('.')
30         SfaData.SFI_AUTH = '.'.join(a[:len(a)-1])
31
32     def getSlice(self):
33         return SfaData.SFI_SLICE
34
35     def setSlice(self, slice):
36         SfaData.SFI_SLICE = slice
37
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]
43         return text
44
45     def listChildren(self, hrn):
46         children = []
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')
52         for line in lines:
53             if line:
54                 (hrn, kind) = line.split() 
55                 children.append((hrn, kind))
56
57         return children
58
59     def getRSpec(self):
60         slice = self.getSlice()
61         # Write RSpec to file for testing.
62         filename = os.path.expanduser("~/.sfi/" + slice + ".rspec")
63         try:
64             os.remove(filename)
65         except:
66             pass
67         call(["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(), 
68               "-r", self.registry, "-s", self.slicemgr, "resources", 
69               "-o", slice, slice])
70         f = open(filename, "r")
71         xml = f.read()
72         f.close()
73         return xml
74
75     def applyRSpec(self, xml):
76         slice = self.getSlice()
77         filename = os.path.expanduser("~/.sfi/" + slice + ".rspec")
78         f = open(filename, "w")
79         f.write(xml)
80         f.close()
81         call(["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(), 
82               "-r", self.registry, "-s", self.slicemgr, "create", 
83               slice, filename])
84
85 class PlanetLabData(SfaData):
86     def __init__(self):
87         SfaData.__init__(self)
88         self.registry = "http://www.planet-lab.org:12345"
89         self.slicemgr = "http://www.planet-lab.org:12346"
90         self.rspec = None
91
92     def refreshRSpec(self):
93         xml = SfaData.getRSpec(self)
94         self.rspec = RSpec(xml)
95
96     def getRSpec(self):
97         if self.rspec is None:
98             self.refreshRSpec()
99         return self.rspec
100     
101     def applyRSpec(self):
102         xml = self.rspec.toxml()
103         SfaData.applyRSpec(self, xml)
104
105 class PLEData(PlanetLabData):
106     def __init__(self):
107         PlanetLabData.__init__(self)
108         self.slicemgr = "http://www.planet-lab.eu:12346"
109
110 class PLJData(PlanetLabData):
111     def __init__(self):
112         PlanetLabData.__init__(self)
113         self.slicemgr = "http://www.planet-lab.jp:12346"
114
115 class ViniData(PlanetLabData):
116     def __init__(self):
117         PlanetLabData.__init__(self)
118         self.slicemgr = "http://www.vini-veritas.net:12346"
119
120 class GpENIData(PlanetLabData):
121     def __init__(self):
122         PlanetLabData.__init__(self)
123         self.slicemgr = "http://198.248.241.100:12346"
124
125 class OpenCirrusData(SfaData):
126     def __init__(self):
127         SfaData.__init__(self)
128         self.registry = "http://198.55.37.29:12345"
129         self.slicemgr = "http://198.55.37.29:12346"
130
131     def refreshRSpec(self):
132         xml = SfaData.getRSpec(self)
133         self.rspec = xml
134
135     def getRSpec(self):
136         if self.rspec is None:
137             self.refreshRSpec()
138         return self.rspec
139     
140     def applyRSpec(self):
141         xml = self.rspec
142         SfaData.applyRSpec(self, xml)