Statistics
| Branch: | Tag: | Revision:

root / scripts / gnt-debug @ d04aaa2f

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 optparse import make_option
31 fd3ee040 Iustin Pop
32 fd3ee040 Iustin Pop
from ganeti.cli import *
33 9d5ba39a Iustin Pop
from ganeti import cli
34 fd3ee040 Iustin Pop
from ganeti import opcodes
35 fd3ee040 Iustin Pop
from ganeti import constants
36 fd3ee040 Iustin Pop
from ganeti import utils
37 fd3ee040 Iustin Pop
from ganeti import errors
38 fd3ee040 Iustin Pop
39 fd3ee040 Iustin Pop
40 fd3ee040 Iustin Pop
def Delay(opts, args):
41 fd3ee040 Iustin Pop
  """Sleeps for a while
42 fd3ee040 Iustin Pop
43 6099bfcf Iustin Pop
  @param opts: the command line options selected by the user
44 6099bfcf Iustin Pop
  @type args: list
45 6099bfcf Iustin Pop
  @param args: should contain only one element, the duration
46 6099bfcf Iustin Pop
      the sleep
47 6099bfcf Iustin Pop
  @rtype: int
48 6099bfcf Iustin Pop
  @return: the desired exit code
49 6099bfcf Iustin Pop
50 fd3ee040 Iustin Pop
  """
51 fd3ee040 Iustin Pop
  delay = float(args[0])
52 fd3ee040 Iustin Pop
  op = opcodes.OpTestDelay(duration=delay,
53 fd3ee040 Iustin Pop
                           on_master=opts.on_master,
54 fd3ee040 Iustin Pop
                           on_nodes=opts.on_nodes)
55 17621a25 Michael Hanselmann
  SubmitOpCode(op)
56 fd3ee040 Iustin Pop
57 fd3ee040 Iustin Pop
  return 0
58 fd3ee040 Iustin Pop
59 fd3ee040 Iustin Pop
60 f1c66d13 Iustin Pop
def GenericOpCodes(opts, args):
61 6099bfcf Iustin Pop
  """Send any opcode to the master.
62 6099bfcf Iustin Pop
63 6099bfcf Iustin Pop
  @todo: The function is broken and needs to be converted to the
64 6099bfcf Iustin Pop
      current job queue API
65 6099bfcf Iustin Pop
  @param opts: the command line options selected by the user
66 6099bfcf Iustin Pop
  @type args: list
67 6099bfcf Iustin Pop
  @param args: should contain only one element, the path of
68 6099bfcf Iustin Pop
      the file with the opcode definition
69 6099bfcf Iustin Pop
  @rtype: int
70 6099bfcf Iustin Pop
  @return: the desired exit code
71 f1c66d13 Iustin Pop
72 f1c66d13 Iustin Pop
  """
73 9d5ba39a Iustin Pop
  cl = cli.GetClient()
74 99036060 Iustin Pop
  job_data = []
75 99036060 Iustin Pop
  job_ids = []
76 99036060 Iustin Pop
  for fname in args:
77 99036060 Iustin Pop
    op_data = simplejson.loads(open(fname).read())
78 99036060 Iustin Pop
    op_list = [opcodes.OpCode.LoadOpCode(val) for val in op_data]
79 99036060 Iustin Pop
    job_data.append((fname, op_list))
80 99036060 Iustin Pop
  for fname, op_list in job_data:
81 99036060 Iustin Pop
    jid = cli.SendJob(op_list, cl=cl)
82 99036060 Iustin Pop
    ToStdout("File '%s', job id: %s", fname, jid)
83 99036060 Iustin Pop
    job_ids.append(jid)
84 99036060 Iustin Pop
  for jid in job_ids:
85 99036060 Iustin Pop
    ToStdout("Waiting for job id %s", jid)
86 99036060 Iustin Pop
    cli.PollJob(jid, cl=cl)
87 f1c66d13 Iustin Pop
  return 0
88 f1c66d13 Iustin Pop
89 f1c66d13 Iustin Pop
90 d61df03e Iustin Pop
def TestAllocator(opts, args):
91 6099bfcf Iustin Pop
  """Runs the test allocator opcode.
92 d61df03e Iustin Pop
93 6099bfcf Iustin Pop
  @param opts: the command line options selected by the user
94 6099bfcf Iustin Pop
  @type args: list
95 6099bfcf Iustin Pop
  @param args: should contain only one element, the iallocator name
96 6099bfcf Iustin Pop
  @rtype: int
97 6099bfcf Iustin Pop
  @return: the desired exit code
98 6099bfcf Iustin Pop
99 6099bfcf Iustin Pop
  """
100 d61df03e Iustin Pop
  try:
101 d61df03e Iustin Pop
    disks = [{"size": utils.ParseUnit(val), "mode": 'w'}
102 d61df03e Iustin Pop
             for val in opts.disks.split(",")]
103 d61df03e Iustin Pop
  except errors.UnitParseError, err:
104 3a24c527 Iustin Pop
    ToStderr("Invalid disks parameter '%s': %s", opts.disks, err)
105 d61df03e Iustin Pop
    return 1
106 d61df03e Iustin Pop
107 d61df03e Iustin Pop
  nics = [val.split("/") for val in opts.nics.split(",")]
108 d61df03e Iustin Pop
  for row in nics:
109 d61df03e Iustin Pop
    while len(row) < 3:
110 d61df03e Iustin Pop
      row.append(None)
111 d61df03e Iustin Pop
    for i in range(3):
112 d61df03e Iustin Pop
      if row[i] == '':
113 d61df03e Iustin Pop
        row[i] = None
