Statistics
| Branch: | Tag: | Revision:

root / lib / rpc_defs.py @ f7d9b3aa

History | View | Annotate | Download (19.1 kB)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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