From d742a71a4ee0c580386085afe16d14f08d6d9a13 Mon Sep 17 00:00:00 2001 From: Josh Karlin Date: Wed, 12 May 2010 18:07:31 +0000 Subject: [PATCH] modified verify_site to work with the GeniAPI createsliver --- sfa/managers/aggregate_manager_pl.py | 7 ++++--- sfa/managers/geni_am_pl.py | 21 ++++++++++++++++++- sfa/plc/slices.py | 30 +++++++++++++++++----------- sfa/trust/credential.py | 2 +- 4 files changed, 43 insertions(+), 17 deletions(-) diff --git a/sfa/managers/aggregate_manager_pl.py b/sfa/managers/aggregate_manager_pl.py index c49d841c..76c576bd 100644 --- a/sfa/managers/aggregate_manager_pl.py +++ b/sfa/managers/aggregate_manager_pl.py @@ -45,7 +45,7 @@ def __get_hostnames(nodes): hostnames.append(node.hostname) return hostnames -def create_slice(api, xrn, xml): +def create_slice(api, xrn, xml, reg_objects=None): """ Verify HRN and initialize the slice record in PLC if necessary. """ @@ -58,9 +58,10 @@ def create_slice(api, xrn, xml): registry = api.registries[api.hrn] credential = api.getCredential() site_id, remote_site_id = slices.verify_site(registry, credential, hrn, - peer, sfa_peer) + peer, sfa_peer, reg_objects) + slice = slices.verify_slice(registry, credential, hrn, site_id, - remote_site_id, peer, sfa_peer) + remote_site_id, peer, sfa_peer, reg_objects) network = Network(api) diff --git a/sfa/managers/geni_am_pl.py b/sfa/managers/geni_am_pl.py index 01abcef4..16f6475d 100644 --- a/sfa/managers/geni_am_pl.py +++ b/sfa/managers/geni_am_pl.py @@ -7,6 +7,7 @@ from sfa.util.record import * from sfa.plc.slices import * from sfa.util.sfalogging import * +from sfa.util.record import SfaRecord from lxml import etree from StringIO import StringIO @@ -53,12 +54,30 @@ def ListResources(api, creds, options): def CreateSliver(api, slice_xrn, creds, rspec): + reg_objects = {} + hrn, type = urn_to_hrn(slice_xrn) + + hrn_auth = get_authority(hrn) + + #site = SfaRecord(hrn=hrn_auth, type='authority') + site = {} + site['site_id'] = 0 + site['name'] = 'geni.%s' % slice_xrn + site['enabled'] = True + site['max_slices'] = 100 + site['login_base'] = get_leaf(hrn_auth) + site['abbreviated_name'] = hrn + site['max_slivers'] = 1000 + + reg_objects['site'] = site + manager_base = 'sfa.managers' mgr_type = 'pl' manager_module = manager_base + ".aggregate_manager_%s" % mgr_type manager = __import__(manager_module, fromlist=[manager_base]) - allocated = manager.create_slice(api, slice_xrn, rspec) + allocated = manager.create_slice(api, slice_xrn, rspec, reg_objects) + return allocated def DeleteSliver(api, slice_xrn, creds): diff --git a/sfa/plc/slices.py b/sfa/plc/slices.py index 3c535048..f4977a31 100644 --- a/sfa/plc/slices.py +++ b/sfa/plc/slices.py @@ -168,40 +168,46 @@ class Slices: return sfa_peer - def verify_site(self, registry, credential, slice_hrn, peer, sfa_peer): + def verify_site(self, registry, credential, slice_hrn, peer, sfa_peer, reg_objects=None): authority = get_authority(slice_hrn) authority_urn = hrn_to_urn(authority, 'authority') - site_records = registry.resolve(credential, authority_urn) + + if reg_objects: + site = reg_objects['site'] + else: + site_records = registry.resolve(credential, authority_urn) + site = {} + for site_record in site_records: + if site_record['type'] == 'authority': + site = site_record + if not site: + raise RecordNotFound(authority) - site = {} - for site_record in site_records: - if site_record['type'] == 'authority': - site = site_record - if not site: - raise RecordNotFound(authority) remote_site_id = site.pop('site_id') login_base = get_leaf(authority) sites = self.api.plshell.GetSites(self.api.plauth, login_base) + if not sites: site_id = self.api.plshell.AddSite(self.api.plauth, site) if peer: self.api.plshell.BindObjectToPeer(self.api.plauth, 'site', site_id, peer, remote_site_id) # mark this site as an sfa peer record - if sfa_peer: + if sfa_peer and not reg_objects: peer_dict = {'type': 'authority', 'hrn': authority, 'peer_authority': sfa_peer, 'pointer': site_id} registry.register_peer_object(credential, peer_dict) else: site_id = sites[0]['site_id'] remote_site_id = sites[0]['peer_site_id'] + old_site = sites[0] - #the site is alredy on the remote agg. Let us update(e.g. max_slices field) it with the latest info. - self.sync_site(old_site, site, peer) + #the site is already on the remote agg. Let us update(e.g. max_slices field) it with the latest info. + self.sync_site(old_site, site, peer) return (site_id, remote_site_id) - def verify_slice(self, registry, credential, slice_hrn, site_id, remote_site_id, peer, sfa_peer): + def verify_slice(self, registry, credential, slice_hrn, site_id, remote_site_id, peer, sfa_peer, reg_objects=None): slice = {} slice_record = None authority = get_authority(slice_hrn) diff --git a/sfa/trust/credential.py b/sfa/trust/credential.py index f3fb180b..1a51832e 100644 --- a/sfa/trust/credential.py +++ b/sfa/trust/credential.py @@ -662,7 +662,7 @@ class Credential(object): % (self.xmlsec_path, ref, cert_args, filename)).read() if not verified.strip().startswith("OK"): raise CredentialNotVerifiable("xmlsec1 error: " + verified) - os.remove(filename) +# os.remove(filename) # Verify the parents (delegation) if self.parent: -- 2.47.0