Statistics
| Branch: | Tag: | Revision:

root / lib / rpc_defs.py @ c47eddb8

History | View | Annotate | Download (20.2 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 60154921 Iustin Pop
  - Custom body encoder (e.g. for preparing per-node bodies)
36 033684dd Michael Hanselmann
  - Return value wrapper (e.g. for deserializing into L{objects}-based objects)
37 033684dd Michael Hanselmann
  - Short call description for docstring
38 033684dd Michael Hanselmann

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

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

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

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

102 26d502d0 Michael Hanselmann
  """
103 26d502d0 Michael Hanselmann
  if not result.fail_msg:
104 26d502d0 Michael Hanselmann
    result.payload = map(objects.BlockDevStatus.FromDict, result.payload)
105 26d502d0 Michael Hanselmann
  return result
106 26d502d0 Michael Hanselmann
107 26d502d0 Michael Hanselmann
108 5449685e Iustin Pop
def _BlockdevGetMirrorStatusMultiPreProc(node, args):
109 5449685e Iustin Pop
  """Prepares the appropriate node values for blockdev_getmirrorstatus_multi.
110 5449685e Iustin Pop

111 5449685e Iustin Pop
  """
112 5449685e Iustin Pop
  # there should be only one argument to this RPC, already holding a
113 5449685e Iustin Pop
  # node->disks dictionary, we just need to extract the value for the
114 5449685e Iustin Pop
  # current node
115 5449685e Iustin Pop
  assert len(args) == 1
116 5449685e Iustin Pop
  return [args[0][node]]
117 5449685e Iustin Pop
118 5449685e Iustin Pop
119 26d502d0 Michael Hanselmann
def _BlockdevGetMirrorStatusMultiPostProc(result):
120 26d502d0 Michael Hanselmann
  """Post-processor for L{rpc.RpcRunner.call_blockdev_getmirrorstatus_multi}.
121 26d502d0 Michael Hanselmann

122 26d502d0 Michael Hanselmann
  """
123 82cce526 Michael Hanselmann
  if not result.fail_msg:
124 82cce526 Michael Hanselmann
    for idx, (success, status) in enumerate(result.payload):
125 26d502d0 Michael Hanselmann
      if success:
126 82cce526 Michael Hanselmann
        result.payload[idx] = (success, objects.BlockDevStatus.FromDict(status))
127 26d502d0 Michael Hanselmann
128 26d502d0 Michael Hanselmann
  return result
129 26d502d0 Michael Hanselmann
130 26d502d0 Michael Hanselmann
131 26d502d0 Michael Hanselmann
def _OsGetPostProc(result):
132 26d502d0 Michael Hanselmann
  """Post-processor for L{rpc.RpcRunner.call_os_get}.
133 26d502d0 Michael Hanselmann

134 26d502d0 Michael Hanselmann
  """
135 26d502d0 Michael Hanselmann
  if not result.fail_msg and isinstance(result.payload, dict):
136 26d502d0 Michael Hanselmann
    result.payload = objects.OS.FromDict(result.payload)
137 26d502d0 Michael Hanselmann
  return result
138 26d502d0 Michael Hanselmann
139 26d502d0 Michael Hanselmann
140 26d502d0 Michael Hanselmann
def _ImpExpStatusPostProc(result):
141 26d502d0 Michael Hanselmann
  """Post-processor for import/export status.
142 26d502d0 Michael Hanselmann

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

147 26d502d0 Michael Hanselmann
  """
148 26d502d0 Michael Hanselmann
  if not result.fail_msg:
149 26d502d0 Michael Hanselmann
    decoded = []
150 26d502d0 Michael Hanselmann
151 26d502d0 Michael Hanselmann
    for i in result.payload:
152 26d502d0 Michael Hanselmann
      if i is None:
153 26d502d0 Michael Hanselmann
        decoded.append(None)
154 26d502d0 Michael Hanselmann
        continue
155 26d502d0 Michael Hanselmann
      decoded.append(objects.ImportExportStatus.FromDict(i))
156 26d502d0 Michael Hanselmann
157 26d502d0 Michael Hanselmann
    result.payload = decoded
158 26d502d0 Michael Hanselmann
159 26d502d0 Michael Hanselmann
  return result
160 26d502d0 Michael Hanselmann
161 26d502d0 Michael Hanselmann
162 f7d9b3aa Michael Hanselmann
def _TestDelayTimeout((duration, )):
163 f7d9b3aa Michael Hanselmann
  """Calculate timeout for "test_delay" RPC.
164 f7d9b3aa Michael Hanselmann

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