From d05e921bd3dd10911cd6eac2717f2d6666234478 Mon Sep 17 00:00:00 2001 From: Filippos Giannakos Date: Wed, 6 Feb 2013 18:40:17 +0200 Subject: [PATCH] Make vlmc module function take kwargs --- xseg/tools/archipelago/archipelago/archipelago.py | 4 +- xseg/tools/archipelago/archipelago/cli.py | 39 ++++++------- xseg/tools/archipelago/archipelago/common.py | 4 +- xseg/tools/archipelago/archipelago/vlmc.py | 62 ++++++--------------- xseg/tools/archipelago/setup.py | 4 +- 5 files changed, 40 insertions(+), 73 deletions(-) diff --git a/xseg/tools/archipelago/archipelago/archipelago.py b/xseg/tools/archipelago/archipelago/archipelago.py index 3c61028..adf6b79 100755 --- a/xseg/tools/archipelago/archipelago/archipelago.py +++ b/xseg/tools/archipelago/archipelago/archipelago.py @@ -175,7 +175,7 @@ def stop(user=False, peer=None, **kwargs): if user: return stop_peers(peers) #check devices - if vlmc_showmapped([]) > 0: + if vlmc_showmapped() > 0: raise Error("Cannot stop archipelago. Mapped volumes exist") unload_module(xsegbd) stop_peers(peers) @@ -186,7 +186,7 @@ def stop(user=False, peer=None, **kwargs): def status(**kwargs): r = 0 - if vlmc_showmapped([]) > 0: + if vlmc_showmapped() > 0: r += 1 if loaded_module(xsegbd): pretty_print(xsegbd, green('Loaded')) diff --git a/xseg/tools/archipelago/archipelago/cli.py b/xseg/tools/archipelago/archipelago/cli.py index e422a82..66978a2 100755 --- a/xseg/tools/archipelago/archipelago/cli.py +++ b/xseg/tools/archipelago/archipelago/cli.py @@ -48,26 +48,26 @@ def vlmc_parser(): create_parser.add_argument('-s', '--size', type=int, nargs='?', help='requested size in MB for create') create_parser.add_argument('--snap', type=str, nargs='?', help='create from snapshot') create_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd') - create_parser.add_argument('name', type=str, nargs=1, help='volume/device name') + create_parser.add_argument('name', type=str, help='volume/device name') create_parser.set_defaults(func=vlmc.create) remove_parser = subparsers.add_parser('remove', help='Delete volume') - remove_parser.add_argument('name', type=str, nargs=1, help='volume/device name') + remove_parser.add_argument('name', type=str, help='volume/device name') remove_parser.set_defaults(func=vlmc.remove) remove_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd') rm_parser = subparsers.add_parser('rm', help='Delete volume') - rm_parser.add_argument('name', type=str, nargs=1, help='volume/device name') + rm_parser.add_argument('name', type=str, help='volume/device name') rm_parser.set_defaults(func=vlmc.remove) rm_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd') map_parser = subparsers.add_parser('map', help='Map volume') - map_parser.add_argument('name', type=str, nargs=1, help='volume/device name') + map_parser.add_argument('name', type=str, help='volume/device name') map_parser.set_defaults(func=vlmc.map_volume) map_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd') unmap_parser = subparsers.add_parser('unmap', help='Unmap volume') - unmap_parser.add_argument('name', type=str, nargs=1, help='volume/device name') + unmap_parser.add_argument('name', type=str, help='volume/device name') unmap_parser.set_defaults(func=vlmc.unmap_volume) unmap_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd') @@ -82,7 +82,7 @@ def vlmc_parser(): snapshot_parser = subparsers.add_parser('snapshot', help='snapshot volume') #group = snapshot_parser.add_mutually_exclusive_group(required=True) snapshot_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd') - snapshot_parser.add_argument('name', type=str, nargs=1, help='volume/device name') + snapshot_parser.add_argument('name', type=str, help='volume/device name') snapshot_parser.set_defaults(func=vlmc.snapshot) ls_parser = subparsers.add_parser('ls', help='List volumes') @@ -90,39 +90,39 @@ def vlmc_parser(): ls_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd') resize_parser = subparsers.add_parser('resize', help='Resize volume') - resize_parser.add_argument('-s', '--size', type=int, nargs=1, help='requested size in MB for resize') - resize_parser.add_argument('name', type=str, nargs=1, help='volume/device name') + resize_parser.add_argument('-s', '--size', type=int, help='requested size in MB for resize') + resize_parser.add_argument('name', type=str, help='volume/device name') resize_parser.set_defaults(func=vlmc.resize) resize_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd') open_parser = subparsers.add_parser('open', help='open volume') - open_parser.add_argument('name', type=str, nargs=1, help='volume/device name') + open_parser.add_argument('name', type=str, help='volume/device name') open_parser.set_defaults(func=vlmc.open_volume) open_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd') close_parser = subparsers.add_parser('close', help='close volume') - close_parser.add_argument('name', type=str, nargs=1, help='volume/device name') + close_parser.add_argument('name', type=str, help='volume/device name') close_parser.set_defaults(func=vlmc.close_volume) close_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd') lock_parser = subparsers.add_parser('lock', help='lock volume') - lock_parser.add_argument('name', type=str, nargs=1, help='volume/device name') + lock_parser.add_argument('name', type=str, help='volume/device name') lock_parser.set_defaults(func=vlmc.lock) lock_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd') unlock_parser = subparsers.add_parser('unlock', help='unlock volume') - unlock_parser.add_argument('name', type=str, nargs=1, help='volume/device name') + unlock_parser.add_argument('name', type=str, help='volume/device name') unlock_parser.add_argument('-f', '--force', action='store_true', default=False , help='break lock') unlock_parser.set_defaults(func=vlmc.unlock) unlock_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd') info_parser = subparsers.add_parser('info', help='Show volume info') - info_parser.add_argument('name', type=str, nargs=1, help='volume name') + info_parser.add_argument('name', type=str, help='volume name') info_parser.set_defaults(func=vlmc.info) info_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd') map_info_parser = subparsers.add_parser('mapinfo', help='Show volume map_info') - map_info_parser.add_argument('name', type=str, nargs=1, help='volume name') + map_info_parser.add_argument('name', type=str, help='volume name') map_info_parser.set_defaults(func=vlmc.mapinfo) map_info_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd') map_info_parser.add_argument('-v', '--verbose', action='store_true', default=False , help='') @@ -167,20 +167,13 @@ def main(): args = parser.parse_args() loadrc(args.config) + kwargs=vars(args) if parser_func == archipelago_parser: peers = construct_peers() xsegbd_args = [('start_portno', str(config['XSEGBD_START'])), ('end_portno', str(config['XSEGBD_END']))] - kwargs=vars(args) - try: - args.func(**kwargs) - return 0 - except Error as e: - print red(e) - return -1 - try: - args.func(args) + args.func(**kwargs) return 0 except Error as e: print red(e) diff --git a/xseg/tools/archipelago/archipelago/common.py b/xseg/tools/archipelago/archipelago/common.py index 9f84507..73bec9a 100755 --- a/xseg/tools/archipelago/archipelago/common.py +++ b/xseg/tools/archipelago/archipelago/common.py @@ -402,7 +402,7 @@ def construct_peers(): def exclusive(fn): - def exclusive_args(args): + def exclusive_args(**kwargs): if not os.path.exists(LOCK_PATH): try: os.mkdir(LOCK_PATH) @@ -424,7 +424,7 @@ def exclusive(fn): else: raise OSError(err, lock_file + ' ' + reason) try: - r = fn(args) + r = fn(**kwargs) finally: os.close(fd) os.unlink(lock_file) diff --git a/xseg/tools/archipelago/archipelago/vlmc.py b/xseg/tools/archipelago/archipelago/vlmc.py index 55c4f87..551bec0 100755 --- a/xseg/tools/archipelago/archipelago/vlmc.py +++ b/xseg/tools/archipelago/archipelago/vlmc.py @@ -41,7 +41,7 @@ from binascii import hexlify from .common import * @exclusive -def showmapped(args): +def showmapped(): try: devices = os.listdir(os.path.join(XSEGBD_SYSFS, "devices/")) except: @@ -65,16 +65,12 @@ def showmapped(args): raise Error(reason) return len(devices) -def showmapped_wrapper(args): - showmapped(args) +def showmapped_wrapper(**kwargs): + showmapped() @exclusive -def create(args): - name = args.name[0] - size = args.size - snap = args.snap - +def create(name, size=None, snap=None, **kwargs): if len(name) < 6: raise Error("Name should have at least len 6") if size == None and snap == None: @@ -109,10 +105,7 @@ def create(args): raise Error("vlmc creation failed") @exclusive -def snapshot(args): - # snapshot - name = args.name[0] - +def snapshot(name, **kwargs): if len(name) < 6: raise Error("Name should have at least len 6") @@ -139,7 +132,7 @@ def snapshot(args): sys.stdout.write("Snapshot name: %s\n" % reply) -def list_volumes(args): +def list_volumes(**kwargs): if config['STORAGE'] == "rados": import rados cluster = rados.Rados(conffile=config['CEPH_CONF_FILE']) @@ -157,9 +150,7 @@ def list_volumes(args): @exclusive -def remove(args): - name = args.name[0] - +def remove(name, **kwargs): try: for f in os.listdir(XSEGBD_SYSFS + "devices/"): d_id = open(XSEGBD_SYSFS + "devices/" + f + "/id").read().strip() @@ -187,10 +178,9 @@ def remove(args): @exclusive -def map_volume(args): +def map_volume(name, **kwargs): if not loaded_module(xsegbd): raise Error("Xsegbd module not loaded") - name = args.name[0] prev = config['XSEGBD_START'] try: result = [int(open(XSEGBD_SYSFS + "devices/" + f + "/srcport").read().strip()) for f in os.listdir(XSEGBD_SYSFS + "devices/")] @@ -215,10 +205,10 @@ def map_volume(args): raise Error(name + ': ' + str(reason)) @exclusive -def unmap_volume(args): +def unmap_volume(name, **kwargs): if not loaded_module(xsegbd): raise Error("Xsegbd module not loaded") - device = args.name[0] + device = name try: for f in os.listdir(XSEGBD_SYSFS + "devices/"): d_id = open(XSEGBD_SYSFS + "devices/" + f + "/id").read().strip() @@ -233,13 +223,10 @@ def unmap_volume(args): raise Error(device + ': ' + str(reason)) # FIXME: -def resize(args): +def resize(name, size, **kwargs): if not loaded_module(xsegbd): raise Error("Xsegbd module not loaded") - name = args.name[0] - size = args.size[0] - try: for f in os.listdir(XSEGBD_SYSFS + "devices/"): @@ -254,9 +241,7 @@ def resize(args): raise Error(name + ': ' + str(reason)) @exclusive -def lock(args): - name = args.name[0] - +def lock(name, **kwargs): if len(name) < 6: raise Error("Name should have at least len 6") @@ -280,10 +265,7 @@ def lock(args): sys.stdout.write("Volume locked\n") @exclusive -def unlock(args): - name = args.name[0] - force = args.force - +def unlock(name, force=False, **kwargs): if len(name) < 6: raise Error("Name should have at least len 6") @@ -310,9 +292,7 @@ def unlock(args): sys.stdout.write("Volume unlocked\n") @exclusive -def open_volume(args): - name = args.name[0] - +def open_volume(name, **kwargs): if len(name) < 6: raise Error("Name should have at least len 6") @@ -333,9 +313,7 @@ def open_volume(args): sys.stdout.write("Volume opened\n") @exclusive -def close_volume(args): - name = args.name[0] - +def close_volume(name, **kwargs): if len(name) < 6: raise Error("Name should have at least len 6") @@ -356,9 +334,7 @@ def close_volume(args): sys.stdout.write("Volume closed\n") @exclusive -def info(args): - name = args.name[0] - +def info(name, **kwargs): if len(name) < 6: raise Error("Name should have at least len 6") @@ -380,9 +356,7 @@ def info(args): else: sys.stdout.write("Volume %s: size: %d\n" % (name, size) ) -def mapinfo(args): - name = args.name[0] - +def mapinfo(name, verbose=False, **kwargs): if len(name) < 6: raise Error("Name should have at least len 6") @@ -418,7 +392,7 @@ def mapinfo(args): pos += 1 block = hexlify(mapdata[pos:pos+32]) pos += 32 - if args.verbose: + if verbose: print block, exists print "Actual disk usage: " + str(nr_exists * BLOCKSIZE), print '(' + str(nr_exists) + '/' + str(blocks) + ' blocks)' diff --git a/xseg/tools/archipelago/setup.py b/xseg/tools/archipelago/setup.py index 6e34252..f7c03fc 100644 --- a/xseg/tools/archipelago/setup.py +++ b/xseg/tools/archipelago/setup.py @@ -194,8 +194,8 @@ setup( entry_points = { 'console_scripts': [ - 'archipelago = archipelago.common:cli', - 'vlmc = archipelago.common:cli', + 'archipelago = archipelago.cli:main', + 'vlmc = archipelago.cli:main', ], } ) -- 1.7.10.4