Statistics
| Branch: | Tag: | Revision:

root / lib / rpc_defs.py @ 78519c10

History | View | Annotate | Download (19.3 kB)

1 d5a2a550 Michael Hanselmann
#
2 d5a2a550 Michael Hanselmann
#
3 d5a2a550 Michael Hanselmann
4 d5a2a550 Michael Hanselmann
# Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Google Inc.
5 d5a2a550 Michael Hanselmann
#
6 d5a2a550 Michael Hanselmann
# This program is free software; you can redistribute it and/or modify
7 d5a2a550 Michael Hanselmann
# it under the terms of the GNU General Public License as published by
8 d5a2a550 Michael Hanselmann
# the Free Software Foundation; either version 2 of the License, or
9 d5a2a550 Michael Hanselmann
# (at your option) any later version.
10 d5a2a550 Michael Hanselmann
#
11 d5a2a550 Michael Hanselmann
# This program is distributed in the hope that it will be useful, but
12 d5a2a550 Michael Hanselmann
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 d5a2a550 Michael Hanselmann
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 d5a2a550 Michael Hanselmann
# General Public License for more details.
15 d5a2a550 Michael Hanselmann
#
16 d5a2a550 Michael Hanselmann
# You should have received a copy of the GNU General Public License
17 d5a2a550 Michael Hanselmann
# along with this program; if not, write to the Free Software
18 d5a2a550 Michael Hanselmann
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 d5a2a550 Michael Hanselmann
# 02110-1301, USA.
20 d5a2a550 Michael Hanselmann
21 d5a2a550 Michael Hanselmann
"""RPC definitions for communication between master and node daemons.
22 d5a2a550 Michael Hanselmann

23 033684dd Michael Hanselmann
RPC definition fields:
24 033684dd Michael Hanselmann

25 033684dd Michael Hanselmann
  - Name as string
26 033684dd Michael Hanselmann
  - L{SINGLE} for single-node calls, L{MULTI} for multi-node
27 f7d9b3aa Michael Hanselmann
  - Timeout (e.g. L{TMO_NORMAL}), or callback receiving all arguments in a
28 f7d9b3aa Michael Hanselmann
    tuple to calculate timeout
29 033684dd Michael Hanselmann
  - List of arguments as tuples
30 033684dd Michael Hanselmann

31 033684dd Michael Hanselmann
    - Name as string
32 cd40dc53 Michael Hanselmann
    - Argument kind used for encoding/decoding
33 033684dd Michael Hanselmann
    - Description for docstring (can be C{None})
34 033684dd Michael Hanselmann

35 033684dd Michael Hanselmann
  - Return value wrapper (e.g. for deserializing into L{objects}-based objects)
36 033684dd Michael Hanselmann
  - Short call description for docstring
37 033684dd Michael Hanselmann

38 d5a2a550 Michael Hanselmann
"""
39 d5a2a550 Michael Hanselmann
40 a09f9847 Michael Hanselmann
from ganeti import utils
41 26d502d0 Michael Hanselmann
from ganeti import objects
42 a09f9847 Michael Hanselmann
43 d5a2a550 Michael Hanselmann
44 0d1e78dd Michael Hanselmann
# Guidelines for choosing timeouts:
45 0d1e78dd Michael Hanselmann
# - call used during watcher: timeout of 1min, _TMO_URGENT
46 0d1e78dd Michael Hanselmann
# - trivial (but be sure it is trivial) (e.g. reading a file): 5min, _TMO_FAST
47 0d1e78dd Michael Hanselmann
# - other calls: 15 min, _TMO_NORMAL
48 0d1e78dd Michael Hanselmann
# - special calls (instance add, etc.): either _TMO_SLOW (1h) or huge timeouts
49 d5a2a550 Michael Hanselmann
TMO_URGENT = 60 # one minute
50 d5a2a550 Michael Hanselmann
TMO_FAST = 5 * 60 # five minutes
51 d5a2a550 Michael Hanselmann
TMO_NORMAL = 15 * 60 # 15 minutes
52 d5a2a550 Michael Hanselmann
TMO_SLOW = 3600 # one hour
53 d5a2a550 Michael Hanselmann
TMO_4HRS = 4 * 3600
54 d5a2a550 Michael Hanselmann
TMO_1DAY = 86400
55 d5a2a550 Michael Hanselmann
56 d5a2a550 Michael Hanselmann
SINGLE = "single-node"
57 d5a2a550 Michael Hanselmann
MULTI = "multi-node"
58 d5a2a550 Michael Hanselmann
59 cd40dc53 Michael Hanselmann
# Constants for encoding/decoding
60 cd40dc53 Michael Hanselmann
(ED_OBJECT_DICT,
61 cd40dc53 Michael Hanselmann
 ED_OBJECT_DICT_LIST,
62 cd40dc53 Michael Hanselmann
 ED_INST_DICT,
63 cd40dc53 Michael Hanselmann
 ED_INST_DICT_HVP_BEP,
64 cd40dc53 Michael Hanselmann
 ED_NODE_TO_DISK_DICT,
65 cd40dc53 Michael Hanselmann
 ED_INST_DICT_OSP,
66 cd40dc53 Michael Hanselmann
 ED_IMPEXP_IO,
67 cd40dc53 Michael Hanselmann
 ED_FILE_DETAILS,
68 cd40dc53 Michael Hanselmann
 ED_FINALIZE_EXPORT_DISKS,
69 cd40dc53 Michael Hanselmann
 ED_COMPRESS,
70 cd40dc53 Michael Hanselmann
 ED_BLOCKDEV_RENAME) = range(1, 12)
