summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-03-15 16:50:05 -0700
committerSage Weil <sage@inktank.com>2013-03-19 12:52:23 -0700
commitf287c6f90af0dfdd41358846b069aa3c54b600b3 (patch)
treefcac5e520853c13c4ecf09af70d6af064dc21e09
parenta019753bd3897ee0f5d9c3563c653c5457d5e67d (diff)
downloadceph-f287c6f90af0dfdd41358846b069aa3c54b600b3.tar.gz
ceph-disk: simplify command dispatch
Signed-off-by: Sage Weil <sage@inktank.com>
-rwxr-xr-xsrc/ceph-disk56
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(