Statistics
| Branch: | Revision:

root / rbd / create @ master

History | View | Annotate | Download (2.6 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
"""Create a new rbd Image inside a RADOS cluster
21 35acd6c9 Dimitris Aragiorgis
22 35acd6c9 Dimitris Aragiorgis
This program creates a new rbd Image file inside a RADOS cluster.
23 35acd6c9 Dimitris Aragiorgis
It takes it's input from environment variables. Specifically the
24 35acd6c9 Dimitris Aragiorgis
following variables should be present:
25 35acd6c9 Dimitris Aragiorgis
26 35acd6c9 Dimitris Aragiorgis
 - VOL_NAME: The name of the new Image file
27 35acd6c9 Dimitris Aragiorgis
 - POOL:     The RADOS pool in which to put the Image
28 35acd6c9 Dimitris Aragiorgis
 - VOL_SIZE: The size of the new Image (in megabytes)
29 35acd6c9 Dimitris Aragiorgis
30 35acd6c9 Dimitris Aragiorgis
Returns O after successfull creation, 1 on failure
31 35acd6c9 Dimitris Aragiorgis
32 35acd6c9 Dimitris Aragiorgis
"""
33 35acd6c9 Dimitris Aragiorgis
34 35acd6c9 Dimitris Aragiorgis
import os
35 35acd6c9 Dimitris Aragiorgis
import sys
36 35acd6c9 Dimitris Aragiorgis
37 68abdf0d Dimitris Aragiorgis
sys.path.insert(0, "/etc/ganeti/share")
38 35acd6c9 Dimitris Aragiorgis
39 35acd6c9 Dimitris Aragiorgis
from ganeti import utils
40 35acd6c9 Dimitris Aragiorgis
41 35acd6c9 Dimitris Aragiorgis
42 35acd6c9 Dimitris Aragiorgis
def ReadEnv():
43 35acd6c9 Dimitris Aragiorgis
  """Read the mandatory enviromental variables
44 35acd6c9 Dimitris Aragiorgis
45 35acd6c9 Dimitris Aragiorgis
  """
46 35acd6c9 Dimitris Aragiorgis
  name = os.getenv("VOL_NAME")
47 35acd6c9 Dimitris Aragiorgis
  if name is None:
48 35acd6c9 Dimitris Aragiorgis
    sys.stderr.write('The environment variable VOL_NAME is missing.\n')
49 35acd6c9 Dimitris Aragiorgis
    sys.exit(1)
50 35acd6c9 Dimitris Aragiorgis
#  pool = os.getenv("POOL")
51 35acd6c9 Dimitris Aragiorgis
  pool = "rbd"
52 35acd6c9 Dimitris Aragiorgis
  if pool is None:
53 35acd6c9 Dimitris Aragiorgis
    sys.stderr.write('The environment variable POOL is missing.\n')
54 35acd6c9 Dimitris Aragiorgis
    sys.exit(1)
55 35acd6c9 Dimitris Aragiorgis
  size = os.getenv("VOL_SIZE")
56 35acd6c9 Dimitris Aragiorgis
  if size is None:
57 35acd6c9 Dimitris Aragiorgis
    sys.stderr.write('The environment variable VOL_SIZE is missing.\n')
58 35acd6c9 Dimitris Aragiorgis
    sys.exit(1)
59 35acd6c9 Dimitris Aragiorgis
  test_param = os.getenv("EXTP_TEST")
60 35acd6c9 Dimitris Aragiorgis
  if test_param:
61 35acd6c9 Dimitris Aragiorgis
    sys.stderr.write('parameter test = %s\n' % test_param)
62 35acd6c9 Dimitris Aragiorgis
63 35acd6c9 Dimitris Aragiorgis
64 35acd6c9 Dimitris Aragiorgis
  return (name, pool, size)
65 35acd6c9 Dimitris Aragiorgis
66 35acd6c9 Dimitris Aragiorgis
67 35acd6c9 Dimitris Aragiorgis
def main():
68 35acd6c9 Dimitris Aragiorgis
  sys.stderr.write('Creation started...\n')
69 35acd6c9 Dimitris Aragiorgis
  env = ReadEnv()
70 35acd6c9 Dimitris Aragiorgis
  if env is None:
71 35acd6c9 Dimitris Aragiorgis
    sys.stderr.write('Wrong environment. Aborting...\n')
72 35acd6c9 Dimitris Aragiorgis
    sys.exit(1)
73 35acd6c9 Dimitris Aragiorgis
74 35acd6c9 Dimitris Aragiorgis
  rbd_name, rbd_pool, size = env
75 35acd6c9 Dimitris Aragiorgis
76 35acd6c9 Dimitris Aragiorgis
  sys.stderr.write('name: %s, pool: %s, size: %s\n' % (rbd_name, rbd_pool, size))
77 35acd6c9 Dimitris Aragiorgis
  cmd = ["rbd", "create", "-p", "%s" % rbd_pool,
78 35acd6c9 Dimitris Aragiorgis
         "%s" % rbd_name, "--size", "%s" % size]
79 35acd6c9 Dimitris Aragiorgis
  sys.stderr.write('Before RunCmd')
80 35acd6c9 Dimitris Aragiorgis
  result = utils.RunCmd(cmd)
81 35acd6c9 Dimitris Aragiorgis
  sys.stderr.write('After RunCmd')
82 35acd6c9 Dimitris Aragiorgis
  if result.failed:
83 35acd6c9 Dimitris Aragiorgis
    sys.stderr.write('rbd creation failed (%s): %s\n' %
84 35acd6c9 Dimitris Aragiorgis
                     (result.fail_reason, result.output))
85 35acd6c9 Dimitris Aragiorgis
    sys.exit(1)
86 35acd6c9 Dimitris Aragiorgis
87 35acd6c9 Dimitris Aragiorgis
  sys.exit(0)
88 35acd6c9 Dimitris Aragiorgis
89 35acd6c9 Dimitris Aragiorgis
90 35acd6c9 Dimitris Aragiorgis
if __name__ == "__main__":
91 35acd6c9 Dimitris Aragiorgis
    sys.exit(main())