From: Zack Cerza Date: Wed, 10 Dec 2014 20:16:23 +0000 (-0700) Subject: Port to docopt X-Git-Tag: 1.1.0~1067^2~5^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=30eacc7b22ea4180f9bdd5e355cb20a4989c2b6a;p=teuthology.git Port to docopt Signed-off-by: Zack Cerza --- diff --git a/scripts/nuke.py b/scripts/nuke.py index aa9f91d86..0c2d45506 100644 --- a/scripts/nuke.py +++ b/scripts/nuke.py @@ -1,81 +1,37 @@ -import argparse -from argparse import RawTextHelpFormatter -import textwrap +import docopt -import teuthology.misc import teuthology.nuke +doc = """ +usage: teuthology-nuke --help + teuthology-nuke [-v] [--owner OWNER] [-n NAME] [-u] [-i] [-r] [-s] + [-t CONFIG...] [-a DIR] [-p PID] + teuthology-nuke [-v] [-u] [-i] [-r] [-s] --owner OWNER --stale -def main(): - teuthology.nuke.main(parse_args()) +Reset test machines + +optional arguments: + -h, --help show this help message and exit + -v, --verbose be more verbose + -t CONFIG [CONFIG ...], --targets CONFIG [CONFIG ...] + yaml config containing machines to nuke + -a DIR, --archive DIR + archive path for a job to kill and nuke + --owner OWNER job owner + -p PID, --pid PID pid of the process to be killed + -r, --reboot-all reboot all machines + -s, --synch-clocks synchronize clocks on all machines + -u, --unlock Unlock each successfully nuked machine, and output + targets thatcould not be nuked. + -n NAME, --name NAME Name of run to cleanup + -i, --noipmi Skip ipmi checking +Examples: +teuthology-nuke -t target.yaml --unlock --owner user@host +teuthology-nuke -t target.yaml --pid 1234 --unlock --owner user@host +""" -def parse_args(): - parser = argparse.ArgumentParser( - description='Reset test machines', - epilog=textwrap.dedent(''' - Examples: - teuthology-nuke -t target.yaml --unlock --owner user@host - teuthology-nuke -t target.yaml --pid 1234 --unlock --owner user@host \n - '''), - formatter_class=RawTextHelpFormatter) - parser.add_argument( - '-v', '--verbose', - action='store_true', default=None, - help='be more verbose' - ) - parser.add_argument( - '-t', '--targets', - nargs='+', - type=teuthology.misc.config_file, - action=teuthology.misc.MergeConfig, - default={}, - dest='config', - help='yaml config containing machines to nuke', - ) - parser.add_argument( - '-a', '--archive', - metavar='DIR', - help='archive path for a job to kill and nuke', - ) - parser.add_argument( - '--owner', - help='job owner', - ) - parser.add_argument( - '-p', - '--pid', - type=int, - default=False, - help='pid of the process to be killed', - ) - parser.add_argument( - '-r', '--reboot-all', - action='store_true', - default=False, - help='reboot all machines', - ) - parser.add_argument( - '-s', '--synch-clocks', - action='store_true', - default=False, - help='synchronize clocks on all machines', - ) - parser.add_argument( - '-u', '--unlock', - action='store_true', - default=False, - help='Unlock each successfully nuked machine, and output targets that' - 'could not be nuked.' - ) - parser.add_argument( - '-n', '--name', - metavar='NAME', - help='Name of run to cleanup' - ) - parser.add_argument( - '-i', '--noipmi', - action='store_true', default=False, - help='Skip ipmi checking' - ) - return parser.parse_args() + +def main(): + args = docopt.docopt(doc) + teuthology.nuke.main(args) diff --git a/teuthology/nuke.py b/teuthology/nuke.py index 0459a1796..9d8284ce3 100644 --- a/teuthology/nuke.py +++ b/teuthology/nuke.py @@ -10,9 +10,11 @@ import teuthology from . import orchestra import orchestra.remote from .orchestra import run +from .config import FakeNamespace from .lock import list_locks from .lock import unlock_one from .misc import config_file +from .misc import merge_configs from .misc import get_testdir from .misc import get_user from .misc import read_config @@ -336,7 +338,8 @@ def synch_clocks(remotes): proc.wait() -def main(ctx): +def main(args): + ctx = FakeNamespace(args) if ctx.verbose: teuthology.log.setLevel(logging.DEBUG) @@ -356,6 +359,9 @@ def main(ctx): if not ctx.owner: ctx.owner = open(ctx.archive + '/owner').read().rstrip('\n') + if ctx.targets: + ctx.config = merge_configs(ctx.targets) + read_config(ctx) log.info(