X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=geni%2Fslicemgr.py;h=605daf98a9788bd9a0646bec69d8e1841372052a;hb=d0209f3bb815b102304638338d2e4cca90d7e0cd;hp=85840433364d902f3967102cac789a32b460ac42;hpb=baac692557d96877935ca393669e6181139c2053;p=sfa.git diff --git a/geni/slicemgr.py b/geni/slicemgr.py index 85840433..605daf98 100644 --- a/geni/slicemgr.py +++ b/geni/slicemgr.py @@ -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) @@ -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):