71 d565f83f Michael Hanselmann
72 a09f9847 Michael Hanselmann
73 a09f9847 Michael Hanselmann
def _Prepare(calls):
74 a09f9847 Michael Hanselmann
  """Converts list of calls to dictionary.
75 a09f9847 Michael Hanselmann

76 a09f9847 Michael Hanselmann
  """
77 a09f9847 Michael Hanselmann
  return utils.SequenceToDict(calls)
78 a09f9847 Michael Hanselmann
79 a09f9847 Michael Hanselmann
80 26d502d0 Michael Hanselmann
def _MigrationStatusPostProc(result):
81 26d502d0 Michael Hanselmann
  """Post-processor for L{rpc.RpcRunner.call_instance_get_migration_status}.
82 26d502d0 Michael Hanselmann

83 26d502d0 Michael Hanselmann
  """
84 26d502d0 Michael Hanselmann
  if not result.fail_msg and result.payload is not None:
85 26d502d0 Michael Hanselmann
    result.payload = objects.MigrationStatus.FromDict(result.payload)
86 26d502d0 Michael Hanselmann
  return result
87 26d502d0 Michael Hanselmann
88 26d502d0 Michael Hanselmann
89 26d502d0 Michael Hanselmann
def _BlockdevFindPostProc(result):
90 26d502d0 Michael Hanselmann
  """Post-processor for L{rpc.RpcRunner.call_blockdev_find}.
91 26d502d0 Michael Hanselmann

92 26d502d0 Michael Hanselmann
  """
93 26d502d0 Michael Hanselmann
  if not result.fail_msg and result.payload is not None:
94 26d502d0 Michael Hanselmann
    result.payload = objects.BlockDevStatus.FromDict(result.payload)
95 26d502d0 Michael Hanselmann
  return result
96 26d502d0 Michael Hanselmann
97 26d502d0 Michael Hanselmann
98 26d502d0 Michael Hanselmann
def _BlockdevGetMirrorStatusPostProc(result):
99 26d502d0 Michael Hanselmann
  """Post-processor for L{rpc.RpcRunner.call_blockdev_getmirrorstatus}.
100 26d502d0 Michael Hanselmann

101 26d502d0 Michael Hanselmann
  """
102 26d502d0 Michael Hanselmann
  if not result.fail_msg:
103 26d502d0 Michael Hanselmann
    result.payload = map(objects.BlockDevStatus.FromDict, result.payload)
104 26d502d0 Michael Hanselmann
  return result
105 26d502d0 Michael Hanselmann
106 26d502d0 Michael Hanselmann
107 26d502d0 Michael Hanselmann
def _BlockdevGetMirrorStatusMultiPostProc(result):
108 26d502d0 Michael Hanselmann
  """Post-processor for L{rpc.RpcRunner.call_blockdev_getmirrorstatus_multi}.
109 26d502d0 Michael Hanselmann

110 26d502d0 Michael Hanselmann
  """
111 82cce526 Michael Hanselmann
  if not result.fail_msg:
112 82cce526 Michael Hanselmann
    for idx, (success, status) in enumerate(result.payload):
113 26d502d0 Michael Hanselmann
      if success:
114 82cce526 Michael Hanselmann
        result.payload[idx] = (success, objects.BlockDevStatus.FromDict(status))
115 26d502d0 Michael Hanselmann
116 26d502d0 Michael Hanselmann
  return result
117 26d502d0 Michael Hanselmann
118 26d502d0 Michael Hanselmann
119 26d502d0 Michael Hanselmann
def _OsGetPostProc(result):
120 26d502d0 Michael Hanselmann
  """Post-processor for L{rpc.RpcRunner.call_os_get}.
121 26d502d0 Michael Hanselmann

122 26d502d0 Michael Hanselmann
  """
123 26d502d0 Michael Hanselmann
  if not result.fail_msg and isinstance(result.payload, dict):
124 26d502d0 Michael Hanselmann
    result.payload = objects.OS.FromDict(result.payload)
125 26d502d0 Michael Hanselmann
  return result
126 26d502d0 Michael Hanselmann
127 26d502d0 Michael Hanselmann
128 26d502d0 Michael Hanselmann
def _ImpExpStatusPostProc(result):
129 26d502d0 Michael Hanselmann
  """Post-processor for import/export status.
130 26d502d0 Michael Hanselmann

131 26d502d0 Michael Hanselmann
  @rtype: Payload containing list of L{objects.ImportExportStatus} instances
132 26d502d0 Michael Hanselmann
  @return: Returns a list of the state of each named import/export or None if
133 26d502d0 Michael Hanselmann
           a status couldn't be retrieved
134 26d502d0 Michael Hanselmann

135 26d502d0 Michael Hanselmann
  """
136 26d502d0 Michael Hanselmann
  if not result.fail_msg:
137 26d502d0 Michael Hanselmann
    decoded = []
138 26d502d0 Michael Hanselmann
139 26d502d0 Michael Hanselmann
    for i in result.payload:
140 26d502d0 Michael Hanselmann
      if i is None:
141 26d502d0 Michael Hanselmann
        decoded.append(None)
142 26d502d0 Michael Hanselmann
        continue
143 26d502d0 Michael Hanselmann
      decoded.append(objects.ImportExportStatus.FromDict(i))
144 26d502d0 Michael Hanselmann
145 26d502d0 Michael Hanselmann
    result.payload = decoded
146 26d502d0 Michael Hanselmann
147 26d502d0 Michael Hanselmann
  return result
