]> scripts.mit.edu Git - wizard.git/blobdiff - bin/wizard
Various refinements from our mass-upgrade run.
[wizard.git] / bin / wizard
index 6ff98a4ad3c850431a14275a623ab0c341cf4772..5fe8b7ca10b1cf9f24535481ff415c3db3f3737d 100755 (executable)
@@ -15,11 +15,15 @@ def main():
 Wizard is a Git-based autoinstall management system for scripts.
 
 Its commands are:
 Wizard is a Git-based autoinstall management system for scripts.
 
 Its commands are:
+    configure       Configures an autoinstall (database, etc) to work
     errors          Lists all broken autoinstall metadata
     errors          Lists all broken autoinstall metadata
-    info            Reports information about an autoinstall
+    install         Installs an application
     list            Lists autoinstalls, with optional filtering
     list            Lists autoinstalls, with optional filtering
-    massmigrate     Performs mass migration of autoinstalls of an application
+    mass-migrate    Performs mass migration of autoinstalls of an application
+    mass-upgrade    Performs mass upgrade of autoinstalls of an application
     migrate         Migrate autoinstalls from old format to Git-based format
     migrate         Migrate autoinstalls from old format to Git-based format
+    prepare-config  Prepares configuration files for versioning
+    research        Print statistics about a possible upgrade
     summary         Generate statistics (see help for subcommands)
     upgrade         Upgrades an autoinstall to the latest version
 
     summary         Generate statistics (see help for subcommands)
     upgrade         Upgrades an autoinstall to the latest version
 
@@ -30,14 +34,32 @@ See '%prog help COMMAND' for more information on a specific command."""
     _, args = parser.parse_args() # no global options
     rest_argv = args[1:]
     baton = command.OptionBaton()
     _, args = parser.parse_args() # no global options
     rest_argv = args[1:]
     baton = command.OptionBaton()
-    baton.add("--versions-path", dest="versions_path",
-        default="/afs/athena.mit.edu/contrib/scripts/sec-tools/store/versions",
-        help="Location of parallel-find output directory, or a file containing a newline separated list of 'all autoinstalls' (for testing).")
+    baton.add("--versions-path", dest="versions_path", metavar="PATH",
+        default=getenvpath("WIZARD_VERSIONS_PATH") or "/afs/athena.mit.edu/contrib/scripts/sec-tools/store/versions",
+        help="Location of parallel-find output directory, or a file containing a newline separated list of 'all autoinstalls' (for development work).  Environment variable is WIZARD_VERSIONS_PATH.")
+    baton.add("--srv-path", dest="srv_path", metavar="PATH",
+        default=getenvpath("WIZARD_SRV_PATH") or "/afs/athena.mit.edu/contrib/scripts/git/autoinstalls",
+        help="Location of autoinstall Git repositories, such that $REPO_PATH/$APP.git is a repository (for development work).  Environment variable is WIZARD_SRV_PATH.")
+    baton.add("--dry-run", dest="dry_run", action="store_true",
+            default=False, help="Performs the operation without actually modifying any files.  Use in combination with --verbose to see commands that will be run.")
+    # common variables for mass commands
+    baton.add("--seen", dest="seen",
+            default=None, help="File to read/write paths of already processed installs."
+            "These will be skipped.")
+    baton.add("--no-parallelize", dest="no_parallelize", action="store_true",
+            default=False, help="Turn off parallelization")
+    baton.add("--max-processes", dest="max_processes", type="int", metavar="N",
+            default=40, help="Maximum subprocesses to run concurrently")
+    baton.add("--limit", dest="limit", type="int",
+            default=None, help="Limit the number of autoinstalls to look at.")
     try:
         command_name = args[0]
     except IndexError:
         parser.print_help()
         raise SystemExit(1)
     try:
         command_name = args[0]
     except IndexError:
         parser.print_help()
         raise SystemExit(1)
+    baton.add("--log-dir", dest="log_dir",
+        default=getenvpath("WIZARD_LOG_DIR") or "/tmp/wizard-%s" % command_name,
+        help="Log files for Wizard children processes are placed here.")
     if command_name == "help":
         try:
             help_module = get_command(rest_argv[0])
     if command_name == "help":
         try:
             help_module = get_command(rest_argv[0])
@@ -55,9 +77,16 @@ See '%prog help COMMAND' for more information on a specific command."""
     command_module.main(rest_argv, baton)
 
 def get_command(name):
     command_module.main(rest_argv, baton)
 
 def get_command(name):
+    name = name.replace("-", "_")
     __import__("wizard.command." + name)
     return getattr(wizard.command, name)
 
     __import__("wizard.command." + name)
     return getattr(wizard.command, name)
 
+def getenvpath(name):
+    val = os.getenv(name)
+    if val:
+        val = os.path.abspath(val)
+    return val
+
 if __name__ == "__main__":
     main()
 
 if __name__ == "__main__":
     main()