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