import os import pickle from PyQt4.QtCore import * from PyQt4.QtGui import * from lxml import etree from sfa.util.xrn import hrn_to_urn, urn_to_hrn from sfa.storage.record import SfaRecord, SliceRecord, AuthorityRecord, UserRecord from sfa.rspecs.rspec import RSpec from sface.config import config class SfiData: def __init__(self): pass def getAuthorityHrns(self, type=None): names = [] if os.path.exists(config.getAuthorityListFile()): xml = open(config.getAuthorityListFile()).read() tree = etree.fromstring(xml) records = tree.xpath("//recordlist/record") for record in records: recType = record.attrib.get("type", None) recHrn = record.attrib.get("hrn", None) if (type==None) or (type==recType): names.append(recHrn) return names def getSliceRecord(self): rec_file = config.getSliceRecordFile() if os.path.exists(rec_file): xml = open(rec_file).read() rec = SliceRecord() rec.load_from_string(xml) 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: slices = rec.get_field("slices") if (type(slices)!=list) or (len(slices)<1): return [] # get_field("slices") is returning [{"text": name}, {"text": name}, ...] if (type(slices[0])==dict): if "text" in slices[0]: slices = [x["text"] for x in slices] return slices return [] def purgeNonSliceResources(self, rspec): # This can probably go away once the new slice manager is fully # deployed. networks = rspec.get_networks() for network in networks: all_nodes = rspec.get_nodes(network) sliver_nodes = rspec.get_nodes_with_slivers(network) available_nodes = [ node for node in all_nodes if node not in sliver_nodes ] for node in available_nodes: node_elem = rspec.get_node_element(node, network) parent = node_elem.xpath("..")[0] parent.remove(node_elem) def getSliceRSpec(self): rspec_file = config.getSliceRSpecFile() if os.path.exists(rspec_file): xml = open(rspec_file).read() rspec = RSpec(rspec=xml) #rspec = parse_rspec(xml) #self.purgeNonSliceResources(rspec) return rspec return None def getResourcesRSpec(self): rspec_file = config.getResourcesRSpecFile() if os.path.exists(rspec_file): xml = open(rspec_file).read() rspec = RSpec(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