148 26d502d0 Michael Hanselmann
149 26d502d0 Michael Hanselmann
150 f7d9b3aa Michael Hanselmann
def _TestDelayTimeout((duration, )):
151 f7d9b3aa Michael Hanselmann
  """Calculate timeout for "test_delay" RPC.
152 f7d9b3aa Michael Hanselmann

153 f7d9b3aa Michael Hanselmann
  """
154 f7d9b3aa Michael Hanselmann
  return int(duration + 5)
155 f7d9b3aa Michael Hanselmann
156 f7d9b3aa Michael Hanselmann
157 033684dd Michael Hanselmann
_FILE_STORAGE_CALLS = [
158 033684dd Michael Hanselmann
  ("file_storage_dir_create", SINGLE, TMO_FAST, [
159 033684dd Michael Hanselmann
    ("file_storage_dir", None, "File storage directory"),
160 033684dd Michael Hanselmann
    ], None, "Create the given file storage directory"),
161 033684dd Michael Hanselmann
  ("file_storage_dir_remove", SINGLE, TMO_FAST, [
162 033684dd Michael Hanselmann
    ("file_storage_dir", None, "File storage directory"),
163 033684dd Michael Hanselmann
    ], None, "Remove the given file storage directory"),
164 033684dd Michael Hanselmann
  ("file_storage_dir_rename", SINGLE, TMO_FAST, [
165 033684dd Michael Hanselmann
    ("old_file_storage_dir", None, "Old name"),
166 033684dd Michael Hanselmann
    ("new_file_storage_dir", None, "New name"),
167 033684dd Michael Hanselmann
    ], None, "Rename file storage directory"),
168 033684dd Michael Hanselmann
  ]
169 033684dd Michael Hanselmann
170 033684dd Michael Hanselmann
_STORAGE_CALLS = [
171 033684dd Michael Hanselmann
  ("storage_list", MULTI, TMO_NORMAL, [
172 033684dd Michael Hanselmann
    ("su_name", None, None),
173 033684dd Michael Hanselmann
    ("su_args", None, None),
174 033684dd Michael Hanselmann
    ("name", None, None),
175 033684dd Michael Hanselmann
    ("fields", None, None),
176 033684dd Michael Hanselmann
    ], None, "Get list of storage units"),
177 033684dd Michael Hanselmann
  ("storage_modify", SINGLE, TMO_NORMAL, [
178 033684dd Michael Hanselmann
    ("su_name", None, None),
179 033684dd Michael Hanselmann
    ("su_args", None, None),
180 033684dd Michael Hanselmann
    ("name", None, None),
181 033684dd Michael Hanselmann
    ("changes", None, None),
182 033684dd Michael Hanselmann
    ], None, "Modify a storage unit"),
183 033684dd Michael Hanselmann
  ("storage_execute", SINGLE, TMO_NORMAL, [
184 033684dd Michael Hanselmann
    ("su_name", None, None),
185 033684dd Michael Hanselmann
    ("su_args", None, None),
186 033684dd Michael Hanselmann
    ("name", None, None),
187 033684dd Michael Hanselmann
    ("op", None, None),
188 033684dd Michael Hanselmann
    ], None, "Executes an operation on a storage unit"),
189 033684dd Michael Hanselmann
  ]
190 033684dd Michael Hanselmann
191 033684dd Michael Hanselmann
_INSTANCE_CALLS = [
192 033684dd Michael Hanselmann
  ("instance_info", SINGLE, TMO_URGENT, [
193 033684dd Michael Hanselmann
    ("instance", None, "Instance name"),
194 033684dd Michael Hanselmann
    ("hname", None, "Hypervisor type"),
195 033684dd Michael Hanselmann
    ], None, "Returns information about a single instance"),
196 033684dd Michael Hanselmann
  ("all_instances_info", MULTI, TMO_URGENT, [
197 033684dd Michael Hanselmann
    ("hypervisor_list", None, "Hypervisors to query for instances"),
198 033684dd Michael Hanselmann
    ], None, "Returns information about all instances on the given nodes"),
199 033684dd Michael Hanselmann
  ("instance_list", MULTI, TMO_URGENT, [
200 033684dd Michael Hanselmann
    ("hypervisor_list", None, "Hypervisors to query for instances"),
201 033684dd Michael Hanselmann
    ], None, "Returns the list of running instances on the given nodes"),
202 033684dd Michael Hanselmann
  ("instance_reboot", SINGLE, TMO_NORMAL, [
203 cd40dc53 Michael Hanselmann
    ("inst", ED_INST_DICT, "Instance object"),
204 033684dd Michael Hanselmann
    ("reboot_type", None, None),
205 033684dd Michael Hanselmann
    ("shutdown_timeout", None, None),
206 033684dd Michael Hanselmann
    ], None, "Returns the list of running instances on the given nodes"),
207 033684dd Michael Hanselmann
  ("instance_shutdown", SINGLE, TMO_NORMAL, [
208 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, "Instance object"),
209 033684dd Michael Hanselmann
    ("timeout", None, None),
210 033684dd Michael Hanselmann
    ], None, "Stops an instance"),
211 033684dd Michael Hanselmann
  ("instance_run_rename", SINGLE, TMO_SLOW, [
212 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, "Instance object"),
213 033684dd Michael Hanselmann
    ("old_name", None, None),
214 033684dd Michael Hanselmann
    ("debug", None, None),
215 033684dd Michael Hanselmann
    ], None, "Run the OS rename script for an instance"),
216 033684dd Michael Hanselmann
  ("instance_migratable", SINGLE, TMO_NORMAL, [
217 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, "Instance object"),
218 033684dd Michael Hanselmann
    ], None, "Checks whether the given instance can be migrated"),
