X-Git-Url: https://scripts.mit.edu/gitweb/wizard.git/blobdiff_plain/67f01d68d435ae46218008eaf4a3c91450080a64..c1b068b03a604652f3eb284fdb92bcb1171d9601:/wizard/command/mass_migrate.py diff --git a/wizard/command/mass_migrate.py b/wizard/command/mass_migrate.py index 95d975e..956399a 100644 --- a/wizard/command/mass_migrate.py +++ b/wizard/command/mass_migrate.py @@ -1,15 +1,9 @@ -import optparse import logging import os import os.path -import pwd -import hashlib -import errno -import time import itertools -import wizard -from wizard import deploy, util, shell, sset, command +from wizard import deploy, report, shell, sset, command def main(argv, baton): options, args = parse_args(argv, baton) @@ -19,17 +13,17 @@ def main(argv, baton): command.create_logdir(options.log_dir) seen = sset.make(options.seen) is_root = not os.getuid() - report = command.open_reports(options.log_dir) + runtime = report.make_fresh(options.log_dir, "success", "warnings", "errors") # loop stuff errors = {} i = 0 - deploys = deploy.parse_install_lines(app, options.versions_path) + deploys = deploy.parse_install_lines(app, options.versions_path, user=options.user) requested_deploys = itertools.islice(deploys, options.limit) for i, d in enumerate(requested_deploys, 1): # check if we want to punt due to --limit if d.location in seen: continue - if is_root and not command.security_check_homedir(d): + if is_root and not command.security_check_homedir(d.location): continue logging.info("Processing %s" % d.location) child_args = list(base_args) @@ -42,20 +36,17 @@ def main(argv, baton): # we need to make another stack frame so that d and i get specific bindings. def on_success(stdout, stderr): if stderr: - report.warnings.write("%s\n" % d.location) # pylint: disable-msg=E1101 logging.warning("Warnings [%04d] %s:\n%s" % (i, d.location, stderr)) - seen.add(d.location) + runtime.write("warnings", i, d.location) + runtime.write("success", i, d.location) def on_error(e): if e.name == "wizard.command.migrate.AlreadyMigratedError" or \ e.name == "AlreadyMigratedError": - seen.add(d.location) logging.info("Skipped already migrated %s" % d.location) else: - name = e.name - if name not in errors: errors[name] = [] - errors[name].append(d) - logging.error("%s in [%04d] %s" % (name, i, d.location)) - report.errors.write("%s\n" % d.location) # pylint: disable-msg=E1101 + errors.setdefault(e.name, []).append(d) + logging.error("%s in [%04d] %s", e.name, i, d.location) + runtime.write("errors", i, d.location) return (on_success, on_error) on_success, on_error = make_on_pair(d, i) sh.call("wizard", "migrate", d.location, *child_args, @@ -85,6 +76,7 @@ the scripts AFS patch.""" baton.push(parser ,"limit") baton.push(parser, "versions_path") baton.push(parser, "srv_path") + baton.push(parser, "user") options, args, = parser.parse_all(argv) if len(args) > 1: parser.error("too many arguments")