Statistics
| Branch: | Tag: | Revision:

root / scripts / gnt-debug @ a52ba89d

History | View | Annotate | Download (6.5 kB)

1 fd3ee040 Iustin Pop
#!/usr/bin/python
2 fd3ee040 Iustin Pop
#
3 fd3ee040 Iustin Pop
4 fd3ee040 Iustin Pop
# Copyright (C) 2006, 2007 Google Inc.
5 fd3ee040 Iustin Pop
#
6 fd3ee040 Iustin Pop
# This program is free software; you can redistribute it and/or modify
7 fd3ee040 Iustin Pop
# it under the terms of the GNU General Public License as published by
8 fd3ee040 Iustin Pop
# the Free Software Foundation; either version 2 of the License, or
9 fd3ee040 Iustin Pop
# (at your option) any later version.
10 fd3ee040 Iustin Pop
#
11 fd3ee040 Iustin Pop
# This program is distributed in the hope that it will be useful, but
12 fd3ee040 Iustin Pop
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 fd3ee040 Iustin Pop
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 fd3ee040 Iustin Pop
# General Public License for more details.
15 fd3ee040 Iustin Pop
#
16 fd3ee040 Iustin Pop
# You should have received a copy of the GNU General Public License
17 fd3ee040 Iustin Pop
# along with this program; if not, write to the Free Software
18 fd3ee040 Iustin Pop
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 fd3ee040 Iustin Pop
# 02110-1301, USA.
20 fd3ee040 Iustin Pop
21 fd3ee040 Iustin Pop
22 2f79bd34 Iustin Pop
# pylint: disable-msg=W0401,W0614
23 2f79bd34 Iustin Pop
# W0401: Wildcard import ganeti.cli
24 2f79bd34 Iustin Pop
# W0614: Unused import %s from wildcard import (since we need cli)
25 2f79bd34 Iustin Pop
26 fd3ee040 Iustin Pop
import sys
27 f1c66d13 Iustin Pop
import simplejson
28 f1c66d13 Iustin Pop
import time
29 f1c66d13 Iustin Pop
30 fd3ee040 Iustin Pop
from ganeti.cli import *
31 9d5ba39a Iustin Pop
from ganeti import cli
32 fd3ee040 Iustin Pop
from ganeti import opcodes
33 fd3ee040 Iustin Pop
from ganeti import constants
34 fd3ee040 Iustin Pop
from ganeti import utils
35 fd3ee040 Iustin Pop
from ganeti import errors
36 fd3ee040 Iustin Pop
37 fd3ee040 Iustin Pop
38 fd3ee040 Iustin Pop
def Delay(opts, args):
39 fd3ee040 Iustin Pop
  """Sleeps for a while
40 fd3ee040 Iustin Pop
41 6099bfcf Iustin Pop
  @param opts: the command line options selected by the user
42 6099bfcf Iustin Pop
  @type args: list
43 6099bfcf Iustin Pop
  @param args: should contain only one element, the duration
44 6099bfcf Iustin Pop
      the sleep
45 6099bfcf Iustin Pop
  @rtype: int
46 6099bfcf Iustin Pop
  @return: the desired exit code
47 6099bfcf Iustin Pop
48 fd3ee040 Iustin Pop
  """
49 fd3ee040 Iustin Pop
  delay = float(args[0])
50 fd3ee040 Iustin Pop
  op = opcodes.OpTestDelay(duration=delay,
51 fd3ee040 Iustin Pop
                           on_master=opts.on_master,
52 fd3ee040 Iustin Pop
                           on_nodes=opts.on_nodes)
53 17621a25 Michael Hanselmann
  SubmitOpCode(op)
54 fd3ee040 Iustin Pop
55 fd3ee040 Iustin Pop
  return 0
56 fd3ee040 Iustin Pop
57 fd3ee040 Iustin Pop
58 f1c66d13 Iustin Pop
def GenericOpCodes(opts, args):
59 6099bfcf Iustin Pop
  """Send any opcode to the master.
60 6099bfcf Iustin Pop
61 6099bfcf Iustin Pop
  @todo: The function is broken and needs to be converted to the
62 6099bfcf Iustin Pop
      current job queue API
63 6099bfcf Iustin Pop
  @param opts: the command line options selected by the user
64 6099bfcf Iustin Pop
  @type args: list
65 6099bfcf Iustin Pop
  @param args: should contain only one element, the path of
66 6099bfcf Iustin Pop
      the file with the opcode definition
67 6099bfcf Iustin Pop
  @rtype: int
68 6099bfcf Iustin Pop
  @return: the desired exit code
69 f1c66d13 Iustin Pop
70 f1c66d13 Iustin Pop
  """
