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_MULTI_DISKS_DICT_DP, 
 74   ED_SINGLE_DISK_DICT_DP, 
 75   ED_NIC_DICT) = range(1, 16) 
 76   
 77   
78 -def _Prepare(calls):
79 """Converts list of calls to dictionary. 80 81 """ 82 return utils.SequenceToDict(calls)
83 84
85 -def _MigrationStatusPostProc(result):
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
94 -def _BlockdevFindPostProc(result):
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
103 -def _BlockdevGetMirrorStatusPostProc(result):
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
112 -def _BlockdevGetMirrorStatusMultiPreProc(node, args):
113 """Prepares the appropriate node values for blockdev_getmirrorstatus_multi. 114 115 """ 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 118 # current node 119 assert len(args) == 1 120 return [args[0][node]]
121 122
123 -def _BlockdevGetMirrorStatusMultiPostProc(result):
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
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]] 142 else: 143 return args
144 145
146 -def _DrbdCallsPreProc(node, args):
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
160 -def _ImpExpStatusPostProc(result):
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
182 -def _TestDelayTimeout((duration, )):
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