114 d61df03e Iustin Pop
  nic_dict = [{"mac": v[0], "ip": v[1], "bridge": v[2]} for v in nics]
115 d61df03e Iustin Pop
116 d61df03e Iustin Pop
  if opts.tags is None:
117 d61df03e Iustin Pop
    opts.tags = []
118 d61df03e Iustin Pop
  else:
119 d61df03e Iustin Pop
    opts.tags = opts.tags.split(",")
120 d61df03e Iustin Pop
121 d61df03e Iustin Pop
  op = opcodes.OpTestAllocator(mode=opts.mode,
122 d61df03e Iustin Pop
                               name=args[0],
123 d61df03e Iustin Pop
                               mem_size=opts.mem,
124 d61df03e Iustin Pop
                               disks=disks,
125 d61df03e Iustin Pop
                               disk_template=opts.disk_template,
126 d61df03e Iustin Pop
                               nics=nic_dict,
127 d61df03e Iustin Pop
                               os=opts.os_type,
128 d61df03e Iustin Pop
                               vcpus=opts.vcpus,
129 d61df03e Iustin Pop
                               tags=opts.tags,
130 d61df03e Iustin Pop
                               direction=opts.direction,
131 d61df03e Iustin Pop
                               allocator=opts.allocator,
132 d61df03e Iustin Pop
                               )
133 d61df03e Iustin Pop
  result = SubmitOpCode(op)
134 3a24c527 Iustin Pop
  ToStdout("%s" % result)
135 d61df03e Iustin Pop
  return 0
136 d61df03e Iustin Pop
137 d61df03e Iustin Pop
138 fd3ee040 Iustin Pop
commands = {
139 fd3ee040 Iustin Pop
  'delay': (Delay, ARGS_ONE,
140 fd3ee040 Iustin Pop
            [DEBUG_OPT,
141 fd3ee040 Iustin Pop
             make_option("--no-master", dest="on_master", default=True,
142 fd3ee040 Iustin Pop
                         action="store_false",
143 fd3ee040 Iustin Pop
                         help="Do not sleep in the master code"),
144 fd3ee040 Iustin Pop
             make_option("-n", dest="on_nodes", default=[],
145 fd3ee040 Iustin Pop
                         action="append",
146 fd3ee040 Iustin Pop
                         help="Select nodes to sleep on"),
147 fd3ee040 Iustin Pop
             ],
148 9a033156 Iustin Pop
            "[opts...] <duration>", "Executes a TestDelay OpCode"),
149 99036060 Iustin Pop
  'submit-job': (GenericOpCodes, ARGS_ATLEAST(1),
150 f1c66d13 Iustin Pop
                 [DEBUG_OPT,
151 f1c66d13 Iustin Pop
                  ],
152 99036060 Iustin Pop
                 "<op_list_file...>", "Submits jobs built from json files"
153 99036060 Iustin Pop
                 " containing a list of serialized opcodes"),
154 d61df03e Iustin Pop
  'allocator': (TestAllocator, ARGS_ONE,
155 d61df03e Iustin Pop
                [DEBUG_OPT,
156 d61df03e Iustin Pop
                 make_option("--dir", dest="direction",
157 d61df03e Iustin Pop
                             default="in", choices=["in", "out"],
158 d61df03e Iustin Pop
                             help="Show allocator input (in) or allocator"
159 d61df03e Iustin Pop
                             " results (out)"),
160 d61df03e Iustin Pop
                 make_option("--algorithm", dest="allocator",
161 d61df03e Iustin Pop
                             default=None,
162 d61df03e Iustin Pop
                             help="Allocator algorithm name"),
163 d61df03e Iustin Pop
                 make_option("-m", "--mode", default="relocate",
164 d61df03e Iustin Pop
                             choices=["relocate", "allocate"],
165 d61df03e Iustin Pop
                             help="Request mode, either allocate or"
166 8901997e Iustin Pop
                             " relocate"),
167 d61df03e Iustin Pop
                 cli_option("--mem", default=128, type="unit",
168 d61df03e Iustin Pop
                            help="Memory size for the instance (MiB)"),
169 d61df03e Iustin Pop
                 make_option("--disks", default="4096,4096",
170 d61df03e Iustin Pop
                             help="Comma separated list of disk sizes (MiB)"),
171 d61df03e Iustin Pop
                 make_option("-t", "--disk-template", default="drbd",
172 d61df03e Iustin Pop
                             help="Select the disk template"),
173 d61df03e Iustin Pop
                 make_option("--nics", default="00:11:22:33:44:55",
174 d61df03e Iustin Pop
                             help="Comma separated list of nics, each nic"
175 d61df03e Iustin Pop
                             " definition is of form mac/ip/bridge, if"
176 d61df03e Iustin Pop
                             " missing values are replace by None"),
177 d61df03e Iustin Pop
                 make_option("-o", "--os-type", default=None,
178 d61df03e Iustin Pop
                             help="Select os for the instance"),
179 d61df03e Iustin Pop
                 make_option("-p", "--vcpus", default=1, type="int",
180 d61df03e Iustin Pop
                             help="Select number of VCPUs for the instance"),
181 d61df03e Iustin Pop
                 make_option("--tags", default=None,
182 d61df03e Iustin Pop
                             help="Comma separated list of tags"),
183 d61df03e Iustin Pop
                 ],
184 9a033156 Iustin Pop
                "{opts...} <instance>", "Executes a TestAllocator OpCode"),
185 fd3ee040 Iustin Pop
  }
186 fd3ee040 Iustin Pop
187 fd3ee040 Iustin Pop
188 fd3ee040 Iustin Pop
if __name__ == '__main__':
189 fd3ee040 Iustin Pop
  sys.exit(GenericMain(commands))