Statistics
| Branch: | Revision:

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())