X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=cmdline%2Fsfi.py;h=325a71cd583455d5ba68c9478990793ab801be64;hb=f538f292dac7fb72688f6c51446d78469d5429b4;hp=b6cee1729f9572b07abff42aa620d871c9e14e46;hpb=2e459499f8e2d8c27dec135105032ea621e97591;p=sfa.git diff --git a/cmdline/sfi.py b/cmdline/sfi.py index b6cee172..325a71cd 100755 --- a/cmdline/sfi.py +++ b/cmdline/sfi.py @@ -9,7 +9,7 @@ import tempfile from optparse import OptionParser from geni.util.cert import Keypair, Certificate from geni.util.credential import Credential -from geni.util.geniclient import GeniClient +from geni.util.geniclient import GeniClient, ServerException from geni.util.gid import create_uuid from geni.util.record import GeniRecord @@ -218,7 +218,6 @@ def load_publickey_string(fn): return key_string - # # Generate sub-command parser # @@ -226,9 +225,8 @@ def create_cmd_parser(command, additional_cmdargs = None): cmdargs = {"list": "name", "show": "name", "remove": "name", - "creategid": "hrn publickey_fn", - "add": "name record", - "update": "name record", + "add": "record", + "update": "record", "nodes": "[name]", "slices": "", "resources": "name", @@ -254,14 +252,14 @@ def create_cmd_parser(command, additional_cmdargs = None): % (command, cmdargs[command])) if command in ("nodes", "resources"): parser.add_option("-f", "--format", dest="format",type="choice", - help="display format (dns|ip|hrn|rspec)",default="rspec", - choices=("dns","ip","hrn","rspec")) + help="display format (dns|ip|rspec)",default="rspec", + choices=("dns","ip","rspec")) if command in ("list", "show", "remove"): parser.add_option("-t", "--type", dest="type",type="choice", help="type filter (user|slice|sa|ma|node|aggregate)", choices=("user","slice","sa","ma","node","aggregate", "all"), default="all") - if command in ("show", "list", "nodes", "resources", "creategid"): + if command in ("show", "list", "nodes", "resources"): parser.add_option("-o", "--output", dest="file", help="output XML to file", metavar="FILE", default=None) return parser @@ -363,23 +361,27 @@ def remove(opts, args): auth_cred = get_auth_cred() return registry.remove(auth_cred, opts.type, args[0]) -def creategid(opts, args): - global registry - auth_cred = get_auth_cred() - hrn = args[0] - pkey_string = load_publickey_string(args[1]) - gid = registry.create_gid(auth_cred, hrn, create_uuid(), pkey_string) - if (opts.file is not None): - gid.save_to_file(opts.file, save_parents=True) - else: - print "I created your gid, but you did not ask me to save it" - # add named registry record def add(opts, args): global registry auth_cred = get_auth_cred() rec_file = get_record_file(args[0]) record = load_record_from_file(rec_file) + + # check and see if we need to create a gid for this record. The creator + # of the record signals this by filling in the create_gid, create_gid_hrn, + # and create_gid_key members. + # (note: we'd use an unsigned GID in the record instead, but pyOpenSSL is + # broken and has no way for us to get the key back out of the gid) + geni_info = record.get_geni_info() + if "create_gid" in geni_info: + gid = registry.create_gid(auth_cred, geni_info["create_gid_hrn"], create_uuid(), geni_info["create_gid_key"]) + record.set_gid(gid) + + del geni_info["create_gid"] + del geni_info["create_gid_hrn"] + del geni_info["create_gid_key"] + return registry.register(auth_cred, record) # update named registry entry @@ -390,8 +392,19 @@ def update(opts, args): record = load_record_from_file(rec_file) if record.get_type() == "user": - cred = user_cred - elif record.get_type() in ["sa", "ma", "slice", "node"]: + if record.get_name() == user_cred.get_object_gid().get_hrn(): + cred = user_cred + else: + create = get_auth_cred() + elif record.get_type() in ["slice"]: + try: + cred = get_slice_cred(record.get_name()) + except ServerException, e: + if "PermissionError" in e.args[0]: + cred = get_auth_cred() + else: + raise + elif record.get_type() in ["sa", "ma", "node"]: cred = get_auth_cred() else: raise "unknown record type" + record.get_type() @@ -410,13 +423,13 @@ def nodes(opts, args): context = None else: context = opts.format - results = slicemgr.list_nodes(user_cred, context) + results = slicemgr.list_nodes(user_cred) if opts.format in ['rspec']: display_rspec(results) else: display_list(results) if (opts.file is not None): - rspec = slicemgr.list_nodes(user_cred, 'rspec') + rspec = slicemgr.list_nodes(user_cred) save_rspec_to_file(rspec, opts.file) return @@ -432,7 +445,7 @@ def slices(opts, args): def resources(opts, args): global slicemgr slice_cred = get_slice_cred(args[0]) - result = slicemgr.list_resources(slice_cred, args[0]) + result = slicemgr.get_resources(slice_cred, args[0]) display_rspec(result) if (opts.file is not None): save_rspec_to_file(opts.file, result)