5 import os, sys, subprocess, argparse
12 if size == None and snap == None:
13 print >> sys.stderr, "At least one of the size/snap args must be provided"
16 cmd = ["/root/archip_rest/xseg/peers/user/vlmc-xseg", "%s" % SPEC, "create", "--name", "%s" % name]
18 cmd.extend("--snap", "%s" % snap)
20 cmd.extend("--size", "%s" % size)
21 cmd.extend("-mp", "%s" % MPORT)
22 cmd.extend("-p", "%s" % VTOOL)
24 result = utils.RunCmd(cmd)
26 sys.stderr.write("vlmc creation failed\n")
30 def vlmc_snapshot(args):
38 def vlmc_remove(args):
40 cmd = ["/root/archip_rest/xseg/peers/user/vlmc-xseg", "%s" % SPEC, "remove", "--name", "%s" % name]
41 cmd.extend("-mp", "%s" % MPORT)
42 cmd.extend("-p", "%s" % VTOOL)
43 result = utils.RunCmd(cmd)
45 sys.stderr.write("vlmc creation failed\n")
51 os.stat("/sys/bus/xsegbd")
52 except Exception, reason:
53 print >> sys.stderr, reason
61 result = [int(open(XSEGBD_SYSFS + "devices/" + f + "/srcport").read().strip()) for f in os.listdir(XSEGBD_SYSFS + "devices/")]
71 fd = os.open(XSEGBD_SYSFS + "add", os.O_WRONLY)
72 os.write(fd, "%s %d:%d:%d" % (name, port, VPORT, REQS))
74 except Exception, reason:
75 print >> sys.stderr, reason
82 for f in os.listdir(XSEGBD_SYSFS + "devices/"):
83 d_id = open(XSEGBD_SYSFS + "devices/" + f + "/id").read().strip()
84 name = open(XSEGBD_SYSFS + "devices/"+ f + "/target").read().strip()
85 if device == DEVICE_PREFIX + d_id:
86 fd = os.open(XSEGBD_SYSFS + "remove", os.O_WRONLY)
91 print >> sys.stderr, "Device %s doesn't exist" % device
93 except Exception, reason:
94 print >> sys.stderr, reason
97 def vlmc_showmapped(args):
99 print "id\tpool\timage\tsnap\tdevice"
101 for f in os.listdir(XSEGBD_SYSFS + "devices/"):
102 d_id = open(XSEGBD_SYSFS + "devices/" + f + "/id").read().strip()
103 target = open(XSEGBD_SYSFS + "devices/"+ f + "/target").read().strip()
105 print "%s\t%s\t%s\t%s\t%s" % (d_id, '-', target, '-', DEVICE_PREFIX +
107 except Exception, reason:
108 print >> sys.stderr, reason
112 def vlmc_resize(args):
120 for f in os.listdir(XSEGBD_SYSFS + "devices/"):
121 d_id = open(XSEGBD_SYSFS + "devices/" + f + "/id").read().strip()
122 d_name = open(XSEGBD_SYSFS + "devices/"+ f + "/name").read().strip()
124 fd = os.open(XSEGBD_SYSFS + "devices/" + d_id +"/refresh", os.O_WRONLY)
129 except Exception, reason:
130 print >> sys.stderr, reason
137 execfile(os.path.expanduser("~/.xsegrc"), globals())
139 execfile(rc, globals())
143 if __name__ == "__main__":
144 # parse arguments and discpatch to the correct func
145 parser = argparse.ArgumentParser(description='vlmc tool')
146 parser.add_argument('-c', '--config', type=str, nargs='?', help='config file')
147 subparsers = parser.add_subparsers()
149 create_parser = subparsers.add_parser('create', help='Create volume')
150 #group = create_parser.add_mutually_exclusive_group(required=True)
151 create_parser.add_argument('-s', '--size', type=int, nargs='?', help='requested size in MB for create')
152 create_parser.add_argument('--snap', type=str, nargs='?', help='create from snapshot')
153 create_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
154 create_parser.add_argument('name', type=str, nargs=1, help='volume/device name')
155 create_parser.set_defaults(func=vlmc_create)
157 remove_parser = subparsers.add_parser('remove', help='Delete volume')
158 remove_parser.add_argument('name', type=str, nargs=1, help='volume/device name')
159 remove_parser.set_defaults(func=vlmc_remove)
160 remove_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
162 rm_parser = subparsers.add_parser('rm', help='Delete volume')
163 rm_parser.add_argument('name', type=str, nargs=1, help='volume/device name')
164 rm_parser.set_defaults(func=vlmc_remove)
165 rm_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
167 map_parser = subparsers.add_parser('map', help='Map volume')
168 map_parser.add_argument('name', type=str, nargs=1, help='volume/device name')
169 map_parser.set_defaults(func=vlmc_map)
170 map_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
172 unmap_parser = subparsers.add_parser('unmap', help='Unmap volume')
173 unmap_parser.add_argument('name', type=str, nargs=1, help='volume/device name')
174 unmap_parser.set_defaults(func=vlmc_unmap)
175 unmap_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
177 showmapped_parser = subparsers.add_parser('showmapped', help='Show mapped volumes')
178 showmapped_parser.set_defaults(func=vlmc_showmapped)
179 showmapped_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
181 list_parser = subparsers.add_parser('list', help='List volumes')
182 list_parser.set_defaults(func=vlmc_list)
183 list_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
185 ls_parser = subparsers.add_parser('ls', help='List volumes')
186 ls_parser.set_defaults(func=vlmc_list)
187 ls_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
189 resize_parser = subparsers.add_parser('resize', help='Resize volume')
190 resize_parser.add_argument('-s', '--size', type=int, nargs=1, help='requested size in MB for resize')
191 resize_parser.add_argument('name', type=str, nargs=1, help='volume/device name')
192 resize_parser.set_defaults(func=vlmc_resize)
193 resize_parser.add_argument('-p', '--pool', type=str, nargs='?', help='for backwards compatiblity with rbd')
195 args = parser.parse_args()