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