From: Sandrine Avakian Date: Thu, 15 Dec 2011 15:30:45 +0000 (+0100) Subject: Merge branch 'master' into senslab2 X-Git-Tag: sfa-2.1-24~3^2~255 X-Git-Url: http://git.onelab.eu/?p=sfa.git;a=commitdiff_plain;h=02a4a59a4a49183ec8c631cc03243b97f4602d50 Merge branch 'master' into senslab2 Conflicts: sfa/client/sfi.py sfa/methods/CreateSliver.py sfa/plc/plslices.py --- 02a4a59a4a49183ec8c631cc03243b97f4602d50 diff --cc sfa/client/sfi.py index b0fa53ca,c5eadc5b..89714353 mode 100755,100644..100644 --- a/sfa/client/sfi.py +++ b/sfa/client/sfi.py @@@ -1033,117 -904,109 +904,110 @@@ or with an slice hrn, shows currently p rspec = RSpec(rspec) rspec.filter({'component_manager_id': server_version['urn']}) rspec = RSpecConverter.to_pg_rspec(rspec.toxml(), content_type='request') - creds = [slice_cred] else: + print >>sys.stderr, "\r\n \r\n \r\n WOOOOOO" users = sfa_users_arg(user_records, slice_record) - creds = [slice_cred] - if delegated_cred: - creds.append(delegated_cred) - call_args = [slice_urn, creds, rspec, users] - if self.server_supports_options_arg(server): - options = {'call_id': unique_call_id()} - call_args.append(options) - print>>sys.stderr, " \r\n SFI.PY create user" ,users - result = server.CreateSliver(*call_args) + + # do not append users, keys, or slice tags. Anything + # not contained in this request will be removed from the slice + + # CreateSliver has supported the options argument for a while now so it should + # be safe to assume this server support it + api_options = {} + api_options ['append'] = False + api_options ['call_id'] = unique_call_id() + + result = server.CreateSliver(slice_urn, creds, rspec, users, *self.ois(server, api_options)) value = ReturnValue.get_value(result) - if opts.file is None: + if options.file is None: print value else: - save_rspec_to_file (value, opts.file) + save_rspec_to_file (value, options.file) return value - # get a ticket for the specified slice - def get_ticket(self, opts, args): - slice_hrn, rspec_path = args[0], args[1] - slice_urn = hrn_to_urn(slice_hrn, 'slice') - user_cred = self.get_user_cred() - slice_cred = self.get_slice_cred(slice_hrn).save_to_string(save_parents=True) + def delete(self, options, args): + """ + delete named slice (DeleteSliver) + """ + server = self.sliceapi() + + # slice urn + slice_hrn = args[0] + slice_urn = hrn_to_urn(slice_hrn, 'slice') + + # creds + slice_cred = self.slice_credential_string(slice_hrn) creds = [slice_cred] - if opts.delegate: + if options.delegate: delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)) creds.append(delegated_cred) - rspec_file = self.get_rspec_file(rspec_path) - rspec = open(rspec_file).read() - server = self.server_proxy_from_opts(opts) - ticket_string = server.GetTicket(slice_urn, creds, rspec, []) - file = os.path.join(self.options.sfi_dir, get_leaf(slice_hrn) + ".ticket") - self.logger.info("writing ticket to %s"%file) - ticket = SfaTicket(string=ticket_string) - ticket.save_to_file(filename=file, save_parents=True) - - def redeem_ticket(self, opts, args): - ticket_file = args[0] - - # get slice hrn from the ticket - # use this to get the right slice credential - ticket = SfaTicket(filename=ticket_file) - ticket.decode() - slice_hrn = ticket.gidObject.get_hrn() - slice_urn = hrn_to_urn(slice_hrn, 'slice') - #slice_hrn = ticket.attributes['slivers'][0]['hrn'] - user_cred = self.get_user_cred() - slice_cred = self.get_slice_cred(slice_hrn).save_to_string(save_parents=True) - - # get a list of node hostnames from the RSpec - tree = etree.parse(StringIO(ticket.rspec)) - root = tree.getroot() - hostnames = root.xpath("./network/site/node/hostname/text()") - # create an xmlrpc connection to the component manager at each of these - # components and gall redeem_ticket - connections = {} - for hostname in hostnames: - try: - self.logger.info("Calling redeem_ticket at %(hostname)s " % locals()) - server = self.server_proxy(hostname, CM_PORT, self.key_file, \ - self.cert_file, self.options.debug) - server.RedeemTicket(ticket.save_to_string(save_parents=True), slice_cred) - self.logger.info("Success") - except socket.gaierror: - self.logger.error("redeem_ticket failed: Component Manager not accepting requests") - except Exception, e: - self.logger.log_exc(e.message) - return - - # delete named slice - def delete(self, opts, args): + # options and call_id when supported + api_options = {} + api_options ['call_id'] = unique_call_id() + result = server.DeleteSliver(slice_urn, creds, *self.ois(server, api_options ) ) + # xxx no ReturnValue ?? + return result + + def status(self, options, args): + """ + retrieve slice status (SliverStatus) + """ + server = self.sliceapi() + + # slice urn slice_hrn = args[0] slice_urn = hrn_to_urn(slice_hrn, 'slice') - slice_cred = self.get_slice_cred(slice_hrn).save_to_string(save_parents=True) + + # creds + slice_cred = self.slice_credential_string(slice_hrn) creds = [slice_cred] - if opts.delegate: + if options.delegate: delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)) creds.append(delegated_cred) - server = self.server_proxy_from_opts(opts) - call_args = [slice_urn, creds] - if self.server_supports_options_arg(server): - options = {'call_id': unique_call_id()} - call_args.append(options) - return server.DeleteSliver(*call_args) - - # start named slice - def start(self, opts, args): + + # options and call_id when supported + api_options = {} + api_options['call_id']=unique_call_id() + result = server.SliverStatus(slice_urn, creds, *self.ois(server,api_options)) + value = ReturnValue.get_value(result) + print value + if options.file: + save_variable_to_file(value, options.file, options.fileformat) + + def start(self, options, args): + """ + start named slice (Start) + """ + server = self.sliceapi() + + # the slice urn slice_hrn = args[0] slice_urn = hrn_to_urn(slice_hrn, 'slice') - slice_cred = self.get_slice_cred(args[0]).save_to_string(save_parents=True) + + # cred + slice_cred = self.slice_credential_string(args[0]) creds = [slice_cred] - if opts.delegate: + if options.delegate: delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)) creds.append(delegated_cred) - server = self.server_proxy_from_opts(opts) + # xxx Thierry - does this not need an api_options as well ? return server.Start(slice_urn, creds) - # stop named slice - def stop(self, opts, args): + def stop(self, options, args): + """ + stop named slice (Stop) + """ + server = self.sliceapi() + # slice urn slice_hrn = args[0] slice_urn = hrn_to_urn(slice_hrn, 'slice') - slice_cred = self.get_slice_cred(args[0]).save_to_string(save_parents=True) + # cred + slice_cred = self.slice_credential_string(args[0]) creds = [slice_cred] - if opts.delegate: + if options.delegate: delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)) creds.append(delegated_cred) - server = self.server_proxy_from_opts(opts) return server.Stop(slice_urn, creds) # reset named slice diff --cc sfa/managers/driver.py index b12cd710,f48964f1..17358cfc --- a/sfa/managers/driver.py +++ b/sfa/managers/driver.py @@@ -2,10 -2,16 +2,16 @@@ # an attempt to document what a driver class should provide, # and implement reasonable defaults # - +import sys class Driver: - def __init__ (self): pass + def __init__ (self, config): + # this is the hrn attached to the running server + self.hrn = config.SFA_INTERFACE_HRN + + ######################################## + ########## registry oriented + ######################################## # redefine this if you want to check again records # when running GetCredential @@@ -18,8 -24,11 +24,12 @@@ # after looking up the sfa db, we wish to be able to display # testbed-specific info as well # this at minima should fill in the 'researcher' field for slice records + # as this information is then used to compute rights + # roadmap: there is an intention to redesign the SFA database so as to clear up + # this constraint, based on the principle that SFA should not rely on the + # testbed database to perform such a core operation (i.e. getting rights right) def augment_records_with_testbed_info (self, sfa_records): + print >>sys.stderr, " \r\n \r\n DRIVER.PY augment_records_with_testbed_info sfa_records ",sfa_records return sfa_records # incoming record, as provided by the client to the Register API call diff --cc sfa/methods/CreateSliver.py index 8a325f2a,0e944ac7..b28d1a53 --- a/sfa/methods/CreateSliver.py +++ b/sfa/methods/CreateSliver.py @@@ -2,11 -2,8 +2,9 @@@ from sfa.util.faults import SfaInvalidA from sfa.util.xrn import urn_to_hrn from sfa.util.method import Method from sfa.util.sfatablesRuntime import run_sfatables +import sys from sfa.trust.credential import Credential - from sfa.storage.parameter import Parameter, Mixed - from sfa.rspecs.rspec import RSpec class CreateSliver(Method): diff --cc sfa/plc/plslices.py index dc317935,db27f3b8..ae9a0796 --- a/sfa/plc/plslices.py +++ b/sfa/plc/plslices.py @@@ -1,12 -1,15 +1,16 @@@ from types import StringTypes from collections import defaultdict +import sys - from sfa.util.xrn import get_leaf, get_authority, urn_to_hrn - from sfa.util.plxrn import hrn_to_pl_slicename - from sfa.util.policy import Policy + + from sfa.util.sfalogging import logger + from sfa.util.xrn import Xrn, get_leaf, get_authority, urn_to_hrn + #from sfa.util.policy import Policy + from sfa.util.xrn import Xrn + from sfa.rspecs.rspec import RSpec + from sfa.plc.vlink import VLink - from sfa.util.xrn import Xrn + from sfa.util.plxrn import hrn_to_pl_slicename MAXINT = 2L**31-1 @@@ -135,19 -131,19 +132,19 @@@ class PlSlices # slice belongs to out local plc or a myplc peer. We will assume it # is a local site, unless we find out otherwise peer = None - print>>sys.stderr, " \r\n \r\n \t slices.py get_peer slice_authority " - ++ print>>sys.stderr, " \r\n \r\n \tplslices.py get_peer slice_authority " # get this slice's authority (site) slice_authority = get_authority(hrn) # get this site's authority (sfa root authority or sub authority) site_authority = get_authority(slice_authority).lower() - print>>sys.stderr, " \r\n \r\n \t slices.py get_peer slice_authority %s site_authority %s" %(slice_authority,site_authority) - ++ print>>sys.stderr, " \r\n \r\n \tplslices.py get_peer slice_authority %s site_authority %s" %(slice_authority,site_authority) # check if we are already peered with this site_authority, if so - #peers = self.api.driver.GetPeers({}, ['peer_id', 'peername', 'shortname', 'hrn_root']) - #for peer_record in peers: - #names = [name.lower() for name in peer_record.values() if isinstance(name, StringTypes)] - #if site_authority in names: - #peer = peer_record + peers = self.driver.GetPeers({}, ['peer_id', 'peername', 'shortname', 'hrn_root']) + for peer_record in peers: + names = [name.lower() for name in peer_record.values() if isinstance(name, StringTypes)] + if site_authority in names: + peer = peer_record return peer