71 9d5ba39a Iustin Pop
  cl = cli.GetClient()
72 b59252fe Iustin Pop
  jex = cli.JobExecutor(cl=cl)
73 b59252fe Iustin Pop
74 99036060 Iustin Pop
  for fname in args:
75 99036060 Iustin Pop
    op_data = simplejson.loads(open(fname).read())
76 99036060 Iustin Pop
    op_list = [opcodes.OpCode.LoadOpCode(val) for val in op_data]
77 b59252fe Iustin Pop
    jex.QueueJob("file %s" % fname, *op_list)
78 b59252fe Iustin Pop
79 b59252fe Iustin Pop
  jex.GetResults()
80 f1c66d13 Iustin Pop
  return 0
81 f1c66d13 Iustin Pop
82 f1c66d13 Iustin Pop
83 d61df03e Iustin Pop
def TestAllocator(opts, args):
84 6099bfcf Iustin Pop
  """Runs the test allocator opcode.
85 d61df03e Iustin Pop
86 6099bfcf Iustin Pop
  @param opts: the command line options selected by the user
87 6099bfcf Iustin Pop
  @type args: list
88 6099bfcf Iustin Pop
  @param args: should contain only one element, the iallocator name
89 6099bfcf Iustin Pop
  @rtype: int
90 6099bfcf Iustin Pop
  @return: the desired exit code
91 6099bfcf Iustin Pop
92 6099bfcf Iustin Pop
  """
93 d61df03e Iustin Pop
  try:
94 d61df03e Iustin Pop
    disks = [{"size": utils.ParseUnit(val), "mode": 'w'}
95 d61df03e Iustin Pop
             for val in opts.disks.split(",")]
96 d61df03e Iustin Pop
  except errors.UnitParseError, err:
97 3a24c527 Iustin Pop
    ToStderr("Invalid disks parameter '%s': %s", opts.disks, err)
98 d61df03e Iustin Pop
    return 1
99 d61df03e Iustin Pop
100 d61df03e Iustin Pop
  nics = [val.split("/") for val in opts.nics.split(",")]
101 d61df03e Iustin Pop
  for row in nics:
102 d61df03e Iustin Pop
    while len(row) < 3:
103 d61df03e Iustin Pop
      row.append(None)
104 d61df03e Iustin Pop
    for i in range(3):
105 d61df03e Iustin Pop
      if row[i] == '':
106 d61df03e Iustin Pop
        row[i] = None
107 d61df03e Iustin Pop
  nic_dict = [{"mac": v[0], "ip": v[1], "bridge": v[2]} for v in nics]
108 d61df03e Iustin Pop
109 d61df03e Iustin Pop
  if opts.tags is None:
110 d61df03e Iustin Pop
    opts.tags = []
111 d61df03e Iustin Pop
  else:
112 d61df03e Iustin Pop
    opts.tags = opts.tags.split(",")
113 d61df03e Iustin Pop
114 d61df03e Iustin Pop
  op = opcodes.OpTestAllocator(mode=opts.mode,
115 d61df03e Iustin Pop
                               name=args[0],
116 d61df03e Iustin Pop
                               mem_size=opts.mem,
117 d61df03e Iustin Pop
                               disks=disks,
118 d61df03e Iustin Pop
                               disk_template=opts.disk_template,
119 d61df03e Iustin Pop
                               nics=nic_dict,
120 d61df03e Iustin Pop
                               os=opts.os_type,
121 d61df03e Iustin Pop
                               vcpus=opts.vcpus,
122 d61df03e Iustin Pop
                               tags=opts.tags,
123 d61df03e Iustin Pop
                               direction=opts.direction,
124 d61df03e Iustin Pop
                               allocator=opts.allocator,
125 d61df03e Iustin Pop
                               )
126 d61df03e Iustin Pop
  result = SubmitOpCode(op)
127 3a24c527 Iustin Pop
  ToStdout("%s" % result)
128 d61df03e Iustin Pop
  return 0
