Statistics
| Branch: | Tag: | Revision:

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