88d2b13ae71ce61a43ead0e5bce107548ed265ef
[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     authority = "plc.princeton"
8     user = "plc.princeton.acb"
9     slice = "plc.princeton.sapan"
10
11     def __init__(self):
12         self.registry = None
13         self.slicemgr = None
14
15     def getAuthority(self):
16         return SfaData.authority
17
18     def getUser(self):
19         return SfaData.user
20
21     def setUser(self, user):
22         SfaData.user = user
23
24         # Should probably get authority from user record instead...
25         a = SfaData.user.split('.')
26         SfaData.authority = '.'.join(a[:len(a)-1])
27
28     def getSlice(self):
29         return SfaData.slice
30
31     def setSlice(self, slice):
32         SfaData.slice = slice
33
34     def getRecord(self, hrn):
35         text = Popen(["sfi.py", "-u", self.getUser(), "-a", 
36                       self.getAuthority(), "-r", self.registry, 
37                       "-s", self.slicemgr, "show", hrn], 
38                      stdout=PIPE).communicate()[0]
39         return text
40
41     def listChildren(self, hrn):
42         children = []
43         text = Popen(["sfi.py", "-u", self.getUser(), "-a", 
44                       self.getAuthority(), "-r", self.registry, 
45                       "-s", self.slicemgr, "list", hrn], 
46                      stdout=PIPE).communicate()[0]
47         lines = text.split('\n')
48         for line in lines:
49             if line:
50                 (hrn, kind) = line.split() 
51                 children.append((hrn, kind))
52
53         return children
54
55     def getRSpec(self):
56         slice = self.getSlice()
57         # Write RSpec to file for testing.
58         filename = os.path.expanduser("~/.sfi/" + slice + ".rspec")
59         os.remove(filename)
60         call(["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(), 
61               "-r", self.registry, "-s", self.slicemgr, "resources", 
62               "-o", slice, slice])
63         f = open(filename, "r")
64         xml = f.read()
65         f.close()
66         return xml
67
68     def applyRSpec(self, xml):
69         slice = self.getSlice()
70         filename = os.path.expanduser("~/.sfi/" + slice + ".rspec")
71         os.remove(filename)
72         f = open(filename, "w")
73         f.write(xml)
74         f.close()
75         call(["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(), 
76               "-r", self.registry, "-s", self.slicemgr, "create", 
77               slice, filename])
78
79 class PlanetLabData(SfaData):
80     def __init__(self):
81         SfaData.__init__(self)
82         self.registry = "http://www.planet-lab.org:12345"
83         self.slicemgr = "http://www.planet-lab.org:12346"
84         self.rspec = None
85
86     def refreshRSpec(self):
87         xml = SfaData.getRSpec(self)
88         self.rspec = RSpec(xml)
89
90     def getRSpec(self):
91         if self.rspec is None:
92             self.refreshRSpec()
93         return self.rspec
94     
95     def applyRSpec(self):
96         xml = self.rspec.toxml()
97         SfaData.applyRSpec(self, xml)
98
99 class PLEData(PlanetLabData):
100     def __init__(self):
101         PlanetLabData.__init__(self)
102         self.slicemgr = "http://www.planet-lab.eu:12346"
103
104 class PLJData(PlanetLabData):
105     def __init__(self):
106         PlanetLabData.__init__(self)
107         self.slicemgr = "http://www.planet-lab.jp:12346"
108
109 class ViniData(PlanetLabData):
110     def __init__(self):
111         PlanetLabData.__init__(self)
112         self.slicemgr = "http://www.vini-veritas.net:12346"
113
114 class GpENIData(PlanetLabData):
115     def __init__(self):
116         PlanetLabData.__init__(self)
117         self.slicemgr = "http://198.248.241.100:12346"
118
119 class OpenCirrusData(SfaData):
120     def __init__(self):
121         SfaData.__init__(self)
122         self.registry = "http://198.55.37.29:12345"
123         self.slicemgr = "http://198.55.37.29:12346"
124
125     def refreshRSpec(self):
126         xml = SfaData.getRSpec(self)
127         self.rspec = xml
128
129     def getRSpec(self):
130         if self.rspec is None:
131             self.refreshRSpec()
132         return self.rspec
133     
134     def applyRSpec(self):
135         xml = self.rspec
136         SfaData.applyRSpec(self, xml)