Package ganeti :: Module rpc_defs
[hide private]
[frames] | no frames]

Source Code for Module ganeti.rpc_defs

  1  # 
  2  # 
  3   
  4  # Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Google Inc. 
  5  # 
  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. 
 10  # 
 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. 
 15  # 
 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 
 19  # 02110-1301, USA. 
 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  # 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 
 54   
 55  SINGLE = "single-node" 
 56  MULTI = "multi-node" 
 57   
 58  ACCEPT_OFFLINE_NODE = object() 
 59   
 60  # Constants for encoding/decoding 
 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_SINGLE_DISK_DICT_DP, 
 74   ED_NIC_DICT) = range(1, 15) 
 75   
 76   
77 -def _Prepare(calls):
78 """Converts list of calls to dictionary. 79 80 """ 81 return utils.SequenceToDict(calls)
82 83
84 -def _MigrationStatusPostProc(result):
85 """Post-processor for L{rpc.RpcRunner.call_instance_get_migration_status}. 86 87 """ 88 if not result.fail_msg and result.payload is not None: 89 result.payload = objects.MigrationStatus.FromDict(result.payload) 90 return result
91 92
93 -def _BlockdevFindPostProc(result):
94 """Post-processor for L{rpc.RpcRunner.call_blockdev_find}. 95 96 """ 97 if not result.fail_msg and result.payload is not None: 98 result.payload = objects.BlockDevStatus.FromDict(result.payload) 99 return result
100 101
102 -def _BlockdevGetMirrorStatusPostProc(result):
103 """Post-processor for L{rpc.RpcRunner.call_blockdev_getmirrorstatus}. 104 105 """ 106 if not result.fail_msg: 107 result.payload = map(objects.BlockDevStatus.FromDict, result.payload) 108 return result
109 110
111 -def _BlockdevGetMirrorStatusMultiPreProc(node, args):
112 """Prepares the appropriate node values for blockdev_getmirrorstatus_multi. 113 114 """ 115 # there should be only one argument to this RPC, already holding a 116 # node->disks dictionary, we just need to extract the value for the 117 # current node 118 assert len(args) == 1 119 return [args[0][node]]
120 121
122 -def _BlockdevGetMirrorStatusMultiPostProc(result):
123 """Post-processor for L{rpc.RpcRunner.call_blockdev_getmirrorstatus_multi}. 124 125 """ 126 if not result.fail_msg: 127 for idx, (success, status) in enumerate(result.payload): 128 if success: 129 result.payload[idx] = (success, objects.BlockDevStatus.FromDict(status)) 130 131 return result
132 133
134 -def _NodeInfoPreProc(node, args):
135 """Prepare the exclusive_storage argument for node_info calls.""" 136 assert len(args) == 3 137 # The third argument is either a dictionary with one value for each node, or 138 # a fixed value to be used for all the nodes 139 if type(args[2]) is dict: 140 return [args[0], args[1], args[2][node]] 141 else: 142 return args
143 144
145 -def _OsGetPostProc(result):
146 """Post-processor for L{rpc.RpcRunner.call_os_get}. 147 148 """ 149 if not result.fail_msg and isinstance(result.payload, dict): 150 result.payload = objects.OS.FromDict(result.payload) 151 return result
152 153
154 -def _ImpExpStatusPostProc(result):
155 """Post-processor for import/export status. 156 157 @rtype: Payload containing list of L{objects.ImportExportStatus} instances 158 @return: Returns a list of the state of each named import/export or None if 159 a status couldn't be retrieved 160 161 """ 162 if not result.fail_msg: 163 decoded = [] 164 165 for i in result.payload: 166 if i is None: 167 decoded.append(None) 168 continue 169 decoded.append(objects.ImportExportStatus.FromDict(i)) 170 171 result.payload = decoded 172 173 return result
174 175
176 -def _TestDelayTimeout((duration, )):
177 """Calculate timeout for "test_delay" RPC. 178 179 """ 180 return int(duration + 5)
181 182 183 _FILE_STORAGE_CALLS = [ 184 ("file_storage_dir_create", SINGLE, None, constants.RPC_TMO_FAST, [ 185 ("file_storage_dir", None, "File storage directory"), 186 ], None, None, "Create the given file storage directory"), 187 ("file_storage_dir_remove", SINGLE, None, constants.RPC_TMO_FAST, [ 188 ("file_storage_dir", None, "File storage directory"), 189 ], None, None, "Remove the given file storage directory"), 190 ("file_storage_dir_rename", SINGLE, None, constants.RPC_TMO_FAST, [ 191 ("old_file_storage_dir", None, "Old name"), 192 ("new_file_storage_dir", None, "New name"), 193 ], None, None, "Rename file storage directory"), 194 ] 195 196 _STORAGE_CALLS = [ 197 ("storage_list", MULTI, None, constants.RPC_TMO_NORMAL, [ 198 ("su_name", None, None), 199 ("su_args", None, None), 200 ("name", None, None), 201 ("fields", None, None), 202 ], None, None, "Get list of storage units"), 203 ("storage_modify", SINGLE, None, constants.RPC_TMO_NORMAL, [ 204 ("su_name", None, None), 205 ("su_args", None, None), 206 ("name", None, None), 207 ("changes", None, None), 208 ], None, None, "Modify a storage unit"), 209 ("storage_execute", SINGLE, None, constants.RPC_TMO_NORMAL, [ 210 ("su_name", None, None), 211 ("su_args", None, None), 212 ("name", None, None), 213 ("op", None, None), 214 ], None, None, "Executes an operation on a storage unit"), 215 ] 216 217 _INSTANCE_CALLS = [ 218 ("instance_info", SINGLE, None, constants.RPC_TMO_URGENT, [ 219 ("instance", None, "Instance name"), 220 ("hname", None, "Hypervisor type"), 221 ], None, None, "Returns information about a single instance"), 222 ("all_instances_info", MULTI, None, constants.RPC_TMO_URGENT, [ 223 ("hypervisor_list", None, "Hypervisors to query for instances"), 224 ], None, None, 225 "Returns information about all instances on the given nodes"), 226 ("instance_list", MULTI, None, constants.RPC_TMO_URGENT, [ 227 ("hypervisor_list", None, "Hypervisors to query for instances"), 228 ], None, None, "Returns the list of running instances on the given nodes"), 229 ("instance_reboot", SINGLE, None, constants.RPC_TMO_NORMAL, [ 230 ("inst", ED_INST_DICT, "Instance object"), 231 ("reboot_type", None, None), 232 ("shutdown_timeout", None, None), 233 ("reason", None, "The reason for the reboot"), 234 ], None, None, "Returns the list of running instances on the given nodes"), 235 ("instance_shutdown", SINGLE, None, constants.RPC_TMO_NORMAL, [ 236 ("instance", ED_INST_DICT, "Instance object"), 237 ("timeout", None, None), 238 ("reason", None, "The reason for the shutdown"), 239 ], None, None, "Stops an instance"), 240 ("instance_balloon_memory", SINGLE, None, constants.RPC_TMO_NORMAL, [ 241 ("instance", ED_INST_DICT, "Instance object"), 242 ("memory", None, None), 243 ], None, None, "Modify the amount of an instance's runtime memory"), 244 ("instance_run_rename", SINGLE, None, constants.RPC_TMO_SLOW, [ 245 ("instance", ED_INST_DICT, "Instance object"), 246 ("old_name", None, None), 247 ("debug", None, None), 248 ], None, None, "Run the OS rename script for an instance"), 249 ("instance_migratable", SINGLE, None, constants.RPC_TMO_NORMAL, [ 250 ("instance", ED_INST_DICT, "Instance object"), 251 ], None, None, "Checks whether the given instance can be migrated"), 252 ("migration_info", SINGLE, None, constants.RPC_TMO_NORMAL, [ 253 ("instance", ED_INST_DICT, "Instance object"), 254 ], None, None, 255 "Gather the information necessary to prepare an instance migration"), 256 ("accept_instance", SINGLE, None, constants.RPC_TMO_NORMAL, [ 257 ("instance", ED_INST_DICT, "Instance object"), 258 ("info", None, "Result for the call_migration_info call"), 259 ("target", None, "Target hostname (usually an IP address)"), 260 ], None, None, "Prepare a node to accept an instance"), 261 ("instance_finalize_migration_dst", SINGLE, None, constants.RPC_TMO_NORMAL, [ 262 ("instance", ED_INST_DICT, "Instance object"), 263 ("info", None, "Result for the call_migration_info call"), 264 ("success", None, "Whether the migration was a success or failure"), 265 ], None, None, "Finalize any target-node migration specific operation"), 266 ("instance_migrate", SINGLE, None, constants.RPC_TMO_SLOW, [ 267 ("instance", ED_INST_DICT, "Instance object"), 268 ("target", None, "Target node name"), 269 ("live", None, "Whether the migration should be done live or not"), 270 ], None, None, "Migrate an instance"), 271 ("instance_finalize_migration_src", SINGLE, None, constants.RPC_TMO_SLOW, [ 272 ("instance", ED_INST_DICT, "Instance object"), 273 ("success", None, "Whether the migration succeeded or not"), 274 ("live", None, "Whether the user requested a live migration or not"), 275 ], None, None, "Finalize the instance migration on the source node"), 276 ("instance_get_migration_status", SINGLE, None, constants.RPC_TMO_SLOW, [ 277 ("instance", ED_INST_DICT, "Instance object"), 278 ], None, _MigrationStatusPostProc, "Report migration status"), 279 ("instance_start", SINGLE, None, constants.RPC_TMO_NORMAL, [ 280 ("instance_hvp_bep", ED_INST_DICT_HVP_BEP_DP, None), 281 ("startup_paused", None, None), 282 ("reason", None, "The reason for the startup"), 283 ], None, None, "Starts an instance"), 284 ("instance_os_add", SINGLE, None, constants.RPC_TMO_1DAY, [ 285 ("instance_osp", ED_INST_DICT_OSP_DP, None), 286 ("reinstall", None, None), 287 ("debug", None, None), 288 ], None, None, "Starts an instance"), 289 ] 290 291 _IMPEXP_CALLS = [ 292 ("import_start", SINGLE, None, constants.RPC_TMO_NORMAL, [ 293 ("opts", ED_OBJECT_DICT, None), 294 ("instance", ED_INST_DICT, None), 295 ("component", None, None), 296 ("dest", ED_IMPEXP_IO, "Import destination"), 297 ], None, None, "Starts an import daemon"), 298 ("export_start", SINGLE, None, constants.RPC_TMO_NORMAL, [ 299 ("opts", ED_OBJECT_DICT, None), 300 ("host", None, None), 301 ("port", None, None), 302 ("instance", ED_INST_DICT, None), 303 ("component", None, None), 304 ("source", ED_IMPEXP_IO, "Export source"), 305 ], None, None, "Starts an export daemon"), 306 ("impexp_status", SINGLE, None, constants.RPC_TMO_FAST, [ 307 ("names", None, "Import/export names"), 308 ], None, _ImpExpStatusPostProc, "Gets the status of an import or export"), 309 ("impexp_abort", SINGLE, None, constants.RPC_TMO_NORMAL, [ 310 ("name", None, "Import/export name"), 311 ], None, None, "Aborts an import or export"), 312 ("impexp_cleanup", SINGLE, None, constants.RPC_TMO_NORMAL, [ 313 ("name", None, "Import/export name"), 314 ], None, None, "Cleans up after an import or export"), 315 ("export_info", SINGLE, None, constants.RPC_TMO_FAST, [ 316 ("path", None, None), 317 ], None, None, "Queries the export information in a given path"), 318 ("finalize_export", SINGLE, None, constants.RPC_TMO_NORMAL, [ 319 ("instance", ED_INST_DICT, None), 320 ("snap_disks", ED_FINALIZE_EXPORT_DISKS, None), 321 ], None, None, "Request the completion of an export operation"), 322 ("export_list", MULTI, None, constants.RPC_TMO_FAST, [], None, None, 323 "Gets the stored exports list"), 324 ("export_remove", SINGLE, None, constants.RPC_TMO_FAST, [ 325 ("export", None, None), 326 ], None, None, "Requests removal of a given export"), 327 ] 328 329 _X509_CALLS = [ 330 ("x509_cert_create", SINGLE, None, constants.RPC_TMO_NORMAL, [ 331 ("validity", None, "Validity in seconds"), 332 ], None, None, "Creates a new X509 certificate for SSL/TLS"), 333 ("x509_cert_remove", SINGLE, None, constants.RPC_TMO_NORMAL, [ 334 ("name", None, "Certificate name"), 335 ], None, None, "Removes a X509 certificate"), 336 ] 337 338 _BLOCKDEV_CALLS = [ 339 ("bdev_sizes", MULTI, None, constants.RPC_TMO_URGENT, [ 340 ("devices", None, None), 341 ], None, None, 342 "Gets the sizes of requested block devices present on a node"), 343 ("blockdev_create", SINGLE, None, constants.RPC_TMO_NORMAL, [ 344 ("bdev", ED_OBJECT_DICT, None), 345 ("size", None, None), 346 ("owner", None, None), 347 ("on_primary", None, None), 348 ("info", None, None), 349 ("exclusive_storage", None, None), 350 ], None, None, "Request creation of a given block device"), 351 ("blockdev_wipe", SINGLE, None, constants.RPC_TMO_SLOW, [ 352 ("bdev", ED_SINGLE_DISK_DICT_DP, None), 353 ("offset", None, None), 354 ("size", None, None), 355 ], None, None, 356 "Request wipe at given offset with given size of a block device"), 357 ("blockdev_remove", SINGLE, None, constants.RPC_TMO_NORMAL, [ 358 ("bdev", ED_OBJECT_DICT, None), 359 ], None, None, "Request removal of a given block device"), 360 ("blockdev_pause_resume_sync", SINGLE, None, constants.RPC_TMO_NORMAL, [ 361 ("disks", ED_DISKS_DICT_DP, None), 362 ("pause", None, None), 363 ], None, None, "Request a pause/resume of given block device"), 364 ("blockdev_assemble", SINGLE, None, constants.RPC_TMO_NORMAL, [ 365 ("disk", ED_SINGLE_DISK_DICT_DP, None), 366 ("owner", None, None), 367 ("on_primary", None, None), 368 ("idx", None, None), 369 ], None, None, "Request assembling of a given block device"), 370 ("blockdev_shutdown", SINGLE, None, constants.RPC_TMO_NORMAL, [ 371 ("disk", ED_SINGLE_DISK_DICT_DP, None), 372 ], None, None, "Request shutdown of a given block device"), 373 ("blockdev_addchildren", SINGLE, None, constants.RPC_TMO_NORMAL, [ 374 ("bdev", ED_SINGLE_DISK_DICT_DP, None), 375 ("ndevs", ED_OBJECT_DICT_LIST, None), 376 ], None, None, 377 "Request adding a list of children to a (mirroring) device"), 378 ("blockdev_removechildren", SINGLE, None, constants.RPC_TMO_NORMAL, [ 379 ("bdev", ED_OBJECT_DICT, None), 380 ("ndevs", ED_OBJECT_DICT_LIST, None), 381 ], None, None, 382 "Request removing a list of children from a (mirroring) device"), 383 ("blockdev_close", SINGLE, None, constants.RPC_TMO_NORMAL, [ 384 ("instance_name", None, None), 385 ("disks", ED_OBJECT_DICT_LIST, None), 386 ], None, None, "Closes the given block devices"), 387 ("blockdev_getsize", SINGLE, None, constants.RPC_TMO_NORMAL, [ 388 ("disks", ED_OBJECT_DICT_LIST, None), 389 ], None, None, "Returns the size of the given disks"), 390 ("drbd_disconnect_net", MULTI, None, constants.RPC_TMO_NORMAL, [ 391 ("nodes_ip", None, None), 392 ("disks", ED_OBJECT_DICT_LIST, None), 393 ], None, None, "Disconnects the network of the given drbd devices"), 394 ("drbd_attach_net", MULTI, None, constants.RPC_TMO_NORMAL, [ 395 ("nodes_ip", None, None), 396 ("disks", ED_DISKS_DICT_DP, None), 397 ("instance_name", None, None), 398 ("multimaster", None, None), 399 ], None, None, "Connects the given DRBD devices"), 400 ("drbd_wait_sync", MULTI, None, constants.RPC_TMO_SLOW, [ 401 ("nodes_ip", None, None), 402 ("disks", ED_DISKS_DICT_DP, None), 403 ], None, None, 404 "Waits for the synchronization of drbd devices is complete"), 405 ("blockdev_grow", SINGLE, None, constants.RPC_TMO_NORMAL, [ 406 ("cf_bdev", ED_SINGLE_DISK_DICT_DP, None), 407 ("amount", None, None), 408 ("dryrun", None, None), 409 ("backingstore", None, None), 410 ], None, None, "Request growing of the given block device by a" 411 " given amount"), 412 ("blockdev_export", SINGLE, None, constants.RPC_TMO_1DAY, [ 413 ("cf_bdev", ED_SINGLE_DISK_DICT_DP, None), 414 ("dest_node", None, None), 415 ("dest_path", None, None), 416 ("cluster_name", None, None), 417 ], None, None, "Export a given disk to another node"), 418 ("blockdev_snapshot", SINGLE, None, constants.RPC_TMO_NORMAL, [ 419 ("cf_bdev", ED_SINGLE_DISK_DICT_DP, None), 420 ], None, None, "Export a given disk to another node"), 421 ("blockdev_rename", SINGLE, None, constants.RPC_TMO_NORMAL, [ 422 ("devlist", ED_BLOCKDEV_RENAME, None), 423 ], None, None, "Request rename of the given block devices"), 424 ("blockdev_find", SINGLE, None, constants.RPC_TMO_NORMAL, [ 425 ("disk", ED_OBJECT_DICT, None), 426 ], None, _BlockdevFindPostProc, 427 "Request identification of a given block device"), 428 ("blockdev_getmirrorstatus", SINGLE, None, constants.RPC_TMO_NORMAL, [ 429 ("disks", ED_DISKS_DICT_DP, None), 430 ], None, _BlockdevGetMirrorStatusPostProc, 431 "Request status of a (mirroring) device"), 432 ("blockdev_getmirrorstatus_multi", MULTI, None, constants.RPC_TMO_NORMAL, [ 433 ("node_disks", ED_NODE_TO_DISK_DICT, None), 434 ], _BlockdevGetMirrorStatusMultiPreProc, 435 _BlockdevGetMirrorStatusMultiPostProc, 436 "Request status of (mirroring) devices from multiple nodes"), 437 ("blockdev_setinfo", SINGLE, None, constants.RPC_TMO_NORMAL, [ 438 ("disk", ED_OBJECT_DICT, None), 439 ("info", None, None), 440 ], None, None, "Sets metadata information on a given block device"), 441 ] 442 443 _OS_CALLS = [ 444 ("os_diagnose", MULTI, None, constants.RPC_TMO_FAST, [], None, None, 445 "Request a diagnose of OS definitions"), 446 ("os_validate", MULTI, None, constants.RPC_TMO_FAST, [ 447 ("required", None, None), 448 ("name", None, None), 449 ("checks", None, None), 450 ("params", None, None), 451 ], None, None, "Run a validation routine for a given OS"), 452 ("os_get", SINGLE, None, constants.RPC_TMO_FAST, [ 453 ("name", None, None), 454 ], None, _OsGetPostProc, "Returns an OS definition"), 455 ] 456 457 _EXTSTORAGE_CALLS = [ 458 ("extstorage_diagnose", MULTI, None, constants.RPC_TMO_FAST, [], None, None, 459 "Request a diagnose of ExtStorage Providers"), 460 ] 461 462 _NODE_CALLS = [ 463 ("node_has_ip_address", SINGLE, None, constants.RPC_TMO_FAST, [ 464 ("address", None, "IP address"), 465 ], None, None, "Checks if a node has the given IP address"), 466 ("node_info", MULTI, None, constants.RPC_TMO_URGENT, [ 467 ("vg_names", None, 468 "Names of the volume groups to ask for disk space information"), 469 ("hv_names", None, 470 "Names of the hypervisors to ask for node information"), 471 ("exclusive_storage", None, 472 "Whether exclusive storage is enabled"), 473 ], _NodeInfoPreProc, None, "Return node information"), 474 ("node_verify", MULTI, None, constants.RPC_TMO_NORMAL, [ 475 ("checkdict", None, None), 476 ("cluster_name", None, None), 477 ], None, None, "Request verification of given parameters"), 478 ("node_volumes", MULTI, None, constants.RPC_TMO_FAST, [], None, None, 479 "Gets all volumes on node(s)"), 480 ("node_demote_from_mc", SINGLE, None, constants.RPC_TMO_FAST, [], None, None, 481 "Demote a node from the master candidate role"), 482 ("node_powercycle", SINGLE, ACCEPT_OFFLINE_NODE, constants.RPC_TMO_NORMAL, [ 483 ("hypervisor", None, "Hypervisor type"), 484 ], None, None, "Tries to powercycle a node"), 485 ] 486 487 _MISC_CALLS = [ 488 ("lv_list", MULTI, None, constants.RPC_TMO_URGENT, [ 489 ("vg_name", None, None), 490 ], None, None, "Gets the logical volumes present in a given volume group"), 491 ("vg_list", MULTI, None, constants.RPC_TMO_URGENT, [], None, None, 492 "Gets the volume group list"), 493 ("bridges_exist", SINGLE, None, constants.RPC_TMO_URGENT, [ 494 ("bridges_list", None, "Bridges which must be present on remote node"), 495 ], None, None, "Checks if a node has all the bridges given"), 496 ("etc_hosts_modify", SINGLE, None, constants.RPC_TMO_NORMAL, [ 497 ("mode", None, 498 "Mode to operate; currently L{constants.ETC_HOSTS_ADD} or" 499 " L{constants.ETC_HOSTS_REMOVE}"), 500 ("name", None, "Hostname to be modified"), 501 ("ip", None, "IP address (L{constants.ETC_HOSTS_ADD} only)"), 502 ], None, None, "Modify hosts file with name"), 503 ("drbd_helper", MULTI, None, constants.RPC_TMO_URGENT, [], 504 None, None, "Gets DRBD helper"), 505 ("restricted_command", MULTI, None, constants.RPC_TMO_SLOW, [ 506 ("cmd", None, "Command name"), 507 ], None, None, "Runs restricted command"), 508 ("run_oob", SINGLE, None, constants.RPC_TMO_NORMAL, [ 509 ("oob_program", None, None), 510 ("command", None, None), 511 ("remote_node", None, None), 512 ("timeout", None, None), 513 ], None, None, "Runs out-of-band command"), 514 ("hooks_runner", MULTI, None, constants.RPC_TMO_NORMAL, [ 515 ("hpath", None, None), 516 ("phase", None, None), 517 ("env", None, None), 518 ], None, None, "Call the hooks runner"), 519 ("iallocator_runner", SINGLE, None, constants.RPC_TMO_NORMAL, [ 520 ("name", None, "Iallocator name"), 521 ("idata", None, "JSON-encoded input string"), 522 ], None, None, "Call an iallocator on a remote node"), 523 ("test_delay", MULTI, None, _TestDelayTimeout, [ 524 ("duration", None, None), 525 ], None, None, "Sleep for a fixed time on given node(s)"), 526 ("hypervisor_validate_params", MULTI, None, constants.RPC_TMO_NORMAL, [ 527 ("hvname", None, "Hypervisor name"), 528 ("hvfull", None, "Parameters to be validated"), 529 ], None, None, "Validate hypervisor params"), 530 ("get_watcher_pause", SINGLE, None, constants.RPC_TMO_URGENT, [], 531 None, None, "Get watcher pause end"), 532 ("set_watcher_pause", MULTI, None, constants.RPC_TMO_URGENT, [ 533 ("until", None, None), 534 ], None, None, "Set watcher pause end"), 535 ] 536 537 CALLS = { 538 "RpcClientDefault": 539 _Prepare(_IMPEXP_CALLS + _X509_CALLS + _OS_CALLS + _NODE_CALLS + 540 _FILE_STORAGE_CALLS + _MISC_CALLS + _INSTANCE_CALLS + 541 _BLOCKDEV_CALLS + _STORAGE_CALLS + _EXTSTORAGE_CALLS), 542 "RpcClientJobQueue": _Prepare([ 543 ("jobqueue_update", MULTI, None, constants.RPC_TMO_URGENT, [ 544 ("file_name", None, None), 545 ("content", ED_COMPRESS, None), 546 ], None, None, "Update job queue file"), 547 ("jobqueue_purge", SINGLE, None, constants.RPC_TMO_NORMAL, [], None, None, 548 "Purge job queue"), 549 ("jobqueue_rename", MULTI, None, constants.RPC_TMO_URGENT, [ 550 ("rename", None, None), 551 ], None, None, "Rename job queue file"), 552 ("jobqueue_set_drain_flag", MULTI, None, constants.RPC_TMO_URGENT, [ 553 ("flag", None, None), 554 ], None, None, "Set job queue drain flag"), 555 ]), 556 "RpcClientBootstrap": _Prepare([ 557 ("node_start_master_daemons", SINGLE, None, constants.RPC_TMO_FAST, [ 558 ("no_voting", None, None), 559 ], None, None, "Starts master daemons on a node"), 560 ("node_activate_master_ip", SINGLE, None, constants.RPC_TMO_FAST, [ 561 ("master_params", ED_OBJECT_DICT, "Network parameters of the master"), 562 ("use_external_mip_script", None, 563 "Whether to use the user-provided master IP address setup script"), 564 ], None, None, 565 "Activates master IP on a node"), 566 ("node_stop_master", SINGLE, None, constants.RPC_TMO_FAST, [], None, None, 567 "Deactivates master IP and stops master daemons on a node"), 568 ("node_deactivate_master_ip", SINGLE, None, constants.RPC_TMO_FAST, [ 569 ("master_params", ED_OBJECT_DICT, "Network parameters of the master"), 570 ("use_external_mip_script", None, 571 "Whether to use the user-provided master IP address setup script"), 572 ], None, None, 573 "Deactivates master IP on a node"), 574 ("node_change_master_netmask", SINGLE, None, constants.RPC_TMO_FAST, [ 575 ("old_netmask", None, "The old value of the netmask"), 576 ("netmask", None, "The new value of the netmask"), 577 ("master_ip", None, "The master IP"), 578 ("master_netdev", None, "The master network device"), 579 ], None, None, "Change master IP netmask"), 580 ("node_leave_cluster", SINGLE, None, constants.RPC_TMO_NORMAL, [ 581 ("modify_ssh_setup", None, None), 582 ], None, None, 583 "Requests a node to clean the cluster information it has"), 584 ("master_info", MULTI, None, constants.RPC_TMO_URGENT, [], None, None, 585 "Query master info"), 586 ]), 587 "RpcClientDnsOnly": _Prepare([ 588 ("version", MULTI, ACCEPT_OFFLINE_NODE, constants.RPC_TMO_URGENT, [], None, 589 None, "Query node version"), 590 ("node_verify_light", MULTI, None, constants.RPC_TMO_NORMAL, [ 591 ("checkdict", None, None), 592 ("cluster_name", None, None), 593 ], None, None, "Request verification of given parameters"), 594 ]), 595 "RpcClientConfig": _Prepare([ 596 ("upload_file", MULTI, None, constants.RPC_TMO_NORMAL, [ 597 ("file_name", ED_FILE_DETAILS, None), 598 ], None, None, "Upload a file"), 599 ("write_ssconf_files", MULTI, None, constants.RPC_TMO_NORMAL, [ 600 ("values", None, None), 601 ], None, None, "Write ssconf files"), 602 ]), 603 } 604