X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=geni%2Fslicemgr.py;h=605daf98a9788bd9a0646bec69d8e1841372052a;hb=208792d64b1166e32d04698aa442ea6cdabd7613;hp=911833bca8e508c82ac0c05a443a67ea0f8d3947;hpb=cf0261fce639a92424de847e5a605c43d0153f17;p=sfa.git diff --git a/geni/slicemgr.py b/geni/slicemgr.py index 911833bc..605daf98 100644 --- a/geni/slicemgr.py +++ b/geni/slicemgr.py @@ -10,7 +10,7 @@ from geni.util.credential import Credential from geni.util.trustedroot import * from geni.util.excep import * from geni.util.misc import * -from geni.util.config import Config +from geni.util.config import * from geni.util.rspec import Rspec from geni.util.specdict import * from geni.util.storage import SimpleStorage, XmlStorage @@ -51,7 +51,8 @@ class SliceMgr(GeniServer): # Get list of aggregates this sm talks to aggregates_file = self.server_basedir + os.sep + 'aggregates.xml' - self.aggregate_info = XmlStorage(aggregates_file, {'aggregates': {'aggregate': []}} ) + connection_dict = {'hrn': '', 'addr': '', 'port': ''} + self.aggregate_info = XmlStorage(aggregates_file, {'aggregates': {'aggregate': [connection_dict]}} ) self.aggregate_info.load() # Get cached list of nodes (rspec) @@ -88,7 +89,7 @@ class SliceMgr(GeniServer): try: self.credential = Credential(filename = ma_cred_filename) except IOError: - self.credential = self.getCrednetialFromRegistry() + self.credential = self.getCredentialFromRegistry() def getCredentialFromRegistry(self): @@ -118,8 +119,8 @@ class SliceMgr(GeniServer): def connectAggregates(self): """ - Get info about the aggregates available to us from file and create - an xmlrpc connection to each. If any info is invalid, skip it. + Get connection details for the trusted peer aggregates from file and + create a GeniClient connection to each. """ self.aggregates = {} aggregates = self.aggregate_info['aggregates']['aggregate'] @@ -129,6 +130,8 @@ class SliceMgr(GeniServer): for aggregate in aggregates: # create xmlrpc connection using GeniClient hrn, address, port = aggregate['hrn'], aggregate['addr'], aggregate['port'] + if not hrn or not address or not port: + continue url = 'http://%(address)s:%(port)s' % locals() self.aggregates[hrn] = GeniClient(url, self.key_file, self.cert_file) @@ -282,7 +285,7 @@ class SliceMgr(GeniServer): # check if the slice has resources at this hrn slice_resources = self.aggregates[hrn].get_resources(self.credential, slice_hrn) rspec.parseString(slice_resources) - networks.extend({'NetSpec': rspec.getDictsByTagName('NetSpec')}) + networks.extend([{'NetSpec': rspec.getDictsByTagName('NetSpec')}]) # merge all these rspecs into one start_time = int(datetime.datetime.now().strftime("%s")) @@ -307,34 +310,37 @@ class SliceMgr(GeniServer): # save slice state locally # we can assume that spec object has been validated so its safer to # save this instead of the unvalidated rspec the user gave us - rspec = Rspec() + spec = Rspec() tempspec = Rspec() - rspec.parseString(rspec) + spec.parseString(rspec) - self.slices[slice_hrn] = rspec.toxml() + self.slices[slice_hrn] = spec.toxml() self.slices.write() # extract network list from the rspec and create a separate # rspec for each network - slicename = self.hrn_to_plcslicename(slice_hrn) - specDict = rspec.toDict() - start_time = specDict['start_time'] - end_time = specDict['end_time'] - + slicename = hrn_to_pl_slicename(slice_hrn) + specDict = spec.toDict() + if specDict.has_key('Rspec'): specDict = specDict['Rspec'] + if specDict.has_key('start_time'): start_time = specDict['start_time'] + else: start_time = 0 + if specDict.has_key('end_time'): end_time = specDict['end_time'] + else: end_time = 0 + rspecs = {} # only attempt to extract information about the aggregates we know about for hrn in self.aggregates.keys(): netspec = spec.getDictByTagNameValue('NetSpec', hrn) if netspec: # creat a plc dict - resources = {'start_time': star_time, 'end_time': end_time, 'networks': netspec} + resources = {'start_time': start_time, 'end_time': end_time, 'networks': netspec} resourceDict = {'Rspec': resources} tempspec.parseDict(resourceDict) rspecs[hrn] = tempspec.toxml() # notify the aggregates - for hrn in self.rspecs.keys(): - self.aggregates[hrn].createSlice(self.credential, rspecs[hrn]) + for hrn in rspecs.keys(): + self.aggregates[hrn].create_slice(self.credential, slice_hrn, rspecs[hrn]) return 1 @@ -408,9 +414,12 @@ class SliceMgr(GeniServer): self.decode_authentication(cred, 'listslices') return self.getSlices() - def get_resources(self, cred, hrn): + def get_resources(self, cred, hrn=None): self.decode_authentication(cred, 'listnodes') - return self.getResources(hrn) + if not hrn: + return self.getNodes() + else: + return self.getResources(hrn) def get_ticket(self, cred, hrn, rspec): self.decode_authentication(cred, 'getticket') @@ -421,7 +430,7 @@ class SliceMgr(GeniServer): return self.getPolicy() def create_slice(self, cred, hrn, rspec): - self.decode_authentication(cred, 'creatslice') + self.decode_authentication(cred, 'createslice') return self.createSlice(cred, hrn, rspec) def delete_slice(self, cred, hrn):