Fix imports in vlmc tool
[archipelago] / xseg / tools / vlmc_shared.py
1 # shared funcs for both blockd and filed
2
3 import os, sys, shutil, glob, argparse
4
5 XSEG_HOME="/root/archip/xseg/"
6 IMAGES="/srv/archip/"
7 XSEGBD_SYSFS="/sys/bus/xsegbd/"
8 DEVICE_PREFIX="/dev/xsegbd"
9 BLOCKD_LOGS="/root/archip_logs/"
10 FILED_PORT=0
11 NR_OPS=16
12 REQS=512
13
14 def vlmc_list(args):
15     print "name\t\t\t\tsize"
16     try:
17         for f in glob.glob(IMAGES + '*'):
18             print "%s\t\t\t\t%dM" % (os.path.basename(f), os.stat(f).st_size / 1024 / 1024)
19
20         sys.exit(0)
21     except Exception, reason:
22         print >> sys.stderr, reason
23         sys.exit(-1)
24
25 def vlmc_create(args):
26     name = args.name[0]
27     size = args.size
28     snap = args.snap
29
30     if size == None and snap == None:
31         print >> sys.stderr, "At least one of the size/snap args must be provided"
32         sys.exit(-1)
33
34     try:
35         old_dir = os.getcwd()
36         os.chdir(IMAGES)
37
38         try:
39             os.stat(name)
40             print "file exists"
41             os.chdir(old_dir)
42             sys.exit(-1)
43         except:
44             pass
45
46         if size != None:
47             size *= 1024*1024
48
49             if snap != None and size < os.stat(snap).st_size:
50                 print >> sys.stderr, "Given size smaller than snapshot volume size"
51                 sys.exit(-1)
52
53         if snap != None:
54             shutil.copy(snap, name)
55             if size != None:
56                 f = os.open(name, os.O_WRONLY)
57         else:
58             f = os.open(name, os.O_CREAT | os.O_WRONLY, 0755)
59
60         if size != None:
61             os.lseek(f, size - 1, os.SEEK_SET)
62             os.write(f, "1")
63             os.close(f)
64
65         os.chdir(old_dir)
66         sys.exit(0)
67     except Exception, reason:
68         print >> sys.stderr, reason
69         sys.exit(-1)
70
71 def vlmc_remove(args):
72     name = args.name[0]
73
74     try:
75         old_dir = os.getcwd()
76         os.chdir(IMAGES)
77
78         try:
79             os.stat(name)
80         except:
81             print "file doesn't exist"
82             os.chdir(old_dir)
83             sys.exit(-1)
84
85         os.unlink(IMAGES + '/' + name)
86
87         os.chdir(old_dir)
88         sys.exit(0)
89     except Exception, reason:
90         print >> sys.stderr, reason
91         sys.exit(-1)
92
93 def xsegbd_loaded():
94     try:
95         os.stat("/sys/bus/xsegbd")
96     except Exception, reason:
97         print >> sys.stderr, reason
98         sys.exit(-1)
99
100 def vlmc_resize(args):
101     name = args.name[0]
102     size = args.size[0]
103
104     try:
105         old_dir = os.getcwd()
106         os.chdir(IMAGES)
107
108         size *= 1024*1024
109
110         f = os.open(name, os.O_WRONLY, 0755)
111         if size >= os.stat(name).st_size:
112             os.lseek(f, size - 1, os.SEEK_SET)
113             os.write(f, "1")
114         else:
115             os.ftruncate(f, size)
116
117         os.close(f)
118         os.chdir(old_dir)
119
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()
123             if name == d_name:
124                 fd = os.open(XSEGBD_SYSFS + "devices/" +  d_id +"/refresh", os.O_WRONLY)
125                 os.write(fd, "1")
126                 os.close(fd)
127
128         sys.exit(0)
129     except Exception, reason:
130         print >> sys.stderr, reason
131         sys.exit(-1)
132
133 def loadrc(rc):
134     #FIXME
135     try:
136         if rc == None:
137             execfile(os.path.expanduser("~/.xsegrc"), globals())
138         else:
139             execfile(rc, globals())
140     except:
141         pass