X-Git-Url: http://git.onelab.eu/?p=sface.git;a=blobdiff_plain;f=sface%2Fsfidata.py;h=57a6260eaabede71b8eceb16288f7f935b4a2255;hp=315fddca5b6e52085e32d3ccc2bf7cd77004f7cf;hb=03b467d0bf99663f894553af50265816bd28027e;hpb=c6329bf47bb381a75a23c34c02071e6f7571ba7b diff --git a/sface/sfidata.py b/sface/sfidata.py index 315fddc..57a6260 100644 --- a/sface/sfidata.py +++ b/sface/sfidata.py @@ -1,12 +1,66 @@ import os +import pickle from PyQt4.QtCore import * from PyQt4.QtGui import * from lxml import etree -from sfa.util.record import SfaRecord, SliceRecord, AuthorityRecord -from sfa.rspecs.rspec_parser import parse_rspec +from sfa.util.xrn import hrn_to_urn, urn_to_hrn +from sfa.util.record import SfaRecord, SliceRecord, AuthorityRecord, UserRecord +from sfa.rspecs.rspec import RSpec from sface.config import config +# SfaceRSpec +# temporary, until these references are tracked down and replaced with +# rspec.version + +class SfaceRSpec(RSpec): + def __init__(self, rspec="", version=None, user_options={}): + RSpec.__init__(self, rspec, version, user_options) + + def get_networks(self): + return self.version.get_networks() + + def get_nodes(self, network): + return self.version.get_nodes(network) + + def get_nodes_with_slivers(self, network): + return self.version.get_nodes_with_slivers(network) + + def get_node_element(self, node, network=None): + return self.version.get_node_element(node, network) + + def get_default_sliver_attributes(self, network): + return self.version.get_default_sliver_attributes(network) + + def get_sliver_attributes(self, node, network): + return self.version.get_sliver_attributes(node, network) + + def remove_slivers(self, slivers, network=None, no_dupes=False): + return self.version.remove_slivers(slivers, network, no_dupes) + + #def add_slivers(self, slivers, network=None, sliver_urn=None, no_dupes=False): + # return self.version.add_slivers(slivers, network, sliver_urn, no_dupes) + + def merge_node(self, source_node_tag, network, no_dupes=False): + return self.version.merge_node(source_node_tag, network, no_dupes) + + # sfav1.add_slivers isn't working for us... + def add_slivers(self, slivers, network=None, sliver_urn=None, no_dupes=False): + # add slice name to network tag + network_tags = self.xml.xpath('//network') + if network_tags: + network_tag = network_tags[0] + network_tag.set('slice', urn_to_hrn(sliver_urn)[0]) + + # add slivers + for sliver in slivers: + node_elem = self.get_node_element(sliver['hostname'], network) + if not node_elem: continue + sliver_elem = etree.SubElement(node_elem, 'sliver') + if 'tags' in sliver: + for tag in sliver['tags']: + etree.SubElement(sliver_elem, tag['tagname']).text = value=tag['value'] + class SfiData: def __init__(self): pass @@ -35,6 +89,22 @@ class SfiData: return rec return None + def getUserRecord(self): + rec_file = config.getUserRecordFile() + if os.path.exists(rec_file): + xml = open(rec_file).read() + rec = UserRecord() + rec.load_from_string(xml) + return rec + return None + + def getUserSliceHrns(self): + rec = self.getUserRecord() + if rec: + return rec.get_field("slices") + + return [] + def purgeNonSliceResources(self, rspec): # This can probably go away once the new slice manager is fully # deployed. @@ -53,7 +123,7 @@ class SfiData: rspec_file = config.getSliceRSpecFile() if os.path.exists(rspec_file): xml = open(rspec_file).read() - rspec = parse_rspec(xml) + rspec = SfaceRSpec(rspec=xml) #rspec = parse_rspec(xml) self.purgeNonSliceResources(rspec) @@ -64,5 +134,28 @@ class SfiData: rspec_file = config.getResourcesRSpecFile() if os.path.exists(rspec_file): xml = open(rspec_file).read() - return parse_rspec(xml) + rspec = SfaceRSpec(rspec=xml) #rspec= parse_rspec(xml) + return rspec + return None + + def getSliverStatus(self, slice=None): + if not slice: + slice = config.getSlice() + + filename = config.fullpath(slice+".sliverstatus") + + if os.path.exists(filename): + data = open(filename).read() + return pickle.loads(data) + + return None + + def getSliceMgrVersion(self): + filename = config.fullpath("slicemgr.version") + + if os.path.exists(filename): + data = open(filename).read() + return pickle.loads(data) + return None +