Merge branch 'upstreammaster'
[sfa.git] / sfa / clientbin / sfaadmin.py
index 2bf1d0c..9a62511 100755 (executable)
@@ -1,4 +1,5 @@
 #!/usr/bin/python
+import os
 import sys
 import copy
 from pprint import pformat 
@@ -81,15 +82,16 @@ class RegistryCommands(Commands):
    
 
     def import_registry(self):
-        pass
+        from sfa.importer import Importer
+        importer = Importer()
+        importer.run()
     
     @args('-a', '--all', dest='all', metavar='<all>', action='store_true', default=False,
           help='Remove all registry records and all files in %s area' % Hierarchy().basedir)
     @args('-c', '--certs', dest='certs', metavar='<certs>', action='store_true', default=False,
           help='Remove all cached certs/gids found in %s' % Hierarchy().basedir )
     @args('-0', '--no-reinit', dest='reinit', metavar='<reinit>', action='store_false', default=True,
-          help='By default a new DB schema is installed after the cleanup; this option prevents that')
+          help='Prevents new DB schema from being installed after cleanup')
     def nuke(self, all=False, certs=False, reinit=True):
         from sfa.storage.dbschema import DBSchema
         from sfa.util.sfalogging import _SfaLogger
@@ -102,12 +104,12 @@ class RegistryCommands(Commands):
         # for convenience we re-create the schema here, so there's no need for an explicit
         # service sfa restart
         # however in some (upgrade) scenarios this might be wrong
-        if options.reinit:
+        if reinit:
             logger.info("re-creating empty schema")
             dbschema.init_or_upgrade()
 
         # remove the server certificate and all gids found in /var/lib/sfa/authorities
-        if options.clean_certs:
+        if certs:
             logger.info("Purging cached certificates")
             for (dir, _, files) in os.walk('/var/lib/sfa/authorities'):
                 for file in files:
@@ -116,7 +118,7 @@ class RegistryCommands(Commands):
                         os.unlink(path)
 
         # just remove all files that do not match 'server.key' or 'server.cert'
-        if options.all:
+        if all:
             logger.info("Purging registry filesystem cache")
             preserved_files = [ 'server.key', 'server.cert']
             for (dir,_,files) in os.walk(Hierarchy().basedir):
@@ -126,7 +128,7 @@ class RegistryCommands(Commands):
                     os.unlink(path)
         
     
-class CerficiateCommands(Commands):
+class CertCommands(Commands):
     
     def import_gid(self, xrn):
         pass
@@ -135,6 +137,9 @@ class CerficiateCommands(Commands):
     @args('-t', '--type', dest='type', metavar='<type>', help='object type', default=None)
     @args('-o', '--outfile', dest='outfile', metavar='<outfile>', help='output file', default=None)
     def export(self, xrn, type=None, outfile=None):
+        from sfa.storage.alchemy import dbsession
+        from sfa.storage.model import RegRecord
+        hrn = Xrn(xrn).get_hrn()
         request=dbsession.query(RegRecord).filter_by(hrn=hrn)
         if type: request = request.filter_by(type=type)
         record=request.first()
@@ -238,7 +243,7 @@ class SliceManagerCommands(AggregateCommands):
         self.api= Generic.the_flavour().make_api(interface='slicemgr')
 
 
-CATEGORIES = {'cert': CertificateCommands,
+CATEGORIES = {'cert': CertCommands,
               'registry': RegistryCommands,
               'aggregate': AggregateCommands,
               'slicemgr': SliceManagerCommands}
@@ -271,18 +276,18 @@ def main():
     command_instance = command_class()
     actions = command_instance._get_commands()
     if len(argv) < 1:
-        if hasattr(command_instance, '__call__'):
-            action = ''
-            command = command_instance.__call__
-        else:
-            print script_name + " category action [<args>]"
-            print "Available actions for %s category:" % category
-            for k in actions:
-                print "\t%s" % k 
-            sys.exit(2)
+        action = '__call__'
     else:
         action = argv.pop(0)
+    
+    if hasattr(command_instance, action):
         command = getattr(command_instance, action)
+    else:
+        print script_name + " category action [<args>]"
+        print "Available actions for %s category:" % category
+        for k in actions:
+            print "\t%s" % k
+        sys.exit(2)
 
     # ensure options are valid
     options = getattr(command, 'options', [])