129 d61df03e Iustin Pop
130 d61df03e Iustin Pop
131 fd3ee040 Iustin Pop
commands = {
132 a8005e17 Michael Hanselmann
  'delay': (Delay, [ArgUnknown(min=1, max=1)],
133 fd3ee040 Iustin Pop
            [DEBUG_OPT,
134 c38c44ad Michael Hanselmann
             cli_option("--no-master", dest="on_master", default=True,
135 c38c44ad Michael Hanselmann
                        action="store_false",
136 c38c44ad Michael Hanselmann
                        help="Do not sleep in the master code"),
137 c38c44ad Michael Hanselmann
             cli_option("-n", dest="on_nodes", default=[],
138 c38c44ad Michael Hanselmann
                        action="append",
139 c38c44ad Michael Hanselmann
                        help="Select nodes to sleep on"),
140 fd3ee040 Iustin Pop
             ],
141 9a033156 Iustin Pop
            "[opts...] <duration>", "Executes a TestDelay OpCode"),
142 a8005e17 Michael Hanselmann
  'submit-job': (GenericOpCodes, [ArgFile(min=1)], [DEBUG_OPT],
143 99036060 Iustin Pop
                 "<op_list_file...>", "Submits jobs built from json files"
144 99036060 Iustin Pop
                 " containing a list of serialized opcodes"),
145 4a265c08 Michael Hanselmann
  'allocator': (TestAllocator, ARGS_ONE_INSTANCE,
146 d61df03e Iustin Pop
                [DEBUG_OPT,
147 c38c44ad Michael Hanselmann
                 cli_option("--dir", dest="direction",
148 c38c44ad Michael Hanselmann
                            default="in", choices=["in", "out"],
149 c38c44ad Michael Hanselmann
                            help="Show allocator input (in) or allocator"
150 c38c44ad Michael Hanselmann
                            " results (out)"),
151 c38c44ad Michael Hanselmann
                 cli_option("--algorithm", dest="allocator",
152 c38c44ad Michael Hanselmann
                            default=None,
153 a52ba89d Michael Hanselmann
                            help="Allocator algorithm name",
154 a52ba89d Michael Hanselmann
                            completion_suggest=OPT_COMPL_ONE_IALLOCATOR),
155 c38c44ad Michael Hanselmann
                 cli_option("-m", "--mode", default="relocate",
156 c38c44ad Michael Hanselmann
                            choices=["relocate", "allocate"],
157 c38c44ad Michael Hanselmann
                            help="Request mode, either allocate or"
158 c38c44ad Michael Hanselmann
                            " relocate"),
159 d61df03e Iustin Pop
                 cli_option("--mem", default=128, type="unit",
160 d61df03e Iustin Pop
                            help="Memory size for the instance (MiB)"),
161 c38c44ad Michael Hanselmann
                 cli_option("--disks", default="4096,4096",
162 c38c44ad Michael Hanselmann
                            help="Comma separated list of disk sizes (MiB)"),
163 c38c44ad Michael Hanselmann
                 cli_option("-t", "--disk-template", default="drbd",
164 224b89fa Michael Hanselmann
                            help="Select the disk template",
165 224b89fa Michael Hanselmann
                            choices=list(constants.DISK_TEMPLATES)),
166 c38c44ad Michael Hanselmann
                 cli_option("--nics", default="00:11:22:33:44:55",
167 c38c44ad Michael Hanselmann
                            help="Comma separated list of nics, each nic"
168 c38c44ad Michael Hanselmann
                            " definition is of form mac/ip/bridge, if"
169 c38c44ad Michael Hanselmann
                            " missing values are replace by None"),
170 c38c44ad Michael Hanselmann
                 cli_option("-o", "--os-type", default=None,
171 a52ba89d Michael Hanselmann
                            help="Select os for the instance",
172 a52ba89d Michael Hanselmann
                            completion_suggest=OPT_COMPL_ONE_OS),
173 c38c44ad Michael Hanselmann
                 cli_option("-p", "--vcpus", default=1, type="int",
174 c38c44ad Michael Hanselmann
                            help="Select number of VCPUs for the instance"),
175 c38c44ad Michael Hanselmann
                 cli_option("--tags", default=None,
176 c38c44ad Michael Hanselmann
                            help="Comma separated list of tags"),
177 d61df03e Iustin Pop
                 ],
178 9a033156 Iustin Pop
                "{opts...} <instance>", "Executes a TestAllocator OpCode"),
179 fd3ee040 Iustin Pop
  }
180 fd3ee040 Iustin Pop
181 fd3ee040 Iustin Pop
182 fd3ee040 Iustin Pop
if __name__ == '__main__':
183 fd3ee040 Iustin Pop
  sys.exit(GenericMain(commands))