sfaclientlib improved
[sfa.git] / sfa / examples / miniclient.py
index dbfa3fa..616d613 100755 (executable)
@@ -10,6 +10,9 @@ logger=logging.getLogger('')
 logger.addHandler(console)
 logger.setLevel(logging.DEBUG)
 
+import uuid
+def unique_call_id(): return uuid.uuid4().urn
+
 # use sys.argv to point to a completely fresh directory
 import sys
 args=sys.argv[1:]
@@ -31,39 +34,75 @@ aggregate_url="http://sfa1.pl.sophia.inria.fr:12347/"
 # search for public_key / private_key
 private_key="miniclient-private-key"
 # user hrn
-hrn="pla.inri.fake-pi1"
+user_hrn="pla.inri.fake-pi1"
+
+slice_hrn="pla.inri.slpl1"
+# hrn_to_urn(slice_hrn,'slice')
+slice_urn='urn:publicid:IDN+pla:inri+slice+slpl1'
 
 from sfa.client.sfaclientlib import SfaClientBootstrap
 
-bootstrap = SfaClientBootstrap (hrn, registry_url, dir=dir, logger=logger)
+bootstrap = SfaClientBootstrap (user_hrn, registry_url, dir=dir, logger=logger)
 # install the private key in the client directory from 'private_key'
 bootstrap.init_private_key_if_missing(private_key)
-bootstrap.bootstrap_gid()
+
+def truncate(content, length=20, suffix='...'):
+    if isinstance (content, (int) ): return content
+    if isinstance (content, list): return truncate ( "%s"%content, length, suffix)
+    if len(content) <= length:
+        return content
+    else:
+        return content[:length+1]+ ' '+suffix
+
+def has_call_id (server_version):
+    return server_version.has_key('call_id_support')
+
 
 ### issue a GetVersion call
 ### this assumes we've already somehow initialized the certificate
 def get_version (url):
-    
-    server_proxy = bootstrap.server_proxy(url)
-    retcod = server_proxy.GetVersion()
-    print "GetVersion at %s returned following keys: %s"%(url,retcod.keys())
-
+    # make sure we have a self-signed cert
+    bootstrap.self_signed_cert()
+    server_proxy = bootstrap.server_proxy_simple(url)
+    server_version = server_proxy.GetVersion()
+    print "miniclient: GetVersion at %s returned:"%(url)
+    for (k,v) in server_version.iteritems(): print "miniclient: \tversion[%s]=%s"%(k,truncate(v))
+    print "has-call-id=",has_call_id(server_version)
 
 # version_dict = {'type': 'SFA', 'version': '1', }
 
 version_dict = {'type':'ProtoGENI', 'version':'2'}
 
+
 # ditto with list resources
 def list_resources ():
-    options = { 'geni_rspec_version' : version_dict}
-    credential = bootstrap.get_credential_string()
+    bootstrap.bootstrap_my_gid()
+    credential = bootstrap.my_credential_string()
+    credentials = [ credential ]
+    options = {}
+    options [ 'geni_rspec_version' ] = version_dict
+#    options [ 'call_id' ] = unique_call_id()
+    list_resources = bootstrap.server_proxy (aggregate_url).ListResources(credentials,options)
+    print "miniclient: ListResources at %s returned : %s"%(aggregate_url,truncate(list_resources))
+
+def list_slice_resources ():
+    bootstrap.bootstrap_my_gid()
+    credential = bootstrap.slice_credential_string (slice_hrn)
     credentials = [ credential ]
-    retcod = bootstrap.server_proxy (aggregate_url).ListResources(credentials,options)
-    print "ListResources at %s returned : %20s..."%(aggregate_url,retcod)
+    options = { }
+    options [ 'geni_rspec_version' ] = version_dict
+    options [ 'geni_slice_urn' ] = slice_urn
+#    options [ 'call_id' ] = unique_call_id()
+    list_resources = bootstrap.server_proxy (aggregate_url).ListResources(credentials,options)
+    print "miniclient: ListResources at %s for slice %s returned : %s"%(aggregate_url,slice_urn,truncate(list_resources))
+    
+    
+    
 
 def main ():
     get_version(registry_url)
     get_version(aggregate_url)
-    list_resources()
+#    list_resources()
+#    list_slice_resources()
 
 main()