219 033684dd Michael Hanselmann
  ("migration_info", SINGLE, TMO_NORMAL, [
220 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, "Instance object"),
221 033684dd Michael Hanselmann
    ], None,
222 033684dd Michael Hanselmann
    "Gather the information necessary to prepare an instance migration"),
223 033684dd Michael Hanselmann
  ("accept_instance", SINGLE, TMO_NORMAL, [
224 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, "Instance object"),
225 033684dd Michael Hanselmann
    ("info", None, "Result for the call_migration_info call"),
226 033684dd Michael Hanselmann
    ("target", None, "Target hostname (usually an IP address)"),
227 033684dd Michael Hanselmann
    ], None, "Prepare a node to accept an instance"),
228 033684dd Michael Hanselmann
  ("instance_finalize_migration_dst", SINGLE, TMO_NORMAL, [
229 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, "Instance object"),
230 033684dd Michael Hanselmann
    ("info", None, "Result for the call_migration_info call"),
231 033684dd Michael Hanselmann
    ("success", None, "Whether the migration was a success or failure"),
232 033684dd Michael Hanselmann
    ], None, "Finalize any target-node migration specific operation"),
233 033684dd Michael Hanselmann
  ("instance_migrate", SINGLE, TMO_SLOW, [
234 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, "Instance object"),
235 033684dd Michael Hanselmann
    ("target", None, "Target node name"),
236 033684dd Michael Hanselmann
    ("live", None, "Whether the migration should be done live or not"),
237 033684dd Michael Hanselmann
    ], None, "Migrate an instance"),
238 033684dd Michael Hanselmann
  ("instance_finalize_migration_src", SINGLE, TMO_SLOW, [
239 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, "Instance object"),
240 033684dd Michael Hanselmann
    ("success", None, "Whether the migration succeeded or not"),
241 033684dd Michael Hanselmann
    ("live", None, "Whether the user requested a live migration or not"),
242 033684dd Michael Hanselmann
    ], None, "Finalize the instance migration on the source node"),
243 e3ac8406 Andrea Spadaccini
  ("instance_get_migration_status", SINGLE, TMO_SLOW, [
244 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, "Instance object"),
245 26d502d0 Michael Hanselmann
    ], _MigrationStatusPostProc, "Report migration status"),
246 c4de9b7a Michael Hanselmann
  ("instance_start", SINGLE, TMO_NORMAL, [
247 cd40dc53 Michael Hanselmann
    ("instance_hvp_bep", ED_INST_DICT_HVP_BEP, None),
248 c4de9b7a Michael Hanselmann
    ("startup_paused", None, None),
249 c4de9b7a Michael Hanselmann
    ], None, "Starts an instance"),
250 c4de9b7a Michael Hanselmann
  ("instance_os_add", SINGLE, TMO_1DAY, [
251 cd40dc53 Michael Hanselmann
    ("instance_osp", ED_INST_DICT_OSP, None),
252 c4de9b7a Michael Hanselmann
    ("reinstall", None, None),
253 c4de9b7a Michael Hanselmann
    ("debug", None, None),
254 c4de9b7a Michael Hanselmann
    ], None, "Starts an instance"),
255 033684dd Michael Hanselmann
  ]
256 033684dd Michael Hanselmann
257 033684dd Michael Hanselmann
_IMPEXP_CALLS = [
258 46c293f0 Michael Hanselmann
  ("import_start", SINGLE, TMO_NORMAL, [
259 cd40dc53 Michael Hanselmann
    ("opts", ED_OBJECT_DICT, None),
260 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, None),
261 46c293f0 Michael Hanselmann
    ("component", None, None),
262 cd40dc53 Michael Hanselmann
    ("dest", ED_IMPEXP_IO, "Import destination"),
263 46c293f0 Michael Hanselmann
    ], None, "Starts an import daemon"),
264 46c293f0 Michael Hanselmann
  ("export_start", SINGLE, TMO_NORMAL, [
265 cd40dc53 Michael Hanselmann
    ("opts", ED_OBJECT_DICT, None),
266 46c293f0 Michael Hanselmann
    ("host", None, None),
267 46c293f0 Michael Hanselmann
    ("port", None, None),
268 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, None),
269 46c293f0 Michael Hanselmann
    ("component", None, None),
270 cd40dc53 Michael Hanselmann
    ("source", ED_IMPEXP_IO, "Export source"),
271 46c293f0 Michael Hanselmann
    ], None, "Starts an export daemon"),
272 033684dd Michael Hanselmann
  ("impexp_status", SINGLE, TMO_FAST, [
273 033684dd Michael Hanselmann
    ("names", None, "Import/export names"),
274 26d502d0 Michael Hanselmann
    ], _ImpExpStatusPostProc, "Gets the status of an import or export"),
275 033684dd Michael Hanselmann
  ("impexp_abort", SINGLE, TMO_NORMAL, [
276 033684dd Michael Hanselmann
    ("name", None, "Import/export name"),
277 033684dd Michael Hanselmann
    ], None, "Aborts an import or export"),
278 033684dd Michael Hanselmann
  ("impexp_cleanup", SINGLE, TMO_NORMAL, [
279 033684dd Michael Hanselmann
    ("name", None, "Import/export name"),
280 033684dd Michael Hanselmann
    ], None, "Cleans up after an import or export"),
281 033684dd Michael Hanselmann
  ("export_info", SINGLE, TMO_FAST, [
282 033684dd Michael Hanselmann
    ("path", None, None),
283 033684dd Michael Hanselmann
    ], None, "Queries the export information in a given path"),
