Make vlmc module function take kwargs
authorFilippos Giannakos <philipgian@grnet.gr>
Wed, 6 Feb 2013 16:40:17 +0000 (18:40 +0200)
committerFilippos Giannakos <philipgian@grnet.gr>
Fri, 8 Feb 2013 13:33:07 +0000 (15:33 +0200)
xseg/tools/archipelago/archipelago/archipelago.py
xseg/tools/archipelago/archipelago/cli.py
xseg/tools/archipelago/archipelago/common.py
xseg/tools/archipelago/archipelago/vlmc.py
xseg/tools/archipelago/setup.py

index 3c61028..adf6b79 100755 (executable)
@@ -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'))
index e422a82..66978a2 100755 (executable)
@@ -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)
index 9f84507..73bec9a 100755 (executable)
@@ -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)
index 55c4f87..551bec0 100755 (executable)
@@ -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)'
index 6e34252..f7c03fc 100644 (file)
@@ -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',
             ],
         }
 )