trimmed useless imports, unstarred all imports
[sfa.git] / sfa / plc / sfa-nuke-plc.py
index 4bbf003..be7b0c1 100755 (executable)
@@ -7,27 +7,53 @@
 # is not purged by this tool and may be deleted by a command like 'rm'.
 ##
 
-import getopt
 import sys
+import os
+from optparse import OptionParser
 
-from sfa.trust.hierarchy import *
-from sfa.util.record import *
 from sfa.util.table import SfaTable
-from sfa.util.sfalogging import sfa_import_logger
-
-def process_options():
-
-   (options, args) = getopt.getopt(sys.argv[1:], '', [])
-   for opt in options:
-       name = opt[0]
-       val = opt[1]
+from sfa.util.sfalogging import logger
 
 def main():
-    process_options()
+   usage="%prog: trash the registry DB (the 'sfa' table in the 'planetlab5' database)"
+   parser = OptionParser(usage=usage)
+   parser.add_option('-f','--file-system',dest='clean_fs',action='store_true',default=False,
+                     help='Clean up the /var/lib/sfa/authorities area as well')
+   parser.add_option('-c','--certs',dest='clean_certs',action='store_true',default=False,
+                     help='Remove all cached certs/gids found in /var/lib/sfa/authorities area as well')
+   (options,args)=parser.parse_args()
+   if args:
+      parser.print_help()
+      sys.exit(1)
+   logger.info("Purging SFA records from database")
+   table = SfaTable()
+   table.sfa_records_purge()
 
-    sfa_import_logger.info("Purging SFA records from database")
-    table = SfaTable()
-    table.sfa_records_purge()
+   if options.clean_certs:
+      # remove the server certificate and all gids found in /var/lib/sfa/authorities
+      logger.info("Purging cached certificates")
+      for (dir, _, files) in os.walk('/var/lib/sfa/authorities'):
+         for file in files:
+            if file.endswith('.gid') or file == 'server.cert':
+               path=dir+os.sep+file
+               os.unlink(path)
+               if not os.path.exists(path):
+                  logger.info("Unlinked file %s"%path)
+               else:
+                  logger.error("Could not unlink file %s"%path)
 
+   if options.clean_fs:
+      # just remove all files that do not match 'server.key' or 'server.cert'
+      logger.info("Purging registry filesystem cache")
+      preserved_files = [ 'server.key', 'server.cert']
+      for (dir,_,files) in os.walk('/var/lib/sfa/authorities'):
+         for file in files:
+            if file in preserved_files: continue
+            path=dir+os.sep+file
+            os.unlink(path)
+            if not os.path.exists(path):
+               logger.info("Unlinked file %s"%path)
+            else:
+               logger.error("Could not unlink file %s"%path)
 if __name__ == "__main__":
-    main()
+   main()