1 #!/usr/bin/env python2.7
5 from vlmc_shared import *
6 import os, sys, subprocess, shutil, re, argparse
13 r = subprocess.check_output(["ps", "-o", "command", "-C",
14 "blockd"]).splitlines()[1:]
15 result = [int(re.search('-p (\d+)', x).group(1)) for x in r]
32 f = os.open(BLOCKD_LOGS + name, os.O_CREAT | os.O_WRONLY)
33 r = subprocess.Popen([XSEG_HOME + "peers/user/blockd", name, "-p", str(port),
34 "-g", SPEC, "-n", str(NR_OPS)], stdout=f, stderr=f)
37 fd = os.open(XSEGBD_SYSFS + "add", os.O_WRONLY)
38 os.write(fd, "%s %d:%d:%d" % (name, port + 64, port, REQS))
40 except Exception, reason:
41 print >> sys.stderr, reason
48 for f in os.listdir(XSEGBD_SYSFS + "devices/"):
49 d_id = open(XSEGBD_SYSFS + "devices/" + f + "/id").read().strip()
50 name = open(XSEGBD_SYSFS + "devices/"+ f + "/target").read().strip()
51 if device == DEVICE_PREFIX + d_id:
52 fd = os.open(XSEGBD_SYSFS + "remove", os.O_WRONLY)
58 subprocess.check_output(["pkill", "-f", "blockd " + name + " "])
59 except Exception, reason:
60 print >> sys.stderr, reason
63 def vlmc_showmapped(args):
65 print "id\tpool\timage\tsnap\tdevice"
67 for f in os.listdir(XSEGBD_SYSFS + "devices/"):
68 d_id = open(XSEGBD_SYSFS + "devices/" + f + "/id").read().strip()
69 name = open(XSEGBD_SYSFS + "devices/"+ f + "/target").read().strip()
71 print "%s\t%s\t%s\t%s\t%s" % (d_id, '-', name, '-', DEVICE_PREFIX +
73 except Exception, reason:
74 print >> sys.stderr, reason
77 if __name__ == "__main__":
78 # parse arguments and discpatch to the correct func
79 parser = argparse.ArgumentParser(description='vlmc tool')
80 parser.add_argument('-c', '--config', type=str, nargs='?', help='config file')
81 subparsers = parser.add_subparsers()
83 create_parser = subparsers.add_parser('create', help='Create volume')
84 create_parser.add_argument('-s', '--size', type=int, nargs='?', help='requested size in MB for create')
85 create_parser.add_argument('--snap', type=str, nargs='?', help='create from snapshot')
86 create_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
87 create_parser.add_argument('name', type=str, nargs=1, help='volume/device name')
88 create_parser.set_defaults(func=vlmc_create)
90 remove_parser = subparsers.add_parser('remove', help='Delete volume')
91 remove_parser.add_argument('name', type=str, nargs=1, help='volume/device name')
92 remove_parser.set_defaults(func=vlmc_remove)
93 remove_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
95 rm_parser = subparsers.add_parser('rm', help='Delete volume')
96 rm_parser.add_argument('name', type=str, nargs=1, help='volume/device name')
97 rm_parser.set_defaults(func=vlmc_remove)
98 rm_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
100 map_parser = subparsers.add_parser('map', help='Map volume')
101 map_parser.add_argument('name', type=str, nargs=1, help='volume/device name')
102 map_parser.set_defaults(func=vlmc_map)
103 map_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
105 unmap_parser = subparsers.add_parser('unmap', help='Unmap volume')
106 unmap_parser.add_argument('name', type=str, nargs=1, help='volume/device name')
107 unmap_parser.set_defaults(func=vlmc_unmap)
108 unmap_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
110 showmapped_parser = subparsers.add_parser('showmapped', help='Show mapped volumes')
111 showmapped_parser.set_defaults(func=vlmc_showmapped)
112 showmapped_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
114 list_parser = subparsers.add_parser('list', help='List volumes')
115 list_parser.set_defaults(func=vlmc_list)
116 list_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
118 ls_parser = subparsers.add_parser('ls', help='List volumes')
119 ls_parser.set_defaults(func=vlmc_list)
120 ls_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
122 resize_parser = subparsers.add_parser('resize', help='Resize volume')
123 resize_parser.add_argument('-s', '--size', type=int, nargs=1, help='requested size in MB for resize')
124 resize_parser.add_argument('name', type=str, nargs=1, help='volume/device name')
125 resize_parser.set_defaults(func=vlmc_resize)
126 resize_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
128 args = parser.parse_args()