284 033684dd Michael Hanselmann
  ("finalize_export", SINGLE, TMO_NORMAL, [
285 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, None),
286 cd40dc53 Michael Hanselmann
    ("snap_disks", ED_FINALIZE_EXPORT_DISKS, None),
287 033684dd Michael Hanselmann
    ], None, "Request the completion of an export operation"),
288 033684dd Michael Hanselmann
  ("export_list", MULTI, TMO_FAST, [], None, "Gets the stored exports list"),
289 033684dd Michael Hanselmann
  ("export_remove", SINGLE, TMO_FAST, [
290 033684dd Michael Hanselmann
    ("export", None, None),
291 033684dd Michael Hanselmann
    ], None, "Requests removal of a given export"),
292 033684dd Michael Hanselmann
  ]
293 033684dd Michael Hanselmann
294 033684dd Michael Hanselmann
_X509_CALLS = [
295 033684dd Michael Hanselmann
  ("x509_cert_create", SINGLE, TMO_NORMAL, [
296 033684dd Michael Hanselmann
    ("validity", None, "Validity in seconds"),
297 033684dd Michael Hanselmann
    ], None, "Creates a new X509 certificate for SSL/TLS"),
298 033684dd Michael Hanselmann
  ("x509_cert_remove", SINGLE, TMO_NORMAL, [
299 033684dd Michael Hanselmann
    ("name", None, "Certificate name"),
300 033684dd Michael Hanselmann
    ], None, "Removes a X509 certificate"),
301 033684dd Michael Hanselmann
  ]
