add clarifying error messages that offer a solution.
[sfa.git] / cmdline / sfi.py
index cdeac7b..cf83d31 100755 (executable)
@@ -11,10 +11,12 @@ from geni.util.cert import Keypair, Certificate
 from geni.util.credential import Credential
 from geni.util.geniclient import GeniClient, ServerException
 from geni.util.gid import create_uuid
-from geni.util.record import GeniRecord
+from geni.util.record import *
 from geni.util.rspec import Rspec
 from types import StringTypes, ListType
 
+# xxx todo xxx auto-load ~/.sfi/sfi_config
+
 sfi_dir = os.path.expanduser("~/.sfi/")
 slicemgr = None
 registry = None
@@ -38,6 +40,10 @@ def set_servers(options):
       sm_url = os.environ["SFI_SM"]
    else:
       print "No Known Slice Manager"
+      print "Try:"
+      print "    export SFI_SM=http://your.slicemanager.url:12347/"
+      print "Or add this argument to the command line:"
+      print "    --slicemgr=http://your.slicemanager.url:12347/"
       sys.exit(1)
 
    # Set Registry URL
@@ -47,6 +53,10 @@ def set_servers(options):
       reg_url = os.environ["SFI_REGISTRY"]
    else:
       print "No Known Registry Server"
+      print "Try:"
+      print "    export SFI_REGISTRY=http://your.slicemanager.url:12345/"
+      print "Or add this argument to the command line:"
+      print "    --registry=http://your.slicemanager.url:12345/"
       sys.exit(1)
 
    if options.verbose :
@@ -60,6 +70,10 @@ def set_servers(options):
       user = os.environ["SFI_USER"]
    else:
       print "No Known User Name"
+      print "Try:"
+      print "    export SFI_USER=$SFI_AUTH.username"
+      print "Or add this argument to the command line:"
+      print "    --user=username"
       sys.exit(1)
 
    # Set authority HRN
@@ -255,7 +269,6 @@ def load_publickey_string(fn):
        os.remove(outfn)
 
    return key_string
-
 #
 # Generate sub-command parser
 #
@@ -366,6 +379,7 @@ def main():
    try:
       dispatch(command, cmd_opts, cmd_args)
    except KeyError:
+      raise 
       print "Command not found:", command
       sys.exit(1)
 
@@ -385,7 +399,8 @@ def list(opts, args):
    # filter on person, slice, site, node, etc.  
    # THis really should be in the filter_records funct def comment...
    list = filter_records(opts.type, list)
-   display_records(list)
+   for record in list:
+       print "%s (%s)" % (record['hrn'], record['type'])     
    if opts.file:
        save_records_to_file(opts.file, list)
    return
@@ -398,7 +413,19 @@ def show(opts, args):
    records = filter_records(opts.type, records)
    if not records:
       print "No record of type", opts.type
-   display_records(records, True)
+   for record in records:
+       if record['type'] in ['user']:
+           record = UserRecord(dict = record)
+       elif record['type'] in ['slice']:
+           record = SliceRecord(dict = record)
+       elif record['type'] in ['node']:
+           record = NodeRecord(dict = record)
+       elif record['type'] in ['authority', 'ma', 'sa']:
+           record = AuthorityRecord(dict = record)
+       else:
+           record = GeniRecord(dict = record)
+       record.dump() 
+   
    if opts.file:
        save_records_to_file(opts.file, records)
    return
@@ -471,21 +498,6 @@ def add(opts, args):
    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:
-       key_string = geni_info["create_gid_key"].replace("|","\n") # XXX smbaker: the rspec kills newlines
-       gid = registry.create_gid(auth_cred, geni_info["create_gid_hrn"], create_uuid(), key_string)
-       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
@@ -583,20 +595,23 @@ def delete(opts, args):
 # start named slice
 def start(opts, args):
    global slicemgr
+   slice_hrn = args[0]
    slice_cred = get_slice_cred(args[0])
-   return slicemgr.start_slice(slice_cred)
+   return slicemgr.start_slice(slice_cred, slice_hrn)
 
 # stop named slice
 def stop(opts, args):
    global slicemgr
+   slice_hrn = args[0]
    slice_cred = get_slice_cred(args[0])
-   return slicemgr.stop_slice(slice_cred)
+   return slicemgr.stop_slice(slice_cred, slice_hrn)
 
 # reset named slice
 def reset(opts, args):
    global slicemgr
+   slice_hrn = args[0]
    slice_cred = get_slice_cred(args[0])
-   return slicemgr.reset_slice(slice_cred)
+   return slicemgr.reset_slice(slice_cred, slice_hrn)
 
 #
 #