3 from PyQt4.QtCore import *
4 from PyQt4.QtGui import *
7 from sfa.util.xrn import hrn_to_urn, urn_to_hrn
8 from sfa.util.record import SfaRecord, SliceRecord, AuthorityRecord, UserRecord
9 from sfa.rspecs.rspec import RSpec
10 from sface.config import config
13 # temporary, until these references are tracked down and replaced with
16 class SfaceRSpec(RSpec):
17 def __init__(self, rspec="", version=None, user_options={}):
18 RSpec.__init__(self, rspec, version, user_options)
20 def get_networks(self):
21 return self.version.get_networks()
23 def get_nodes(self, network):
24 return self.version.get_nodes(network)
26 def get_nodes_with_slivers(self, network):
27 return self.version.get_nodes_with_slivers(network)
29 def get_node_element(self, node, network=None):
30 return self.version.get_node_element(node, network)
32 def get_default_sliver_attributes(self, network):
33 return self.version.get_default_sliver_attributes(network)
35 def get_sliver_attributes(self, node, network):
36 return self.version.get_sliver_attributes(node, network)
38 def remove_slivers(self, slivers, network=None, no_dupes=False):
39 return self.version.remove_slivers(slivers, network, no_dupes)
41 def add_default_sliver_attribute(self, name, value, network=None):
42 self.version.add_default_sliver_attribute(name, value, network)
44 def add_sliver_attribute(self, hostname, name, value, network=None):
45 self.version.add_sliver_attribute(hostname, name, value, network)
47 def remove_default_sliver_attribute(self, name, value, network=None):
48 self.version.remove_default_sliver_attribute(name, value, network)
50 def remove_sliver_attribute(self, hostname, name, value, network=None):
51 self.version.remove_sliver_attribute(hostname, name, value, network)
53 def merge_node(self, source_node_tag, network, no_dupes=False):
54 return self.version.merge_node(source_node_tag, network, no_dupes)
56 def get_node_sliver_type(self, node, network):
57 node = self.get_node_element(node, network)
61 sliver_types = node.xpath("sliver_type")
62 if len(sliver_types)>0:
63 return sliver_types[0].attrib.get("name", "")
71 def getAuthorityHrns(self, type=None):
73 if os.path.exists(config.getAuthorityListFile()):
74 xml = open(config.getAuthorityListFile()).read()
75 tree = etree.fromstring(xml)
76 records = tree.xpath("//recordlist/record")
78 for record in records:
79 recType = record.attrib.get("type", None)
80 recHrn = record.attrib.get("hrn", None)
81 if (type==None) or (type==recType):
86 def getSliceRecord(self):
87 rec_file = config.getSliceRecordFile()
88 if os.path.exists(rec_file):
89 xml = open(rec_file).read()
91 rec.load_from_string(xml)
95 def getUserRecord(self):
96 rec_file = config.getUserRecordFile()
97 if os.path.exists(rec_file):
98 xml = open(rec_file).read()
100 rec.load_from_string(xml)
104 def getUserSliceHrns(self):
105 rec = self.getUserRecord()
107 slices = rec.get_field("slices")
108 if (type(slices)!=list) or (len(slices)<1):
111 # get_field("slices") is returning [{"text": name}, {"text": name}, ...]
112 if (type(slices[0])==dict):
113 if "text" in slices[0]:
114 slices = [x["text"] for x in slices]
120 def purgeNonSliceResources(self, rspec):
121 # This can probably go away once the new slice manager is fully
123 networks = rspec.get_networks()
124 for network in networks:
125 all_nodes = rspec.get_nodes(network)
126 sliver_nodes = rspec.get_nodes_with_slivers(network)
127 available_nodes = [ node for node in all_nodes if node not in sliver_nodes ]
129 for node in available_nodes:
130 node_elem = rspec.get_node_element(node, network)
131 parent = node_elem.xpath("..")[0]
132 parent.remove(node_elem)
134 def getSliceRSpec(self):
135 rspec_file = config.getSliceRSpecFile()
136 if os.path.exists(rspec_file):
137 xml = open(rspec_file).read()
138 rspec = SfaceRSpec(rspec=xml) #rspec = parse_rspec(xml)
140 #self.purgeNonSliceResources(rspec)
145 def getResourcesRSpec(self):
146 rspec_file = config.getResourcesRSpecFile()
147 if os.path.exists(rspec_file):
148 xml = open(rspec_file).read()
149 rspec = SfaceRSpec(rspec=xml) #rspec= parse_rspec(xml)
153 def getSliverStatus(self, slice=None):
155 slice = config.getSlice()
157 filename = config.fullpath(slice+".sliverstatus")
159 if os.path.exists(filename):
160 data = open(filename).read()
161 return pickle.loads(data)
165 def getSliceMgrVersion(self):
166 filename = config.fullpath("slicemgr.version")
168 if os.path.exists(filename):
169 data = open(filename).read()
170 return pickle.loads(data)