302 033684dd Michael Hanselmann
303 033684dd Michael Hanselmann
_BLOCKDEV_CALLS = [
304 033684dd Michael Hanselmann
  ("bdev_sizes", MULTI, TMO_URGENT, [
305 033684dd Michael Hanselmann
    ("devices", None, None),
306 033684dd Michael Hanselmann
    ], None, "Gets the sizes of requested block devices present on a node"),
307 033684dd Michael Hanselmann
  ("blockdev_create", SINGLE, TMO_NORMAL, [
308 cd40dc53 Michael Hanselmann
    ("bdev", ED_OBJECT_DICT, None),
309 033684dd Michael Hanselmann
    ("size", None, None),
310 033684dd Michael Hanselmann
    ("owner", None, None),
311 033684dd Michael Hanselmann
    ("on_primary", None, None),
312 033684dd Michael Hanselmann
    ("info", None, None),
313 033684dd Michael Hanselmann
    ], None, "Request creation of a given block device"),
314 033684dd Michael Hanselmann
  ("blockdev_wipe", SINGLE, TMO_SLOW, [
315 cd40dc53 Michael Hanselmann
    ("bdev", ED_OBJECT_DICT, None),
316 033684dd Michael Hanselmann
    ("offset", None, None),
317 033684dd Michael Hanselmann
    ("size", None, None),
318 033684dd Michael Hanselmann
    ], None,
319 033684dd Michael Hanselmann
    "Request wipe at given offset with given size of a block device"),
320 033684dd Michael Hanselmann
  ("blockdev_remove", SINGLE, TMO_NORMAL, [
321 cd40dc53 Michael Hanselmann
    ("bdev", ED_OBJECT_DICT, None),
322 033684dd Michael Hanselmann
    ], None, "Request removal of a given block device"),
323 033684dd Michael Hanselmann
  ("blockdev_pause_resume_sync", SINGLE, TMO_NORMAL, [
324 cd40dc53 Michael Hanselmann
    ("disks", ED_OBJECT_DICT_LIST, None),
325 033684dd Michael Hanselmann
    ("pause", None, None),
326 033684dd Michael Hanselmann
    ], None, "Request a pause/resume of given block device"),
327 033684dd Michael Hanselmann
  ("blockdev_assemble", SINGLE, TMO_NORMAL, [
328 cd40dc53 Michael Hanselmann
    ("disk", ED_OBJECT_DICT, None),
329 033684dd Michael Hanselmann
    ("owner", None, None),
330 033684dd Michael Hanselmann
    ("on_primary", None, None),
331 033684dd Michael Hanselmann
    ("idx", None, None),
332 033684dd Michael Hanselmann
    ], None, "Request assembling of a given block device"),
333 033684dd Michael Hanselmann
  ("blockdev_shutdown", SINGLE, TMO_NORMAL, [
334 cd40dc53 Michael Hanselmann
    ("disk", ED_OBJECT_DICT, None),
335 033684dd Michael Hanselmann
    ], None, "Request shutdown of a given block device"),
336 033684dd Michael Hanselmann
  ("blockdev_addchildren", SINGLE, TMO_NORMAL, [
337 cd40dc53 Michael Hanselmann
    ("bdev", ED_OBJECT_DICT, None),
338 cd40dc53 Michael Hanselmann
    ("ndevs", ED_OBJECT_DICT_LIST, None),
339 033684dd Michael Hanselmann
    ], None, "Request adding a list of children to a (mirroring) device"),
340 033684dd Michael Hanselmann
  ("blockdev_removechildren", SINGLE, TMO_NORMAL, [
341 cd40dc53 Michael Hanselmann
    ("bdev", ED_OBJECT_DICT, None),
342 cd40dc53 Michael Hanselmann
    ("ndevs", ED_OBJECT_DICT_LIST, None),
343 033684dd Michael Hanselmann
    ], None, "Request removing a list of children from a (mirroring) device"),
344 033684dd Michael Hanselmann
  ("blockdev_close", SINGLE, TMO_NORMAL, [
345 033684dd Michael Hanselmann
    ("instance_name", None, None),
346 cd40dc53 Michael Hanselmann
    ("disks", ED_OBJECT_DICT_LIST, None),
347 033684dd Michael Hanselmann
    ], None, "Closes the given block devices"),
348 033684dd Michael Hanselmann
  ("blockdev_getsize", SINGLE, TMO_NORMAL, [
349 cd40dc53 Michael Hanselmann
    ("disks", ED_OBJECT_DICT_LIST, None),
350 033684dd Michael Hanselmann
    ], None, "Returns the size of the given disks"),
351 033684dd Michael Hanselmann
  ("drbd_disconnect_net", MULTI, TMO_NORMAL, [
352 033684dd Michael Hanselmann
    ("nodes_ip", None, None),
353 cd40dc53 Michael Hanselmann
    ("disks", ED_OBJECT_DICT_LIST, None),
354 033684dd Michael Hanselmann
    ], None, "Disconnects the network of the given drbd devices"),
355 033684dd Michael Hanselmann
  ("drbd_attach_net", MULTI, TMO_NORMAL, [
356 033684dd Michael Hanselmann
    ("nodes_ip", None, None),
357 cd40dc53 Michael Hanselmann
    ("disks", ED_OBJECT_DICT_LIST, None),
358 033684dd Michael Hanselmann
    ("instance_name", None, None),
359 033684dd Michael Hanselmann
    ("multimaster", None, None),
360 033684dd Michael Hanselmann
    ], None, "Connects the given DRBD devices"),
361 033684dd Michael Hanselmann
  ("drbd_wait_sync", MULTI, TMO_SLOW, [
362 033684dd Michael Hanselmann
    ("nodes_ip", None, None),
363 cd40dc53 Michael Hanselmann
    ("disks", ED_OBJECT_DICT_LIST, None),
364 033684dd Michael Hanselmann
    ], None, "Waits for the synchronization of drbd devices is complete"),
365 033684dd Michael Hanselmann
  ("blockdev_grow", SINGLE, TMO_NORMAL, [
366 cd40dc53 Michael Hanselmann
    ("cf_bdev", ED_OBJECT_DICT, None),
367 033684dd Michael Hanselmann
    ("amount", None, None),
368 033684dd Michael Hanselmann
    ("dryrun", None, None),
369 033684dd Michael Hanselmann
    ], None, "Request a snapshot of the given block device"),
370 033684dd Michael Hanselmann
  ("blockdev_export", SINGLE, TMO_1DAY, [
371 cd40dc53 Michael Hanselmann
    ("cf_bdev", ED_OBJECT_DICT, None),
372 033684dd Michael Hanselmann
    ("dest_node", None, None),
373 033684dd Michael Hanselmann
    ("dest_path", None, None),
374 033684dd Michael Hanselmann
    ("cluster_name", None, None),
375 033684dd Michael Hanselmann
    ], None, "Export a given disk to another node"),
376 033684dd Michael Hanselmann
  ("blockdev_snapshot", SINGLE, TMO_NORMAL, [
377 cd40dc53 Michael Hanselmann
    ("cf_bdev", ED_OBJECT_DICT, None),
378 033684dd Michael Hanselmann
    ], None, "Export a given disk to another node"),
379 033684dd Michael Hanselmann
  ("blockdev_rename", SINGLE, TMO_NORMAL, [
380 cd40dc53 Michael Hanselmann
    ("devlist", ED_BLOCKDEV_RENAME, None),
381 033684dd Michael Hanselmann
    ], None, "Request rename of the given block devices"),
382 033684dd Michael Hanselmann
  ("blockdev_find", SINGLE, TMO_NORMAL, [
383 cd40dc53 Michael Hanselmann
    ("disk", ED_OBJECT_DICT, None),
384 26d502d0 Michael Hanselmann
    ], _BlockdevFindPostProc,
385 033684dd Michael Hanselmann
    "Request identification of a given block device"),
386 033684dd Michael Hanselmann
  ("blockdev_getmirrorstatus", SINGLE, TMO_NORMAL, [
387 cd40dc53 Michael Hanselmann
    ("disks", ED_OBJECT_DICT_LIST, None),
388 26d502d0 Michael Hanselmann
    ], _BlockdevGetMirrorStatusPostProc,
389 033684dd Michael Hanselmann
    "Request status of a (mirroring) device"),
390 033684dd Michael Hanselmann
  ("blockdev_getmirrorstatus_multi", MULTI, TMO_NORMAL, [
391 cd40dc53 Michael Hanselmann
    ("node_disks", ED_NODE_TO_DISK_DICT, None),
392 26d502d0 Michael Hanselmann
    ], _BlockdevGetMirrorStatusMultiPostProc,
393 033684dd Michael Hanselmann
    "Request status of (mirroring) devices from multiple nodes"),
394 033684dd Michael Hanselmann
  ]
395 033684dd Michael Hanselmann
396 033684dd Michael Hanselmann
_OS_CALLS = [
397 033684dd Michael Hanselmann
  ("os_diagnose", MULTI, TMO_FAST, [], None,
398 033684dd Michael Hanselmann
   "Request a diagnose of OS definitions"),
399 033684dd Michael Hanselmann
  ("os_validate", MULTI, TMO_FAST, [
400 033684dd Michael Hanselmann
    ("required", None, None),
401 033684dd Michael Hanselmann
    ("name", None, None),
402 033684dd Michael Hanselmann
    ("checks", None, None),
403 033684dd Michael Hanselmann
    ("params", None, None),
404 033684dd Michael Hanselmann
    ], None, "Run a validation routine for a given OS"),
405 033684dd Michael Hanselmann
  ("os_get", SINGLE, TMO_FAST, [
406 033684dd Michael Hanselmann
    ("name", None, None),
407 26d502d0 Michael Hanselmann
    ], _OsGetPostProc, "Returns an OS definition"),
408 033684dd Michael Hanselmann
  ]
