root / rbd / grow @ master
History | View | Annotate | Download (2.3 kB)
1 | 35acd6c9 | Dimitris Aragiorgis | #!/usr/bin/env python |
---|---|---|---|
2 | 35acd6c9 | Dimitris Aragiorgis | # |
3 | 35acd6c9 | Dimitris Aragiorgis | # Copyright (C) 2011 Greek Research and Technology Network |
4 | 35acd6c9 | Dimitris Aragiorgis | # |
5 | 35acd6c9 | Dimitris Aragiorgis | # This program is free software; you can redistribute it and/or modify |
6 | 35acd6c9 | Dimitris Aragiorgis | # it under the terms of the GNU General Public License as published by |
7 | 35acd6c9 | Dimitris Aragiorgis | # the Free Software Foundation; either version 2 of the License, or |
8 | 35acd6c9 | Dimitris Aragiorgis | # (at your option) any later version. |
9 | 35acd6c9 | Dimitris Aragiorgis | # |
10 | 35acd6c9 | Dimitris Aragiorgis | # This program is distributed in the hope that it will be useful, but |
11 | 35acd6c9 | Dimitris Aragiorgis | # WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | 35acd6c9 | Dimitris Aragiorgis | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
13 | 35acd6c9 | Dimitris Aragiorgis | # General Public License for more details. |
14 | 35acd6c9 | Dimitris Aragiorgis | # |
15 | 35acd6c9 | Dimitris Aragiorgis | # You should have received a copy of the GNU General Public License |
16 | 35acd6c9 | Dimitris Aragiorgis | # along with this program; if not, write to the Free Software |
17 | 35acd6c9 | Dimitris Aragiorgis | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
18 | 35acd6c9 | Dimitris Aragiorgis | # 02110-1301, USA. |
19 | 35acd6c9 | Dimitris Aragiorgis | |
20 | 35acd6c9 | Dimitris Aragiorgis | """Grow an existing rbd Image |
21 | 35acd6c9 | Dimitris Aragiorgis | |
22 | 35acd6c9 | Dimitris Aragiorgis | This program grows an existing rbd Image which resides in a |
23 | 35acd6c9 | Dimitris Aragiorgis | RADOS cluster |
24 | 35acd6c9 | Dimitris Aragiorgis | |
25 | 35acd6c9 | Dimitris Aragiorgis | It takes it's input from environment variables. Specifically the |
26 | 35acd6c9 | Dimitris Aragiorgis | following variables should be present: |
27 | 35acd6c9 | Dimitris Aragiorgis | |
28 | 35acd6c9 | Dimitris Aragiorgis | - VOL_NAME: The name of the Image to grow |
29 | 35acd6c9 | Dimitris Aragiorgis | - POOL: The RADOS pool in which the Image resides |
30 | 35acd6c9 | Dimitris Aragiorgis | - VOL_SIZE: The current Image's size |
31 | 35acd6c9 | Dimitris Aragiorgis | - VOL_NEW_SIZE: The new size of the Image after it's grown |
32 | 35acd6c9 | Dimitris Aragiorgis | |
33 | 35acd6c9 | Dimitris Aragiorgis | Returns 0 upon successful grow, 1 upon failure |
34 | 35acd6c9 | Dimitris Aragiorgis | |
35 | 35acd6c9 | Dimitris Aragiorgis | """ |
36 | 35acd6c9 | Dimitris Aragiorgis | |
37 | 35acd6c9 | Dimitris Aragiorgis | import os |
38 | 35acd6c9 | Dimitris Aragiorgis | import sys |
39 | 35acd6c9 | Dimitris Aragiorgis | |
40 | 68abdf0d | Dimitris Aragiorgis | sys.path.insert(0, "/etc/ganeti/share") |
41 | 35acd6c9 | Dimitris Aragiorgis | |
42 | 35acd6c9 | Dimitris Aragiorgis | from ganeti import utils |
43 | 35acd6c9 | Dimitris Aragiorgis | |
44 | 35acd6c9 | Dimitris Aragiorgis | |
45 | 35acd6c9 | Dimitris Aragiorgis | def ReadEnv(): |
46 | 35acd6c9 | Dimitris Aragiorgis | """Read the mandatory enviromental variables |
47 | 35acd6c9 | Dimitris Aragiorgis | |
48 | 35acd6c9 | Dimitris Aragiorgis | """ |
49 | 35acd6c9 | Dimitris Aragiorgis | name = os.getenv("VOL_NAME") |
50 | 35acd6c9 | Dimitris Aragiorgis | if name is None: |
51 | 35acd6c9 | Dimitris Aragiorgis | sys.stderr.write('The environment variable VOL_NAME is missing.\n') |
52 | 35acd6c9 | Dimitris Aragiorgis | return None |
53 | 35acd6c9 | Dimitris Aragiorgis | # pool = os.getenv("POOL") |
54 | 35acd6c9 | Dimitris Aragiorgis | pool = "rbd" |
55 | 35acd6c9 | Dimitris Aragiorgis | if pool is None: |
56 | 35acd6c9 | Dimitris Aragiorgis | sys.stderr.write('The environment variable POOL is missing.\n') |
57 | 35acd6c9 | Dimitris Aragiorgis | return None |
58 | 35acd6c9 | Dimitris Aragiorgis | new_size = os.getenv("VOL_NEW_SIZE") |
59 | 35acd6c9 | Dimitris Aragiorgis | if new_size is None: |
60 | 35acd6c9 | Dimitris Aragiorgis | sys.stderr.write('The environment variable VOL_NEW_SIZE is missing.\n') |
61 | 35acd6c9 | Dimitris Aragiorgis | return None |
62 | 35acd6c9 | Dimitris Aragiorgis | |
63 | 35acd6c9 | Dimitris Aragiorgis | return (name, pool, new_size) |
64 | 35acd6c9 | Dimitris Aragiorgis | |
65 | 35acd6c9 | Dimitris Aragiorgis | |
66 | 35acd6c9 | Dimitris Aragiorgis | def main(): |
67 | 35acd6c9 | Dimitris Aragiorgis | env = ReadEnv() |
68 | 35acd6c9 | Dimitris Aragiorgis | if env is None: |
69 | 35acd6c9 | Dimitris Aragiorgis | sys.stderr.write('Wrong environment. Aborting...\n') |
70 | 35acd6c9 | Dimitris Aragiorgis | return 1 |
71 | 35acd6c9 | Dimitris Aragiorgis | |
72 | 35acd6c9 | Dimitris Aragiorgis | rbd_name, rbd_pool, new_size = env |
73 | 35acd6c9 | Dimitris Aragiorgis | |
74 | 35acd6c9 | Dimitris Aragiorgis | cmd = ["rbd", "resize", "-p", "%s" % rbd_pool, "%s" % rbd_name, |
75 | 35acd6c9 | Dimitris Aragiorgis | "--size", "%s" % new_size] |
76 | 35acd6c9 | Dimitris Aragiorgis | result = utils.RunCmd(cmd) |
77 | 35acd6c9 | Dimitris Aragiorgis | if result.failed: |
78 | 35acd6c9 | Dimitris Aragiorgis | sys.stderr.write('rbd resize failed (%s): %s\n' % |
79 | 35acd6c9 | Dimitris Aragiorgis | (result.fail_reason, result.output)) |
80 | 35acd6c9 | Dimitris Aragiorgis | return 1 |
81 | 35acd6c9 | Dimitris Aragiorgis | |
82 | 35acd6c9 | Dimitris Aragiorgis | return 0 |
83 | 35acd6c9 | Dimitris Aragiorgis | |
84 | 35acd6c9 | Dimitris Aragiorgis | |
85 | 35acd6c9 | Dimitris Aragiorgis | if __name__ == "__main__": |
86 | 35acd6c9 | Dimitris Aragiorgis | sys.exit(main()) |