root / xseg / tools / ganeti-hooks / instance-migrate-pre.d / archip-openvolumes @ 8c732208
History | View | Annotate | Download (1.5 kB)
1 |
#!/usr/bin/env python |
---|---|
2 |
|
3 |
import os |
4 |
import sys |
5 |
|
6 |
from archipelago import vlmc as vlmc |
7 |
from archipelago.common import loadrc |
8 |
|
9 |
def hooks_log(msg): |
10 |
f = open('/var/log/ganeti/hooks.log', 'a') |
11 |
f.write("%s\n" % msg) |
12 |
f.close() |
13 |
|
14 |
|
15 |
def archip_premigrate_disk(idx): |
16 |
provider = os.getenv("GANETI_INSTANCE_DISK%d_PROVIDER" % idx) |
17 |
vol_name = os.getenv("GANETI_INSTANCE_DISK%d_ID" % idx) |
18 |
template = os.getenv("GANETI_INSTANCE_DISK%d_TEMPLATE_NAME" % idx) |
19 |
|
20 |
if template != 'ext': |
21 |
raise Exception("Invalid disk template %s" % template) |
22 |
|
23 |
if provider != 'archipelago' and provider != 'vlmc': |
24 |
raise Exception("Unknown provider %s" % provider) |
25 |
|
26 |
if not vol_name: |
27 |
raise Exception("No volume name provided") |
28 |
|
29 |
hooks_log("Opening volume %s" % vol_name) |
30 |
vlmc.open_volume(name=vol_name) |
31 |
hooks_log("Opened volume %s" % vol_name) |
32 |
|
33 |
|
34 |
def archip_premigrate(): |
35 |
try: |
36 |
count = os.getenv("GANETI_INSTANCE_DISK_COUNT") |
37 |
template = os.getenv("GANETI_INSTANCE_DISK_TEMPLATE") |
38 |
except: |
39 |
return 1 |
40 |
|
41 |
if template != 'ext': |
42 |
return 1 |
43 |
|
44 |
count = int(count) |
45 |
hooks_log("Found %d disks" % count) |
46 |
|
47 |
for i in range(0, count): |
48 |
try: |
49 |
archip_premigrate_disk(i) |
50 |
except Exception as e: |
51 |
msg = "Failed to open volume %d: %s" % (i, e) |
52 |
print msg |
53 |
hooks_log(msg) |
54 |
return 1 |
55 |
|
56 |
return 0 |
57 |
|
58 |
if __name__ == '__main__': |
59 |
loadrc(None) |
60 |
exit(archip_premigrate()) |
61 |
|