From: Sage Weil Date: Fri, 15 Mar 2013 23:50:05 +0000 (-0700) Subject: ceph-disk: simplify command dispatch X-Git-Tag: v0.62~188^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f287c6f90af0dfdd41358846b069aa3c54b600b3;p=ceph.git ceph-disk: simplify command dispatch Signed-off-by: Sage Weil --- diff --git a/src/ceph-disk b/src/ceph-disk index 46c50fcc3ace..dab877247621 100755 --- a/src/ceph-disk +++ b/src/ceph-disk @@ -1,9 +1,11 @@ #!/usr/bin/python import argparse +import errno import logging import os import os.path +import platform import re import subprocess import stat @@ -121,6 +123,28 @@ def maybe_mkdir(*a, **kw): raise +def list_all_partitions(): + """ + Return a list of devices and partitions + """ + ls = {} + with file('/proc/partitions', 'rb') as f: + for line in f.read().split('\n')[2:]: + fields = re.split('\s+', line) + if len(fields) < 5: + continue + (_, major, minor, blocks, name) = fields + name = '/dev/' + name + if name[-1].isdigit(): + base = name + while base[-1].isdigit(): + base = base[:-1] + ls[base].append(name) + else: + ls[name] = [] + return ls + + def list_partitions(disk): """ Return a list of partitions on the given device @@ -1553,7 +1577,7 @@ def main_list(args): def parse_args(): parser = argparse.ArgumentParser( - 'Manage data disks or directories for use by a Ceph OSD', + 'ceph-disk', ) parser.add_argument( '-v', '--verbose', @@ -1566,7 +1590,11 @@ def parse_args(): cluster='ceph', ) - subparsers = parser.add_subparsers(help='sub-command help') + subparsers = parser.add_subparsers( + title='subcommands', + description='valid subcommands', + help='sub-command help', + ) prepare_parser = subparsers.add_parser('prepare', help='Prepare a directory or disk for a Ceph OSD') prepare_parser.add_argument( @@ -1641,6 +1669,9 @@ def parse_args(): help=('path to OSD journal disk block device;' + ' leave out to store journal in file'), ) + prepare_parser.set_defaults( + func=main_prepare, + ) activate_parser = subparsers.add_parser('activate', help='Activate a Ceph OSD') activate_parser.add_argument( @@ -1661,15 +1692,21 @@ def parse_args(): default='auto', choices=INIT_SYSTEMS, ) - activate_parser.set_defaults( - activate_key_template='/var/lib/ceph/bootstrap-osd/{cluster}.keyring', - ) activate_parser.add_argument( 'path', metavar='PATH', nargs='?', help='path to block device or directory', ) + activate_parser.set_defaults( + activate_key_template='/var/lib/ceph/bootstrap-osd/{cluster}.keyring', + func=main_activate, + ) + + list_parser = subparsers.add_parser('list', help='List disks, partitions, and Ceph OSDs') + list_parser.set_defaults( + func=main_list, + ) args = parser.parse_args() return args @@ -1687,14 +1724,7 @@ def main(): ) try: - if args.command == 'prepare': - main_prepare(args) - elif args.command == 'activate': - main_activate(args) - elif args.command == 'list': - main_list(args) - else: - log.error('unimplemented command %s', args.command) + args.func(args) except Error as e: print >>sys.stderr, '{prog}: {msg}'.format(