4 # Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Google Inc.
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 # General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21 """RPC definitions for communication between master and node daemons.
23 RPC definition fields:
26 - L{SINGLE} for single-node calls, L{MULTI} for multi-node
27 - Name resolver option(s), can be callable receiving all arguments in a tuple
28 - Timeout (e.g. L{constants.RPC_TMO_NORMAL}), or callback receiving all
29 arguments in a tuple to calculate timeout
30 - List of arguments as tuples
33 - Argument kind used for encoding/decoding
34 - Description for docstring (can be C{None})
36 - Custom body encoder (e.g. for preparing per-node bodies)
37 - Return value wrapper (e.g. for deserializing into L{objects}-based objects)
38 - Short call description for docstring
42 from ganeti import constants
43 from ganeti import utils
44 from ganeti import objects
47 # Guidelines for choosing timeouts:
48 # - call used during watcher: timeout of 1min, constants.RPC_TMO_URGENT
49 # - trivial (but be sure it is trivial)
50 # (e.g. reading a file): 5min, constants.RPC_TMO_FAST
51 # - other calls: 15 min, constants.RPC_TMO_NORMAL
52 # - special calls (instance add, etc.):
53 # either constants.RPC_TMO_SLOW (1h) or huge timeouts
55 SINGLE = "single-node"
58 ACCEPT_OFFLINE_NODE = object()
60 # Constants for encoding/decoding
64 ED_INST_DICT_HVP_BEP_DP,
69 ED_FINALIZE_EXPORT_DISKS,
73 ED_MULTI_DISKS_DICT_DP,
74 ED_SINGLE_DISK_DICT_DP,
75 ED_NIC_DICT) = range(1, 16)
79 """Converts list of calls to dictionary.
82 return utils.SequenceToDict(calls)
85 def _MigrationStatusPostProc(result):
86 """Post-processor for L{rpc.RpcRunner.call_instance_get_migration_status}.
89 if not result.fail_msg and result.payload is not None:
90 result.payload = objects.MigrationStatus.FromDict(result.payload)
94 def _BlockdevFindPostProc(result):
95 """Post-processor for L{rpc.RpcRunner.call_blockdev_find}.
98 if not result.fail_msg and result.payload is not None:
99 result.payload = objects.BlockDevStatus.FromDict(result.payload)
103 def _BlockdevGetMirrorStatusPostProc(result):
104 """Post-processor for L{rpc.RpcRunner.call_blockdev_getmirrorstatus}.
107 if not result.fail_msg:
108 result.payload = map(objects.BlockDevStatus.FromDict, result.payload)
112 def _BlockdevGetMirrorStatusMultiPreProc(node, args):
113 """Prepares the appropriate node values for blockdev_getmirrorstatus_multi.
116 # there should be only one argument to this RPC, already holding a
117 # node->disks dictionary, we just need to extract the value for the
119 assert len(args) == 1
120 return [args[0][node]]
123 def _BlockdevGetMirrorStatusMultiPostProc(result):
124 """Post-processor for L{rpc.RpcRunner.call_blockdev_getmirrorstatus_multi}.
127 if not result.fail_msg:
128 for idx, (success, status) in enumerate(result.payload):
130 result.payload[idx] = (success, objects.BlockDevStatus.FromDict(status))
135 def _NodeInfoPreProc(node, args):
136 """Prepare the storage_units argument for node_info calls."""
137 assert len(args) == 2
138 # The storage_units argument is either a dictionary with one value for each
139 # node, or a fixed value to be used for all the nodes
140 if type(args[0]) is dict:
141 return [args[0][node], args[1]]
146 def _DrbdCallsPreProc(node, args):
147 """Add the target node UUID as additional field for DRBD related calls."""
151 def _OsGetPostProc(result):
152 """Post-processor for L{rpc.RpcRunner.call_os_get}.
155 if not result.fail_msg and isinstance(result.payload, dict):
156 result.payload = objects.OS.FromDict(result.payload)
160 def _ImpExpStatusPostProc(result):
161 """Post-processor for import/export status.
163 @rtype: Payload containing list of L{objects.ImportExportStatus} instances
164 @return: Returns a list of the state of each named import/export or None if
165 a status couldn't be retrieved
168 if not result.fail_msg:
171 for i in result.payload:
175 decoded.append(objects.ImportExportStatus.FromDict(i))
177 result.payload = decoded
182 def _TestDelayTimeout((duration, )):
183 """Calculate timeout for "test_delay" RPC.
186 return int(duration + 5)
189 _FILE_STORAGE_CALLS = [
190 ("file_storage_dir_create", SINGLE, None, constants.RPC_TMO_FAST, [
191 ("file_storage_dir", None, "File storage directory"),
192 ], None, None, "Create the given file storage directory"),
193 ("file_storage_dir_remove", SINGLE, None, constants.RPC_TMO_FAST, [
194 ("file_storage_dir", None, "File storage directory"),
195 ], None, None, "Remove the given file storage directory"),
196 ("file_storage_dir_rename", SINGLE, None, constants.RPC_TMO_FAST, [
197 ("old_file_storage_dir", None, "Old name"),
198 ("new_file_storage_dir", None, "New name"),
199 ], None, None, "Rename file storage directory"),
203 ("storage_list", MULTI, None, constants.RPC_TMO_NORMAL, [
204 ("su_name", None, None),
205 ("su_args", None, None),
206 ("name", None, None),
207 ("fields", None, None),
208 ], None, None, "Get list of storage units"),
209 ("storage_modify", SINGLE, None, constants.RPC_TMO_NORMAL, [
210 ("su_name", None, None),
211 ("su_args", None, None),
212 ("name", None, None),
213 ("changes", None, None),
214 ], None, None, "Modify a storage unit"),
215 ("storage_execute", SINGLE, None, constants.RPC_TMO_NORMAL, [
216 ("su_name", None, None),
217 ("su_args", None, None),
218 ("name", None, None),
220 ], None, None, "Executes an operation on a storage unit"),
224 ("instance_info", SINGLE, None, constants.RPC_TMO_URGENT, [
225 ("instance", None, "Instance name"),
226 ("hname", None, "Hypervisor type"),
227 ("hvparams", None, "Hypervisor parameters"),
228 ], None, None, "Returns information about a single instance"),
229 ("all_instances_info", MULTI, None, constants.RPC_TMO_URGENT, [
230 ("hypervisor_list", None, "Hypervisors to query for instances"),
231 ("all_hvparams", None, "Dictionary mapping hypervisor names to hvparams"),
233 "Returns information about all instances on the given nodes"),
234 ("instance_list", MULTI, None, constants.RPC_TMO_URGENT, [
235 ("hypervisor_list", None, "Hypervisors to query for instances"),
236 ("hvparams", None, "Hvparams of all hypervisors"),
237 ], None, None, "Returns the list of running instances on the given nodes"),
238 ("instance_reboot", SINGLE, None, constants.RPC_TMO_NORMAL, [
239 ("inst", ED_INST_DICT, "Instance object"),
240 ("reboot_type", None, None),
241 ("shutdown_timeout", None, None),
242 ("reason", None, "The reason for the reboot"),
243 ], None, None, "Returns the list of running instances on the given nodes"),
244 ("instance_shutdown", SINGLE, None, constants.RPC_TMO_NORMAL, [
245 ("instance", ED_INST_DICT, "Instance object"),
246 ("timeout", None, None),
247 ("reason", None, "The reason for the shutdown"),
248 ], None, None, "Stops an instance"),
249 ("instance_balloon_memory", SINGLE, None, constants.RPC_TMO_NORMAL, [
250 ("instance", ED_INST_DICT, "Instance object"),
251 ("memory", None, None),
252 ], None, None, "Modify the amount of an instance's runtime memory"),
253 ("instance_run_rename", SINGLE, None, constants.RPC_TMO_SLOW, [
254 ("instance", ED_INST_DICT, "Instance object"),
255 ("old_name", None, None),
256 ("debug", None, None),
257 ], None, None, "Run the OS rename script for an instance"),
258 ("instance_migratable", SINGLE, None, constants.RPC_TMO_NORMAL, [
259 ("instance", ED_INST_DICT, "Instance object"),
260 ], None, None, "Checks whether the given instance can be migrated"),
261 ("migration_info", SINGLE, None, constants.RPC_TMO_NORMAL, [
262 ("instance", ED_INST_DICT, "Instance object"),
264 "Gather the information necessary to prepare an instance migration"),
265 ("accept_instance", SINGLE, None, constants.RPC_TMO_NORMAL, [
266 ("instance", ED_INST_DICT, "Instance object"),
267 ("info", None, "Result for the call_migration_info call"),
268 ("target", None, "Target hostname (usually an IP address)"),
269 ], None, None, "Prepare a node to accept an instance"),
270 ("instance_finalize_migration_dst", SINGLE, None, constants.RPC_TMO_NORMAL, [
271 ("instance", ED_INST_DICT, "Instance object"),
272 ("info", None, "Result for the call_migration_info call"),
273 ("success", None, "Whether the migration was a success or failure"),
274 ], None, None, "Finalize any target-node migration specific operation"),
275 ("instance_migrate", SINGLE, None, constants.RPC_TMO_SLOW, [
276 ("cluster_name", None, "Cluster name"),
277 ("instance", ED_INST_DICT, "Instance object"),
278 ("target", None, "Target node name"),
279 ("live", None, "Whether the migration should be done live or not"),
280 ], None, None, "Migrate an instance"),
281 ("instance_finalize_migration_src", SINGLE, None, constants.RPC_TMO_SLOW, [
282 ("instance", ED_INST_DICT, "Instance object"),
283 ("success", None, "Whether the migration succeeded or not"),
284 ("live", None, "Whether the user requested a live migration or not"),
285 ], None, None, "Finalize the instance migration on the source node"),
286 ("instance_get_migration_status", SINGLE, None, constants.RPC_TMO_SLOW, [
287 ("instance", ED_INST_DICT, "Instance object"),
288 ], None, _MigrationStatusPostProc, "Report migration status"),
289 ("instance_start", SINGLE, None, constants.RPC_TMO_NORMAL, [
290 ("instance_hvp_bep", ED_INST_DICT_HVP_BEP_DP, None),
291 ("startup_paused", None, None),
292 ("reason", None, "The reason for the startup"),
293 ], None, None, "Starts an instance"),
294 ("instance_os_add", SINGLE, None, constants.RPC_TMO_1DAY, [
295 ("instance_osp", ED_INST_DICT_OSP_DP, None),
296 ("reinstall", None, None),
297 ("debug", None, None),
298 ], None, None, "Starts an instance"),
302 ("import_start", SINGLE, None, constants.RPC_TMO_NORMAL, [
303 ("opts", ED_OBJECT_DICT, None),
304 ("instance", ED_INST_DICT, None),
305 ("component", None, None),
306 ("dest", ED_IMPEXP_IO, "Import destination"),
307 ], None, None, "Starts an import daemon"),
308 ("export_start", SINGLE, None, constants.RPC_TMO_NORMAL, [
309 ("opts", ED_OBJECT_DICT, None),
310 ("host", None, None),
311 ("port", None, None),
312 ("instance", ED_INST_DICT, None),
313 ("component", None, None),
314 ("source", ED_IMPEXP_IO, "Export source"),
315 ], None, None, "Starts an export daemon"),
316 ("impexp_status", SINGLE, None, constants.RPC_TMO_FAST, [
317 ("names", None, "Import/export names"),
318 ], None, _ImpExpStatusPostProc, "Gets the status of an import or export"),
319 ("impexp_abort", SINGLE, None, constants.RPC_TMO_NORMAL, [
320 ("name", None, "Import/export name"),
321 ], None, None, "Aborts an import or export"),
322 ("impexp_cleanup", SINGLE, None, constants.RPC_TMO_NORMAL, [
323 ("name", None, "Import/export name"),
324 ], None, None, "Cleans up after an import or export"),
325 ("export_info", SINGLE, None, constants.RPC_TMO_FAST, [
326 ("path", None, None),
327 ], None, None, "Queries the export information in a given path"),
328 ("finalize_export", SINGLE, None, constants.RPC_TMO_NORMAL, [
329 ("instance", ED_INST_DICT, None),
330 ("snap_disks", ED_FINALIZE_EXPORT_DISKS, None),
331 ], None, None, "Request the completion of an export operation"),
332 ("export_list", MULTI, None, constants.RPC_TMO_FAST, [], None, None,
333 "Gets the stored exports list"),
334 ("export_remove", SINGLE, None, constants.RPC_TMO_FAST, [
335 ("export", None, None),
336 ], None, None, "Requests removal of a given export"),
340 ("x509_cert_create", SINGLE, None, constants.RPC_TMO_NORMAL, [
341 ("validity", None, "Validity in seconds"),
342 ], None, None, "Creates a new X509 certificate for SSL/TLS"),
343 ("x509_cert_remove", SINGLE, None, constants.RPC_TMO_NORMAL, [
344 ("name", None, "Certificate name"),
345 ], None, None, "Removes a X509 certificate"),
349 ("bdev_sizes", MULTI, None, constants.RPC_TMO_URGENT, [
350 ("devices", None, None),
352 "Gets the sizes of requested block devices present on a node"),
353 ("blockdev_create", SINGLE, None, constants.RPC_TMO_NORMAL, [
354 ("bdev", ED_OBJECT_DICT, None),
355 ("size", None, None),
356 ("owner", None, None),
357 ("on_primary", None, None),
358 ("info", None, None),
359 ("exclusive_storage", None, None),
360 ], None, None, "Request creation of a given block device"),
361 ("blockdev_wipe", SINGLE, None, constants.RPC_TMO_SLOW, [
362 ("bdev", ED_SINGLE_DISK_DICT_DP, None),
363 ("offset", None, None),
364 ("size", None, None),
366 "Request wipe at given offset with given size of a block device"),
367 ("blockdev_remove", SINGLE, None, constants.RPC_TMO_NORMAL, [
368 ("bdev", ED_OBJECT_DICT, None),
369 ], None, None, "Request removal of a given block device"),
370 ("blockdev_pause_resume_sync", SINGLE, None, constants.RPC_TMO_NORMAL, [
371 ("disks", ED_DISKS_DICT_DP, None),
372 ("pause", None, None),
373 ], None, None, "Request a pause/resume of given block device"),
374 ("blockdev_assemble", SINGLE, None, constants.RPC_TMO_NORMAL, [
375 ("disk", ED_SINGLE_DISK_DICT_DP, None),
376 ("owner", None, None),
377 ("on_primary", None, None),
379 ], None, None, "Request assembling of a given block device"),
380 ("blockdev_shutdown", SINGLE, None, constants.RPC_TMO_NORMAL, [
381 ("disk", ED_SINGLE_DISK_DICT_DP, None),
382 ], None, None, "Request shutdown of a given block device"),
383 ("blockdev_addchildren", SINGLE, None, constants.RPC_TMO_NORMAL, [
384 ("bdev", ED_SINGLE_DISK_DICT_DP, None),
385 ("ndevs", ED_OBJECT_DICT_LIST, None),
387 "Request adding a list of children to a (mirroring) device"),
388 ("blockdev_removechildren", SINGLE, None, constants.RPC_TMO_NORMAL, [
389 ("bdev", ED_OBJECT_DICT, None),
390 ("ndevs", ED_OBJECT_DICT_LIST, None),
392 "Request removing a list of children from a (mirroring) device"),
393 ("blockdev_close", SINGLE, None, constants.RPC_TMO_NORMAL, [
394 ("instance_name", None, None),
395 ("disks", ED_OBJECT_DICT_LIST, None),
396 ], None, None, "Closes the given block devices"),
397 ("blockdev_getdimensions", SINGLE, None, constants.RPC_TMO_NORMAL, [
398 ("disks", ED_OBJECT_DICT_LIST, None),
399 ], None, None, "Returns size and spindles of the given disks"),
400 ("drbd_disconnect_net", MULTI, None, constants.RPC_TMO_NORMAL, [
401 ("nodes_ip", None, None),
402 ("disks", ED_OBJECT_DICT_LIST, None),
403 ], _DrbdCallsPreProc, None,
404 "Disconnects the network of the given drbd devices"),
405 ("drbd_attach_net", MULTI, None, constants.RPC_TMO_NORMAL, [
406 ("nodes_ip", None, None),
407 ("disks", ED_DISKS_DICT_DP, None),
408 ("instance_name", None, None),
409 ("multimaster", None, None),
410 ], _DrbdCallsPreProc, None, "Connects the given DRBD devices"),
411 ("drbd_wait_sync", MULTI, None, constants.RPC_TMO_SLOW, [
412 ("nodes_ip", None, None),
413 ("disks", ED_DISKS_DICT_DP, None),
414 ], _DrbdCallsPreProc, None,
415 "Waits for the synchronization of drbd devices is complete"),
416 ("drbd_needs_activation", SINGLE, None, constants.RPC_TMO_NORMAL, [
417 ("nodes_ip", None, None),
418 ("disks", ED_MULTI_DISKS_DICT_DP, None),
419 ], _DrbdCallsPreProc, None,
420 "Returns the drbd disks which need activation"),
421 ("blockdev_grow", SINGLE, None, constants.RPC_TMO_NORMAL, [
422 ("cf_bdev", ED_SINGLE_DISK_DICT_DP, None),
423 ("amount", None, None),
424 ("dryrun", None, None),
425 ("backingstore", None, None),
426 ("es_flag", None, None),
427 ], None, None, "Request growing of the given block device by a"
429 ("blockdev_export", SINGLE, None, constants.RPC_TMO_1DAY, [
430 ("cf_bdev", ED_SINGLE_DISK_DICT_DP, None),
431 ("dest_node", None, None),
432 ("dest_path", None, None),
433 ("cluster_name", None, None),
434 ], None, None, "Export a given disk to another node"),
435 ("blockdev_snapshot", SINGLE, None, constants.RPC_TMO_NORMAL, [
436 ("cf_bdev", ED_SINGLE_DISK_DICT_DP, None),
437 ], None, None, "Export a given disk to another node"),
438 ("blockdev_rename", SINGLE, None, constants.RPC_TMO_NORMAL, [
439 ("devlist", ED_BLOCKDEV_RENAME, None),
440 ], None, None, "Request rename of the given block devices"),
441 ("blockdev_find", SINGLE, None, constants.RPC_TMO_NORMAL, [
442 ("disk", ED_OBJECT_DICT, None),
443 ], None, _BlockdevFindPostProc,
444 "Request identification of a given block device"),
445 ("blockdev_getmirrorstatus", SINGLE, None, constants.RPC_TMO_NORMAL, [
446 ("disks", ED_DISKS_DICT_DP, None),
447 ], None, _BlockdevGetMirrorStatusPostProc,
448 "Request status of a (mirroring) device"),
449 ("blockdev_getmirrorstatus_multi", MULTI, None, constants.RPC_TMO_NORMAL, [
450 ("node_disks", ED_NODE_TO_DISK_DICT, None),
451 ], _BlockdevGetMirrorStatusMultiPreProc,
452 _BlockdevGetMirrorStatusMultiPostProc,
453 "Request status of (mirroring) devices from multiple nodes"),
454 ("blockdev_setinfo", SINGLE, None, constants.RPC_TMO_NORMAL, [
455 ("disk", ED_OBJECT_DICT, None),
456 ("info", None, None),
457 ], None, None, "Sets metadata information on a given block device"),
461 ("os_diagnose", MULTI, None, constants.RPC_TMO_FAST, [], None, None,
462 "Request a diagnose of OS definitions"),
463 ("os_validate", MULTI, None, constants.RPC_TMO_FAST, [
464 ("required", None, None),
465 ("name", None, None),
466 ("checks", None, None),
467 ("params", None, None),
468 ], None, None, "Run a validation routine for a given OS"),
469 ("os_get", SINGLE, None, constants.RPC_TMO_FAST, [
470 ("name", None, None),
471 ], None, _OsGetPostProc, "Returns an OS definition"),
474 _EXTSTORAGE_CALLS = [
475 ("extstorage_diagnose", MULTI, None, constants.RPC_TMO_FAST, [], None, None,
476 "Request a diagnose of ExtStorage Providers"),
480 ("node_has_ip_address", SINGLE, None, constants.RPC_TMO_FAST, [
481 ("address", None, "IP address"),
482 ], None, None, "Checks if a node has the given IP address"),
483 ("node_info", MULTI, None, constants.RPC_TMO_URGENT, [
484 ("storage_units", None,
485 "List of tuples '<storage_type>,<key>,[<param>]' to ask for disk space"
486 " information; the parameter list varies depending on the storage_type"),
488 "List of hypervisor specification (name, hvparams) to ask for node "
490 ], _NodeInfoPreProc, None, "Return node information"),
491 ("node_verify", MULTI, None, constants.RPC_TMO_NORMAL, [
492 ("checkdict", None, "What to verify"),
493 ("cluster_name", None, "Cluster name"),
494 ("all_hvparams", None, "Dictionary mapping hypervisor names to hvparams"),
495 ], None, None, "Request verification of given parameters"),
496 ("node_volumes", MULTI, None, constants.RPC_TMO_FAST, [], None, None,
497 "Gets all volumes on node(s)"),
498 ("node_demote_from_mc", SINGLE, None, constants.RPC_TMO_FAST, [], None, None,
499 "Demote a node from the master candidate role"),
500 ("node_powercycle", SINGLE, ACCEPT_OFFLINE_NODE, constants.RPC_TMO_NORMAL, [
501 ("hypervisor", None, "Hypervisor type"),
502 ("hvparams", None, "Hypervisor parameters"),
503 ], None, None, "Tries to powercycle a node"),
507 ("lv_list", MULTI, None, constants.RPC_TMO_URGENT, [
508 ("vg_name", None, None),
509 ], None, None, "Gets the logical volumes present in a given volume group"),
510 ("vg_list", MULTI, None, constants.RPC_TMO_URGENT, [], None, None,
511 "Gets the volume group list"),
512 ("bridges_exist", SINGLE, None, constants.RPC_TMO_URGENT, [
513 ("bridges_list", None, "Bridges which must be present on remote node"),
514 ], None, None, "Checks if a node has all the bridges given"),
515 ("etc_hosts_modify", SINGLE, None, constants.RPC_TMO_NORMAL, [
517 "Mode to operate; currently L{constants.ETC_HOSTS_ADD} or"
518 " L{constants.ETC_HOSTS_REMOVE}"),
519 ("name", None, "Hostname to be modified"),
520 ("ip", None, "IP address (L{constants.ETC_HOSTS_ADD} only)"),
521 ], None, None, "Modify hosts file with name"),
522 ("drbd_helper", MULTI, None, constants.RPC_TMO_URGENT, [],
523 None, None, "Gets DRBD helper"),
524 ("restricted_command", MULTI, None, constants.RPC_TMO_SLOW, [
525 ("cmd", None, "Command name"),
526 ], None, None, "Runs restricted command"),
527 ("run_oob", SINGLE, None, constants.RPC_TMO_NORMAL, [
528 ("oob_program", None, None),
529 ("command", None, None),
530 ("remote_node", None, None),
531 ("timeout", None, None),
532 ], None, None, "Runs out-of-band command"),
533 ("hooks_runner", MULTI, None, constants.RPC_TMO_NORMAL, [
534 ("hpath", None, None),
535 ("phase", None, None),
537 ], None, None, "Call the hooks runner"),
538 ("iallocator_runner", SINGLE, None, constants.RPC_TMO_NORMAL, [
539 ("name", None, "Iallocator name"),
540 ("idata", None, "JSON-encoded input string"),
541 ], None, None, "Call an iallocator on a remote node"),
542 ("test_delay", MULTI, None, _TestDelayTimeout, [
543 ("duration", None, None),
544 ], None, None, "Sleep for a fixed time on given node(s)"),
545 ("hypervisor_validate_params", MULTI, None, constants.RPC_TMO_NORMAL, [
546 ("hvname", None, "Hypervisor name"),
547 ("hvfull", None, "Parameters to be validated"),
548 ], None, None, "Validate hypervisor params"),
549 ("get_watcher_pause", SINGLE, None, constants.RPC_TMO_URGENT, [],
550 None, None, "Get watcher pause end"),
551 ("set_watcher_pause", MULTI, None, constants.RPC_TMO_URGENT, [
552 ("until", None, None),
553 ], None, None, "Set watcher pause end"),
558 _Prepare(_IMPEXP_CALLS + _X509_CALLS + _OS_CALLS + _NODE_CALLS +
559 _FILE_STORAGE_CALLS + _MISC_CALLS + _INSTANCE_CALLS +
560 _BLOCKDEV_CALLS + _STORAGE_CALLS + _EXTSTORAGE_CALLS),
561 "RpcClientJobQueue": _Prepare([
562 ("jobqueue_update", MULTI, None, constants.RPC_TMO_URGENT, [
563 ("file_name", None, None),
564 ("content", ED_COMPRESS, None),
565 ], None, None, "Update job queue file"),
566 ("jobqueue_purge", SINGLE, None, constants.RPC_TMO_NORMAL, [], None, None,
568 ("jobqueue_rename", MULTI, None, constants.RPC_TMO_URGENT, [
569 ("rename", None, None),
570 ], None, None, "Rename job queue file"),
571 ("jobqueue_set_drain_flag", MULTI, None, constants.RPC_TMO_URGENT, [
572 ("flag", None, None),
573 ], None, None, "Set job queue drain flag"),
575 "RpcClientBootstrap": _Prepare([
576 ("node_start_master_daemons", SINGLE, None, constants.RPC_TMO_FAST, [
577 ("no_voting", None, None),
578 ], None, None, "Starts master daemons on a node"),
579 ("node_activate_master_ip", SINGLE, None, constants.RPC_TMO_FAST, [
580 ("master_params", ED_OBJECT_DICT, "Network parameters of the master"),
581 ("use_external_mip_script", None,
582 "Whether to use the user-provided master IP address setup script"),
584 "Activates master IP on a node"),
585 ("node_stop_master", SINGLE, None, constants.RPC_TMO_FAST, [], None, None,
586 "Deactivates master IP and stops master daemons on a node"),
587 ("node_deactivate_master_ip", SINGLE, None, constants.RPC_TMO_FAST, [
588 ("master_params", ED_OBJECT_DICT, "Network parameters of the master"),
589 ("use_external_mip_script", None,
590 "Whether to use the user-provided master IP address setup script"),
592 "Deactivates master IP on a node"),
593 ("node_change_master_netmask", SINGLE, None, constants.RPC_TMO_FAST, [
594 ("old_netmask", None, "The old value of the netmask"),
595 ("netmask", None, "The new value of the netmask"),
596 ("master_ip", None, "The master IP"),
597 ("master_netdev", None, "The master network device"),
598 ], None, None, "Change master IP netmask"),
599 ("node_leave_cluster", SINGLE, None, constants.RPC_TMO_NORMAL, [
600 ("modify_ssh_setup", None, None),
602 "Requests a node to clean the cluster information it has"),
603 ("master_info", MULTI, None, constants.RPC_TMO_URGENT, [], None, None,
604 "Query master info"),
606 "RpcClientDnsOnly": _Prepare([
607 ("version", MULTI, ACCEPT_OFFLINE_NODE, constants.RPC_TMO_URGENT, [], None,
608 None, "Query node version"),
609 ("node_verify_light", MULTI, None, constants.RPC_TMO_NORMAL, [
610 ("checkdict", None, "What to verify"),
611 ("cluster_name", None, "Cluster name"),
612 ("hvparams", None, "Dictionary mapping hypervisor names to hvparams"),
613 ], None, None, "Request verification of given parameters"),
615 "RpcClientConfig": _Prepare([
616 ("upload_file", MULTI, None, constants.RPC_TMO_NORMAL, [
617 ("file_name", ED_FILE_DETAILS, None),
618 ], None, None, "Upload a file"),
619 ("write_ssconf_files", MULTI, None, constants.RPC_TMO_NORMAL, [
620 ("values", None, None),
621 ], None, None, "Write ssconf files"),