409 033684dd Michael Hanselmann
410 033684dd Michael Hanselmann
_NODE_CALLS = [
411 033684dd Michael Hanselmann
  ("node_has_ip_address", SINGLE, TMO_FAST, [
412 033684dd Michael Hanselmann
    ("address", None, "IP address"),
413 033684dd Michael Hanselmann
    ], None, "Checks if a node has the given IP address"),
414 033684dd Michael Hanselmann
  ("node_info", MULTI, TMO_URGENT, [
415 78519c10 Michael Hanselmann
    ("vg_names", None,
416 78519c10 Michael Hanselmann
     "Names of the volume groups to ask for disk space information"),
417 78519c10 Michael Hanselmann
    ("hv_names", None,
418 78519c10 Michael Hanselmann
     "Names of the hypervisors to ask for node information"),
419 033684dd Michael Hanselmann
    ], None, "Return node information"),
420 033684dd Michael Hanselmann
  ("node_verify", MULTI, TMO_NORMAL, [
421 033684dd Michael Hanselmann
    ("checkdict", None, None),
422 033684dd Michael Hanselmann
    ("cluster_name", None, None),
423 033684dd Michael Hanselmann
    ], None, "Request verification of given parameters"),
424 033684dd Michael Hanselmann
  ("node_volumes", MULTI, TMO_FAST, [], None, "Gets all volumes on node(s)"),
425 033684dd Michael Hanselmann
  ("node_demote_from_mc", SINGLE, TMO_FAST, [], None,
426 033684dd Michael Hanselmann
   "Demote a node from the master candidate role"),
427 033684dd Michael Hanselmann
  ("node_powercycle", SINGLE, TMO_NORMAL, [
428 033684dd Michael Hanselmann
    ("hypervisor", None, "Hypervisor type"),
429 033684dd Michael Hanselmann
    ], None, "Tries to powercycle a node"),
430 033684dd Michael Hanselmann
  ]
431 033684dd Michael Hanselmann
432 033684dd Michael Hanselmann
_MISC_CALLS = [
433 033684dd Michael Hanselmann
  ("lv_list", MULTI, TMO_URGENT, [
434 033684dd Michael Hanselmann
    ("vg_name", None, None),
435 033684dd Michael Hanselmann
    ], None, "Gets the logical volumes present in a given volume group"),
436 033684dd Michael Hanselmann
  ("vg_list", MULTI, TMO_URGENT, [], None, "Gets the volume group list"),
437 033684dd Michael Hanselmann
  ("bridges_exist", SINGLE, TMO_URGENT, [
438 033684dd Michael Hanselmann
    ("bridges_list", None, "Bridges which must be present on remote node"),
439 033684dd Michael Hanselmann
    ], None, "Checks if a node has all the bridges given"),
440 033684dd Michael Hanselmann
  ("etc_hosts_modify", SINGLE, TMO_NORMAL, [
441 033684dd Michael Hanselmann
    ("mode", None,
442 033684dd Michael Hanselmann
     "Mode to operate; currently L{constants.ETC_HOSTS_ADD} or"
443 033684dd Michael Hanselmann
     " L{constants.ETC_HOSTS_REMOVE}"),
444 033684dd Michael Hanselmann
    ("name", None, "Hostname to be modified"),
445 033684dd Michael Hanselmann
    ("ip", None, "IP address (L{constants.ETC_HOSTS_ADD} only)"),
446 033684dd Michael Hanselmann
    ], None, "Modify hosts file with name"),
447 033684dd Michael Hanselmann
  ("drbd_helper", MULTI, TMO_URGENT, [], None, "Gets DRBD helper"),
448 033684dd Michael Hanselmann
  ("run_oob", SINGLE, TMO_NORMAL, [
449 033684dd Michael Hanselmann
    ("oob_program", None, None),
450 033684dd Michael Hanselmann
    ("command", None, None),
451 033684dd Michael Hanselmann
    ("remote_node", None, None),
452 033684dd Michael Hanselmann
    ("timeout", None, None),
453 033684dd Michael Hanselmann
    ], None, "Runs out-of-band command"),
454 033684dd Michael Hanselmann
  ("hooks_runner", MULTI, TMO_NORMAL, [
455 033684dd Michael Hanselmann
    ("hpath", None, None),
456 033684dd Michael Hanselmann
    ("phase", None, None),
457 033684dd Michael Hanselmann
    ("env", None, None),
458 033684dd Michael Hanselmann
    ], None, "Call the hooks runner"),
459 033684dd Michael Hanselmann
  ("iallocator_runner", SINGLE, TMO_NORMAL, [
460 033684dd Michael Hanselmann
    ("name", None, "Iallocator name"),
461 033684dd Michael Hanselmann
    ("idata", None, "JSON-encoded input string"),
462 033684dd Michael Hanselmann
    ], None, "Call an iallocator on a remote node"),
463 f68cc544 Michael Hanselmann
  ("test_delay", MULTI, _TestDelayTimeout, [
464 033684dd Michael Hanselmann
    ("duration", None, None),
465 f68cc544 Michael Hanselmann
    ], None, "Sleep for a fixed time on given node(s)"),
466 68959ca5 Michael Hanselmann
  ("hypervisor_validate_params", MULTI, TMO_NORMAL, [
467 68959ca5 Michael Hanselmann
    ("hvname", None, "Hypervisor name"),
468 68959ca5 Michael Hanselmann
    ("hvfull", None, "Parameters to be validated"),
469 68959ca5 Michael Hanselmann
    ], None, "Validate hypervisor params"),
470 033684dd Michael Hanselmann
  ]
