b99c56ecf019f471fe4aa03fd4423e85d96bca6a
[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.iias"
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         call(["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(), 
58               "-r", self.registry, "-s", self.slicemgr, "resources", 
59               "-o", slice, slice])
60         filename = os.path.expanduser("~/.sfi/" + slice + ".rspec")
61         f = open(filename, "r")
62         xml = f.read()
63         f.close()
64         return xml
65
66     def applyRSpec(self, xml):
67         slice = self.getSlice()
68         filename = os.path.expanduser("~/.sfi/" + slice + ".rspec")
69         f = open(filename, "w")
70         f.write(xml)
71         f.close()
72         call(["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(), 
73               "-r", self.registry, "-s", self.slicemgr, "create", 
74               slice, filename])
75
76 class ViniData(SfaData):
77     def __init__(self):
78         SfaData.__init__(self)
79         self.registry = "http://www.planet-lab.org:12345"
80         self.slicemgr = "http://www.vini-veritas.net:12346"
81         self.rspec = None
82
83     def refreshRSpec(self):
84         xml = SfaData.getRSpec(self)
85         self.rspec = RSpec(xml)
86
87     def getRSpec(self):
88         if self.rspec is None:
89             self.refreshRSpec()
90         return self.rspec
91     
92     def applyRSpec(self):
93         xml = self.rspec.toxml()
94         SfaData.applyRSpec(self, xml)
95
96 class PlanetLabData(SfaData):
97     def __init__(self):
98         SfaData.__init__(self)
99         self.registry = "http://www.planet-lab.org:12345"
100         self.slicemgr = "http://www.planet-lab.org:12346"
101         self.rspec = None
102
103     def refreshRSpec(self):
104         xml = SfaData.getRSpec(self)
105         self.rspec = RSpec(xml)
106
107     def getRSpec(self):
108         if self.rspec is None:
109             self.refreshRSpec()
110         return self.rspec
111     
112     def applyRSpec(self):
113         xml = self.rspec.toxml()
114         SfaData.applyRSpec(self, xml)
115
116 class OpenCirrusData(SfaData):
117     def __init__(self):
118         SfaData.__init__(self)
119         self.registry = "http://www.planet-lab.org:12345"
120         self.slicemgr = "http://www.planet-lab.org:12346"
121