1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 """RPC definitions for communication between master and node daemons.
22
23 RPC definition fields:
24
25 - Name as string
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
31
32 - Name as string
33 - Argument kind used for encoding/decoding
34 - Description for docstring (can be C{None})
35
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
39
40 """
41
42 from ganeti import constants
43 from ganeti import utils
44 from ganeti import objects
45
46
47
48
49
50
51
52
53
54
55 SINGLE = "single-node"
56 MULTI = "multi-node"
57
58 ACCEPT_OFFLINE_NODE = object()
59
60
61 (ED_OBJECT_DICT,
62 ED_OBJECT_DICT_LIST,
63 ED_INST_DICT,
64 ED_INST_DICT_HVP_BEP_DP,
65 ED_NODE_TO_DISK_DICT,
66 ED_INST_DICT_OSP_DP,
67 ED_IMPEXP_IO,
68 ED_FILE_DETAILS,
69 ED_FINALIZE_EXPORT_DISKS,
70 ED_COMPRESS,
71 ED_BLOCKDEV_RENAME,
72 ED_DISKS_DICT_DP,
73 ED_MULTI_DISKS_DICT_DP,
74 ED_SINGLE_DISK_DICT_DP,
75 ED_NIC_DICT) = range(1, 16)
76
77
79 """Converts list of calls to dictionary.
80
81 """
82 return utils.SequenceToDict(calls)
83
84
86 """Post-processor for L{rpc.RpcRunner.call_instance_get_migration_status}.
87
88 """
89 if not result.fail_msg and result.payload is not None:
90 result.payload = objects.MigrationStatus.FromDict(result.payload)
91 return result
92
93
95 """Post-processor for L{rpc.RpcRunner.call_blockdev_find}.
96
97 """
98 if not result.fail_msg and result.payload is not None:
99 result.payload = objects.BlockDevStatus.FromDict(result.payload)
100 return result
101
102
104 """Post-processor for L{rpc.RpcRunner.call_blockdev_getmirrorstatus}.
105
106 """
107 if not result.fail_msg:
108 result.payload = map(objects.BlockDevStatus.FromDict, result.payload)
109 return result
110
111
113 """Prepares the appropriate node values for blockdev_getmirrorstatus_multi.
114
115 """
116
117
118
119 assert len(args) == 1
120 return [args[0][node]]
121
122
124 """Post-processor for L{rpc.RpcRunner.call_blockdev_getmirrorstatus_multi}.
125
126 """
127 if not result.fail_msg:
128 for idx, (success, status) in enumerate(result.payload):
129 if success:
130 result.payload[idx] = (success, objects.BlockDevStatus.FromDict(status))
131
132 return result
133
134
136 """Prepare the storage_units argument for node_info calls."""
137 assert len(args) == 2
138
139
140 if type(args[0]) is dict:
141 return [args[0][node], args[1]]
142 else:
143 return args
144
145
147 """Add the target node UUID as additional field for DRBD related calls."""
148 return args + [node]
149
150
151 -def _OsGetPostProc(result):
152 """Post-processor for L{rpc.RpcRunner.call_os_get}.
153
154 """
155 if not result.fail_msg and isinstance(result.payload, dict):
156 result.payload = objects.OS.FromDict(result.payload)
157 return result
158
159
161 """Post-processor for import/export status.
162
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
166
167 """
168 if not result.fail_msg:
169 decoded = []
170
171 for i in result.payload:
172 if i is None:
173 decoded.append(None)
174 continue
175 decoded.append(objects.ImportExportStatus.FromDict(i))
176
177 result.payload = decoded
178
179 return result
180
181
183 """Calculate timeout for "test_delay" RPC.
184
185 """
186 return int(duration + 5)
187
188
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"),
200 ]
201
202 _STORAGE_CALLS = [
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),
219 ("op", None, None),
220 ], None, None, "Executes an operation on a storage unit"),
221 ]
222
223 _INSTANCE_CALLS = [
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"),
232 ], None, None,
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"),
263 ], None, None,
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"),
299 ]
300
301 _IMPEXP_CALLS = [
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"),
337 ]
338
339 _X509_CALLS = [
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"),
346 ]
347
348 _BLOCKDEV_CALLS = [
349 ("bdev_sizes", MULTI, None, constants.RPC_TMO_URGENT, [
350 ("devices", None, None),
351 ], 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),
365 ], 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),
378 ("idx", 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),
386 ], None, 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),
391 ], None, 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"
428 " given amount"),
429 ("blockdev_export", SINGLE, None, constants.RPC_TMO_1DAY, [
430 ("cf_bdev", ED_SINGLE_DISK_DICT_DP, None),
431 ("dest_node_ip", 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"),
458 ]
459
460 _OS_CALLS = [
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"),
472 ]
473
474 _EXTSTORAGE_CALLS = [
475 ("extstorage_diagnose", MULTI, None, constants.RPC_TMO_FAST, [], None, None,
476 "Request a diagnose of ExtStorage Providers"),
477 ]
478
479 _NODE_CALLS = [
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"),
487 ("hv_specs", None,
488 "List of hypervisor specification (name, hvparams) to ask for node "
489 "information"),
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"),
504 ]
505
506 _MISC_CALLS = [
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, [
516 ("mode", None,
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),
536 ("env", 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"),
554 ]
555
556 CALLS = {
557 "RpcClientDefault":
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,
567 "Purge job queue"),
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"),
574 ]),
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"),
583 ], None, None,
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"),
591 ], None, None,
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),
601 ], 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"),
605 ]),
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"),
614 ]),
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"),
622 ]),
623 }
624