diff options
author | Sage Weil <sage@inktank.com> | 2013-03-15 16:50:05 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-03-19 12:52:23 -0700 |
commit | f287c6f90af0dfdd41358846b069aa3c54b600b3 (patch) | |
tree | fcac5e520853c13c4ecf09af70d6af064dc21e09 | |
parent | a019753bd3897ee0f5d9c3563c653c5457d5e67d (diff) | |
download | ceph-f287c6f90af0dfdd41358846b069aa3c54b600b3.tar.gz |
ceph-disk: simplify command dispatch
Signed-off-by: Sage Weil <sage@inktank.com>
-rwxr-xr-x | src/ceph-disk | 56 |
1 files changed, 43 insertions, 13 deletions
diff --git a/src/ceph-disk b/src/ceph-disk index 46c50fcc3ac..dab87724762 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( |