Statistics
| Branch: | Tag: | Revision:

root / scripts / gnt-debug @ 19708787

History | View | Annotate | Download (6.3 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 f1c66d13 Iustin Pop
  fname = args[0]
75 f1c66d13 Iustin Pop
  op_data = simplejson.loads(open(fname).read())
76 f1c66d13 Iustin Pop
  op_list = [opcodes.OpCode.LoadOpCode(val) for val in op_data]
77 9d5ba39a Iustin Pop
  jid = cli.SendJob(op_list, cl=cl)
78 3a24c527 Iustin Pop
  ToStdout("Job id: %s", jid)
79 9d5ba39a Iustin Pop
  cli.PollJob(jid, cl=cl)
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 fd3ee040 Iustin Pop
  'delay': (Delay, ARGS_ONE,
133 fd3ee040 Iustin Pop
            [DEBUG_OPT,
134 fd3ee040 Iustin Pop
             make_option("--no-master", dest="on_master", default=True,
135 fd3ee040 Iustin Pop
                         action="store_false",
136 fd3ee040 Iustin Pop
                         help="Do not sleep in the master code"),
137 fd3ee040 Iustin Pop
             make_option("-n", dest="on_nodes", default=[],
138 fd3ee040 Iustin Pop
                         action="append",
139 fd3ee040 Iustin Pop
                         help="Select nodes to sleep on"),
140 fd3ee040 Iustin Pop
             ],
141 9a033156 Iustin Pop
            "[opts...] <duration>", "Executes a TestDelay OpCode"),
142 f1c66d13 Iustin Pop
  'submit-job': (GenericOpCodes, ARGS_ONE,
143 f1c66d13 Iustin Pop
                 [DEBUG_OPT,
144 f1c66d13 Iustin Pop
                  ],
145 9a033156 Iustin Pop
                 "<op_list_file>", "Submits a job built from a json-file"
146 f1c66d13 Iustin Pop
                 " with a list of serialized opcodes"),
147 d61df03e Iustin Pop
  'allocator': (TestAllocator, ARGS_ONE,
148 d61df03e Iustin Pop
                [DEBUG_OPT,
149 d61df03e Iustin Pop
                 make_option("--dir", dest="direction",
150 d61df03e Iustin Pop
                             default="in", choices=["in", "out"],
151 d61df03e Iustin Pop
                             help="Show allocator input (in) or allocator"
152 d61df03e Iustin Pop
                             " results (out)"),
153 d61df03e Iustin Pop
                 make_option("--algorithm", dest="allocator",
154 d61df03e Iustin Pop
                             default=None,
155 d61df03e Iustin Pop
                             help="Allocator algorithm name"),
156 d61df03e Iustin Pop
                 make_option("-m", "--mode", default="relocate",
157 d61df03e Iustin Pop
                             choices=["relocate", "allocate"],
158 d61df03e Iustin Pop
                             help="Request mode, either allocate or"
159 d61df03e Iustin Pop
                             "relocate"),
160 d61df03e Iustin Pop
                 cli_option("--mem", default=128, type="unit",
161 d61df03e Iustin Pop
                            help="Memory size for the instance (MiB)"),
162 d61df03e Iustin Pop
                 make_option("--disks", default="4096,4096",
163 d61df03e Iustin Pop
                             help="Comma separated list of disk sizes (MiB)"),
164 d61df03e Iustin Pop
                 make_option("-t", "--disk-template", default="drbd",
165 d61df03e Iustin Pop
                             help="Select the disk template"),
166 d61df03e Iustin Pop
                 make_option("--nics", default="00:11:22:33:44:55",
167 d61df03e Iustin Pop
                             help="Comma separated list of nics, each nic"
168 d61df03e Iustin Pop
                             " definition is of form mac/ip/bridge, if"
169 d61df03e Iustin Pop
                             " missing values are replace by None"),
170 d61df03e Iustin Pop
                 make_option("-o", "--os-type", default=None,
171 d61df03e Iustin Pop
                             help="Select os for the instance"),
172 d61df03e Iustin Pop
                 make_option("-p", "--vcpus", default=1, type="int",
173 d61df03e Iustin Pop
                             help="Select number of VCPUs for the instance"),
174 d61df03e Iustin Pop
                 make_option("--tags", default=None,
175 d61df03e Iustin Pop
                             help="Comma separated list of tags"),
176 d61df03e Iustin Pop
                 ],
177 9a033156 Iustin Pop
                "{opts...} <instance>", "Executes a TestAllocator OpCode"),
178 fd3ee040 Iustin Pop
  }
179 fd3ee040 Iustin Pop
180 fd3ee040 Iustin Pop
181 fd3ee040 Iustin Pop
if __name__ == '__main__':
182 fd3ee040 Iustin Pop
  sys.exit(GenericMain(commands))