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 add_slivers(self, slivers, network=None, sliver_urn=None, no_dupes=False):
54 # return self.version.add_slivers(slivers, network, sliver_urn, no_dupes)
56 def merge_node(self, source_node_tag, network, no_dupes=False):
57 return self.version.merge_node(source_node_tag, network, no_dupes)
59 # sfav1.add_slivers isn't working for us...
60 def add_slivers_xxx(self, slivers, network=None, sliver_urn=None, no_dupes=False):
61 # add slice name to network tag
62 network_tags = self.xml.xpath('//network')
64 network_tag = network_tags[0]
65 network_tag.set('slice', urn_to_hrn(sliver_urn)[0])
68 for sliver in slivers:
69 node_elem = self.get_node_element(sliver['hostname'], network)
70 if not node_elem: continue
71 sliver_elem = etree.SubElement(node_elem, 'sliver')
73 for tag in sliver['tags']:
74 etree.SubElement(sliver_elem, tag['tagname']).text = value=tag['value']
76 def get_node_sliver_type(self, node, network):
77 node = self.get_node_element(node, network)
81 sliver_types = node.xpath("sliver_type")
82 if len(sliver_types)>0:
83 return sliver_types[0].attrib.get("name", "")
91 def getAuthorityHrns(self, type=None):
93 if os.path.exists(config.getAuthorityListFile()):
94 xml = open(config.getAuthorityListFile()).read()
95 tree = etree.fromstring(xml)
96 records = tree.xpath("//recordlist/record")
98 for record in records:
99 recType = record.attrib.get("type", None)
100 recHrn = record.attrib.get("hrn", None)
101 if (type==None) or (type==recType):
106 def getSliceRecord(self):
107 rec_file = config.getSliceRecordFile()
108 if os.path.exists(rec_file):
109 xml = open(rec_file).read()
111 rec.load_from_string(xml)
115 def getUserRecord(self):
116 rec_file = config.getUserRecordFile()
117 if os.path.exists(rec_file):
118 xml = open(rec_file).read()
120 rec.load_from_string(xml)
124 def getUserSliceHrns(self):
125 rec = self.getUserRecord()
127 slices = rec.get_field("slices")
128 if (type(slices)!=list) or (len(slices)<1):
131 # get_field("slices") is returning [{"text": name}, {"text": name}, ...]
132 if (type(slices[0])==dict):
133 if "text" in slices[0]:
134 slices = [x["text"] for x in slices]
140 def purgeNonSliceResources(self, rspec):
141 # This can probably go away once the new slice manager is fully
143 networks = rspec.get_networks()
144 for network in networks:
145 all_nodes = rspec.get_nodes(network)
146 sliver_nodes = rspec.get_nodes_with_slivers(network)
147 available_nodes = [ node for node in all_nodes if node not in sliver_nodes ]
149 for node in available_nodes:
150 node_elem = rspec.get_node_element(node, network)
151 parent = node_elem.xpath("..")[0]
152 parent.remove(node_elem)
154 def getSliceRSpec(self):
155 rspec_file = config.getSliceRSpecFile()
156 if os.path.exists(rspec_file):
157 xml = open(rspec_file).read()
158 rspec = SfaceRSpec(rspec=xml) #rspec = parse_rspec(xml)
160 #self.purgeNonSliceResources(rspec)
165 def getResourcesRSpec(self):
166 rspec_file = config.getResourcesRSpecFile()
167 if os.path.exists(rspec_file):
168 xml = open(rspec_file).read()
169 rspec = SfaceRSpec(rspec=xml) #rspec= parse_rspec(xml)
173 def getSliverStatus(self, slice=None):
175 slice = config.getSlice()
177 filename = config.fullpath(slice+".sliverstatus")
179 if os.path.exists(filename):
180 data = open(filename).read()
181 return pickle.loads(data)
185 def getSliceMgrVersion(self):
186 filename = config.fullpath("slicemgr.version")
188 if os.path.exists(filename):
189 data = open(filename).read()
190 return pickle.loads(data)