471 033684dd Michael Hanselmann
472 d5a2a550 Michael Hanselmann
CALLS = {
473 a09f9847 Michael Hanselmann
  "RpcClientDefault": \
474 a09f9847 Michael Hanselmann
    _Prepare(_IMPEXP_CALLS + _X509_CALLS + _OS_CALLS + _NODE_CALLS +
475 a09f9847 Michael Hanselmann
             _FILE_STORAGE_CALLS + _MISC_CALLS + _INSTANCE_CALLS +
476 a09f9847 Michael Hanselmann
             _BLOCKDEV_CALLS + _STORAGE_CALLS),
477 a09f9847 Michael Hanselmann
  "RpcClientJobQueue": _Prepare([
478 fb1ffbca Michael Hanselmann
    ("jobqueue_update", MULTI, TMO_URGENT, [
479 fb1ffbca Michael Hanselmann
      ("file_name", None, None),
480 cd40dc53 Michael Hanselmann
      ("content", ED_COMPRESS, None),
481 fb1ffbca Michael Hanselmann
      ], None, "Update job queue file"),
482 fb1ffbca Michael Hanselmann
    ("jobqueue_purge", SINGLE, TMO_NORMAL, [], None, "Purge job queue"),
483 fb1ffbca Michael Hanselmann
    ("jobqueue_rename", MULTI, TMO_URGENT, [
484 fb1ffbca Michael Hanselmann
      ("rename", None, None),
485 fb1ffbca Michael Hanselmann
      ], None, "Rename job queue file"),
486 a09f9847 Michael Hanselmann
    ]),
487 a09f9847 Michael Hanselmann
  "RpcClientBootstrap": _Prepare([
488 db04ce5d Michael Hanselmann
    ("node_start_master_daemons", SINGLE, TMO_FAST, [
489 db04ce5d Michael Hanselmann
      ("no_voting", None, None),
490 db04ce5d Michael Hanselmann
      ], None, "Starts master daemons on a node"),
491 8da2bd43 Andrea Spadaccini
    ("node_activate_master_ip", SINGLE, TMO_FAST, [
492 c79198a0 Andrea Spadaccini
      ("master_params", ED_OBJECT_DICT, "Network parameters of the master"),
493 57c7bc57 Andrea Spadaccini
      ("use_external_mip_script", None,
494 57c7bc57 Andrea Spadaccini
       "Whether to use the user-provided master IP address setup script"),
495 8da2bd43 Andrea Spadaccini
      ], None,
496 8da2bd43 Andrea Spadaccini
      "Activates master IP on a node"),
497 db04ce5d Michael Hanselmann
    ("node_stop_master", SINGLE, TMO_FAST, [], None,
498 db04ce5d Michael Hanselmann
     "Deactivates master IP and stops master daemons on a node"),
499 96e0d5cc Andrea Spadaccini
    ("node_deactivate_master_ip", SINGLE, TMO_FAST, [
500 c79198a0 Andrea Spadaccini
      ("master_params", ED_OBJECT_DICT, "Network parameters of the master"),
501 57c7bc57 Andrea Spadaccini
      ("use_external_mip_script", None,
502 57c7bc57 Andrea Spadaccini
       "Whether to use the user-provided master IP address setup script"),
503 96e0d5cc Andrea Spadaccini
      ], None,
504 db04ce5d Michael Hanselmann
     "Deactivates master IP on a node"),
505 db04ce5d Michael Hanselmann
    ("node_change_master_netmask", SINGLE, TMO_FAST, [
506 41e079ce Andrea Spadaccini
      ("old_netmask", None, "The old value of the netmask"),
507 41e079ce Andrea Spadaccini
      ("netmask", None, "The new value of the netmask"),
508 41e079ce Andrea Spadaccini
      ("master_ip", None, "The master IP"),
509 41e079ce Andrea Spadaccini
      ("master_netdev", None, "The master network device"),
510 db04ce5d Michael Hanselmann
      ], None, "Change master IP netmask"),
511 db04ce5d Michael Hanselmann
    ("node_leave_cluster", SINGLE, TMO_NORMAL, [
512 db04ce5d Michael Hanselmann
      ("modify_ssh_setup", None, None),
513 db04ce5d Michael Hanselmann
      ], None, "Requests a node to clean the cluster information it has"),
514 db04ce5d Michael Hanselmann
    ("master_info", MULTI, TMO_URGENT, [], None, "Query master info"),
515 db04ce5d Michael Hanselmann
    ("version", MULTI, TMO_URGENT, [], None, "Query node version"),
516 a09f9847 Michael Hanselmann
    ]),
517 a09f9847 Michael Hanselmann
  "RpcClientConfig": _Prepare([
518 415a7304 Michael Hanselmann
    ("upload_file", MULTI, TMO_NORMAL, [
519 cd40dc53 Michael Hanselmann
      ("file_name", ED_FILE_DETAILS, None),
520 415a7304 Michael Hanselmann
      ], None, "Upload a file"),
521 415a7304 Michael Hanselmann
    ("write_ssconf_files", MULTI, TMO_NORMAL, [
522 415a7304 Michael Hanselmann
      ("values", None, None),
523 415a7304 Michael Hanselmann
      ], None, "Write ssconf files"),
524 a09f9847 Michael Hanselmann
    ]),
525 d5a2a550 Michael Hanselmann
  }