X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fclient%2Fsfaadmin.py;h=b7b45d46e486ee774703d6bf360bd931983a160a;hb=4d368864279e499c7ee1b8b0505112f1abee01a5;hp=df4629fe676de7666783b119cc0e8425ef70ba10;hpb=acf7c0ba147b24dd62948fe1f585e6ad7c91f59f;p=sfa.git diff --git a/sfa/client/sfaadmin.py b/sfa/client/sfaadmin.py index df4629fe..b7b45d46 100755 --- a/sfa/client/sfaadmin.py +++ b/sfa/client/sfaadmin.py @@ -15,7 +15,7 @@ from sfa.trust.certificate import convert_public_key from sfa.client.candidates import Candidates -from sfa.client.common import optparse_listvalue_callback, terminal_render, filter_records +from sfa.client.common import optparse_listvalue_callback, optparse_dictvalue_callback, terminal_render, filter_records pprinter = PrettyPrinter(indent=4) @@ -49,7 +49,7 @@ class RegistryCommands(Commands): pprinter.pprint(version) @args('-x', '--xrn', dest='xrn', metavar='', help='authority to list (hrn/urn - mandatory)') - @args('-t', '--type', dest='type', metavar='', help='object type', default=None) + @args('-t', '--type', dest='type', metavar='', help='object type', default='all') @args('-r', '--recursive', dest='recursive', metavar='', help='list all child records', action='store_true', default=False) @args('-v', '--verbose', dest='verbose', action='store_true', default=False) @@ -84,7 +84,7 @@ class RegistryCommands(Commands): def _record_dict(self, xrn=None, type=None, url=None, description=None, email='', key=None, - slices=[], researchers=[], pis=[]): + slices=[], researchers=[], pis=[], extras={}): record_dict = {} if xrn: if type: @@ -112,6 +112,8 @@ class RegistryCommands(Commands): record_dict['email'] = email if pis: record_dict['pi'] = pis + if extras: + record_dict.update(extras) return record_dict @@ -200,11 +202,12 @@ Users having a GID/PubKey correpondence NOT OK: %s and are: \n%s\n\n"%(len(NOKEY @args('-p', '--pis', dest='pis', metavar='', help='Set/replace Principal Investigators/Project Managers', default='', type="str", action='callback', callback=optparse_listvalue_callback) + @args('-X','--extra',dest='extras',default={},type='str',metavar="", action="callback", callback=optparse_dictvalue_callback, nargs=1, help="set extra/testbed-dependent flags, e.g. --extra enabled=true") def register(self, xrn, type=None, url=None, description=None, key=None, slices='', - pis='', researchers='',email=''): + pis='', researchers='',email='', extras={}): """Create a new Registry record""" record_dict = self._record_dict(xrn=xrn, type=type, url=url, key=key, - slices=slices, researchers=researchers, email=email, pis=pis) + slices=slices, researchers=researchers, email=email, pis=pis, extras=extras) self.api.manager.Register(self.api, record_dict) @@ -222,12 +225,13 @@ Users having a GID/PubKey correpondence NOT OK: %s and are: \n%s\n\n"%(len(NOKEY @args('-p', '--pis', dest='pis', metavar='', help='Set/replace Principal Investigators/Project Managers', default='', type="str", action='callback', callback=optparse_listvalue_callback) + @args('-X','--extra',dest='extras',default={},type='str',metavar="", action="callback", callback=optparse_dictvalue_callback, nargs=1, help="set extra/testbed-dependent flags, e.g. --extra enabled=true") def update(self, xrn, type=None, url=None, description=None, key=None, slices='', - pis='', researchers=''): + pis='', researchers='', extras={}): """Update an existing Registry record""" print 'incoming PIS',pis record_dict = self._record_dict(xrn=xrn, type=type, url=url, description=description, - key=key, slices=slices, researchers=researchers, pis=pis) + key=key, slices=slices, researchers=researchers, pis=pis, extras=extras) self.api.manager.Update(self.api, record_dict) @args('-x', '--xrn', dest='xrn', metavar='', help='object hrn/urn (mandatory)') @@ -256,7 +260,7 @@ Users having a GID/PubKey correpondence NOT OK: %s and are: \n%s\n\n"%(len(NOKEY """Initialize or upgrade the db""" from sfa.storage.dbschema import DBSchema dbschema=DBSchema() - dbschema.init_or_upgrade + dbschema.init_or_upgrade() @args('-a', '--all', dest='all', metavar='', action='store_true', default=False, help='Remove all registry records and all files in %s area' % help_basedir) @@ -354,71 +358,51 @@ class AggregateCommands(Commands): version = self.api.manager.GetVersion(self.api, {}) pprinter.pprint(version) - def slices(self): - """List the running slices at this Aggregate""" - print self.api.manager.ListSlices(self.api, [], {}) - @args('-x', '--xrn', dest='xrn', metavar='', help='object hrn/urn (mandatory)') def status(self, xrn): - """Display the status of a slice or slivers""" - urn = Xrn(xrn, 'slice').get_urn() - status = self.api.manager.SliverStatus(self.api, urn, [], {}) + """Retrieve the status of the slivers belonging to the named slice (Status)""" + urns = [Xrn(xrn, 'slice').get_urn()] + status = self.api.manager.Status(self.api, urns, [], {}) pprinter.pprint(status) - @args('-x', '--xrn', dest='xrn', metavar='', help='object hrn/urn', default=None) @args('-r', '--rspec-version', dest='rspec_version', metavar='', default='GENI', help='version/format of the resulting rspec response') - def resources(self, xrn=None, rspec_version='GENI'): - """Display the available resources at an aggregate -or the resources allocated by a slice""" + def resources(self, rspec_version='GENI'): + """Display the available resources at an aggregate""" options = {'geni_rspec_version': rspec_version} - if xrn: - options['geni_slice_urn'] = Xrn(xrn, 'slice').get_urn() print options resources = self.api.manager.ListResources(self.api, [], options) print resources + @args('-x', '--xrn', dest='xrn', metavar='', help='slice hrn/urn (mandatory)') - @args('-r', '--rspec', dest='rspec', metavar='', help='rspec file (mandatory)') - @args('-u', '--user', dest='user', metavar='', help='hrn/urn of slice user (mandatory)') - @args('-k', '--key', dest='key', metavar='', help="path to user's public key file (mandatory)") - def create(self, xrn, rspec, user, key): + @args('-r', '--rspec', dest='rspec', metavar='', help='rspec file (mandatory)') + def allocate(self, xrn, rspec): """Allocate slivers""" xrn = Xrn(xrn, 'slice') slice_urn=xrn.get_urn() rspec_string = open(rspec).read() - user_xrn = Xrn(user, 'user') - user_urn = user_xrn.get_urn() - user_key_string = open(key).read() - users = [{'urn': user_urn, 'keys': [user_key_string]}] options={} - self.api.manager.CreateSliver(self, slice_urn, [], rspec_string, users, options) + manifest = self.api.manager.Allocate(self.api, slice_urn, [], rspec_string, options) + print manifest - @args('-x', '--xrn', dest='xrn', metavar='', help='slice hrn/urn (mandatory)') - def delete(self, xrn): - """Delete slivers""" - self.api.manager.DeleteSliver(self.api, xrn, [], {}) - - @args('-x', '--xrn', dest='xrn', metavar='', help='slice hrn/urn (mandatory)') - def start(self, xrn): - """Start slivers""" - self.api.manager.start_slice(self.api, xrn, []) @args('-x', '--xrn', dest='xrn', metavar='', help='slice hrn/urn (mandatory)') - def stop(self, xrn): - """Stop slivers""" - self.api.manager.stop_slice(self.api, xrn, []) + def provision(self, xrn): + """Provision slivers""" + xrn = Xrn(xrn, 'slice') + slice_urn=xrn.get_urn() + options={} + manifest = self.api.manager.provision(self.api, [slice_urn], [], options) + print manifest - @args('-x', '--xrn', dest='xrn', metavar='', help='slice hrn/urn (mandatory)') - def reset(self, xrn): - """Reset sliver""" - self.api.manager.reset_slice(self.api, xrn) -# @args('-x', '--xrn', dest='xrn', metavar='', help='object hrn/urn', default=None) -# @args('-r', '--rspec', dest='rspec', metavar='', help='request rspec', default=None) -# def ticket(self, xrn, rspec): -# pass + @args('-x', '--xrn', dest='xrn', metavar='', help='slice hrn/urn (mandatory)') + def delete(self, xrn): + """Delete slivers""" + self.api.manager.Delete(self.api, [xrn], [], {}) +