From 2ec38cfcf5ff1299c690c006bc09d8e56edac14f Mon Sep 17 00:00:00 2001 From: Josh Karlin Date: Fri, 26 Mar 2010 16:37:45 +0000 Subject: [PATCH] Added CreateSliver --- sfa/client/sfi.py | 26 ++++++++++++++++++-------- sfa/managers/geni_am_pl.py | 16 +++++++++++++--- sfa/methods/GetVersion.py | 2 +- sfa/methods/__init__.py | 1 + sfa/trust/rights.py | 6 +++--- tests/testGeniAM.py | 0 6 files changed, 36 insertions(+), 15 deletions(-) create mode 100644 tests/testGeniAM.py diff --git a/sfa/client/sfi.py b/sfa/client/sfi.py index 92fe1ff4..ed8b2500 100755 --- a/sfa/client/sfi.py +++ b/sfa/client/sfi.py @@ -152,8 +152,8 @@ class Sfi: "stop": "name", "delegate": "name", "GetVersion": "name", - "ListResources": "name" - + "ListResources": "name", + "CreateSliver": "name" } if additional_cmdargs: @@ -912,17 +912,27 @@ class Sfi: user_cred = self.get_user_cred().save_to_string(save_parents=True) server = self.geni_am call_options = {'geni_compressed': True} + xrn = None + cred = user_cred if args: - urn = args[0] - else: - urn = None - if urn: - call_options['geni_slice_urn'] = urn + xrn = args[0] + cred = self.get_slice_cred(xrn).save_to_string(save_parents=True) + + if xrn: + call_options['geni_slice_urn'] = xrn rspec = server.ListResources([user_cred], call_options) rspec = zlib.decompress(rspec.decode('base64')) print rspec - + + def CreateSliver(self,opts,args): + slice_xrn = args[0] + user_cred = self.get_user_cred() + slice_cred = self.get_slice_cred(slice_xrn).save_to_string(save_parents=True) + rspec_file = self.get_rspec_file(args[1]) + rspec = open(rspec_file).read() + server = self.geni_am + return server.CreateSliver(slice_xrn, [slice_cred], rspec) # # Main: parse arguments and dispatch to command # diff --git a/sfa/managers/geni_am_pl.py b/sfa/managers/geni_am_pl.py index f144430e..87a159e9 100644 --- a/sfa/managers/geni_am_pl.py +++ b/sfa/managers/geni_am_pl.py @@ -27,19 +27,20 @@ def GetVersion(): version['geni_stitching'] = False return version + def ListResources(api, creds, options): manager_base = 'sfa.managers' mgr_type = 'pl' manager_module = manager_base + ".aggregate_manager_%s" % mgr_type manager = __import__(manager_module, fromlist=[manager_base]) - hrn = None + xrn = None if options.has_key('geni_slice_urn'): xrn = options['geni_slice_urn'] - hrn, type = urn_to_hrn(xrn) + api.logger.info(xrn) - rspec = manager.get_rspec(api, hrn, None) + rspec = manager.get_rspec(api, xrn, None) #outgoing_rules = SFATablesRules('OUTGOING') if options.has_key('geni_compressed') and options['geni_compressed'] == True: @@ -48,3 +49,12 @@ def ListResources(api, creds, options): return rspec +def CreateSlice(api, slice_xrn, creds, rspec): + 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) + return allocated + diff --git a/sfa/methods/GetVersion.py b/sfa/methods/GetVersion.py index c5a41f60..afead1d8 100644 --- a/sfa/methods/GetVersion.py +++ b/sfa/methods/GetVersion.py @@ -16,7 +16,7 @@ class GetVersion(Method): returns = Parameter(dict, "Version information") def call(self): - self.api.logger.info("interface: %s" % (self.name)) + self.api.logger.info("interface: %s\tmethod-name: %s" % (self.api.interface, self.name)) manager_base = 'sfa.managers' diff --git a/sfa/methods/__init__.py b/sfa/methods/__init__.py index 5334d44e..ab9fa1f7 100644 --- a/sfa/methods/__init__.py +++ b/sfa/methods/__init__.py @@ -28,4 +28,5 @@ update remove_peer_object GetVersion ListResources +CreateSliver """.split() diff --git a/sfa/trust/rights.py b/sfa/trust/rights.py index ab99b44f..922ace71 100644 --- a/sfa/trust/rights.py +++ b/sfa/trust/rights.py @@ -19,10 +19,10 @@ privilege_table = {"authority": ["register", "remove", "update", "resolve", "lis "resolve": ["resolve", "list", "getcredential", "listresources", "getversion"], "sa": ["getticket", "redeemslice", "redeemticket", "createslice", "deleteslice", "updateslice", "getsliceresources", "getticket", "loanresources", "stopslice", "startslice", - "deleteslice", "resetslice", "listslices", "listnodes", "getpolicy"], - "embed": ["getticket", "redeemslice", "redeemticket", "createslice", "deleteslice", "updateslice", "getsliceresources"], + "deleteslice", "resetslice", "listslices", "listnodes", "getpolicy", "createsliver"], + "embed": ["getticket", "redeemslice", "redeemticket", "createslice", "createsliver", "deleteslice", "updateslice", "getsliceresources"], "bind": ["getticket", "loanresources", "redeemticket"], - "control": ["updateslice", "createslice", "stopslice", "startslice", "deleteslice", "resetslice", "getsliceresources", "getgids"], + "control": ["updateslice", "createslice", "createsliver", "stopslice", "startslice", "deleteslice", "resetslice", "getsliceresources", "getgids"], "info": ["listslices", "listnodes", "getpolicy"], "ma": ["setbootstate", "getbootstate", "reboot", "getgids", "gettrustedcerts"], "operator": ["gettrustedcerts", "getgids"]} diff --git a/tests/testGeniAM.py b/tests/testGeniAM.py new file mode 100644 index 00000000..e69de29b -- 2.43.0