Statistics
| Branch: | Tag: | Revision:

root / lib / rpc_defs.py @ 68a856ef

History | View | Annotate | Download (20.9 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 dd6d2d09 Michael Hanselmann
  - Name resolver option(s), can be callable receiving all arguments in a tuple
28 f7d9b3aa Michael Hanselmann
  - Timeout (e.g. L{TMO_NORMAL}), or callback receiving all arguments in a
29 f7d9b3aa Michael Hanselmann
    tuple to calculate timeout
30 033684dd Michael Hanselmann
  - List of arguments as tuples
31 033684dd Michael Hanselmann

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

36 60154921 Iustin Pop
  - Custom body encoder (e.g. for preparing per-node bodies)
37 033684dd Michael Hanselmann
  - Return value wrapper (e.g. for deserializing into L{objects}-based objects)
38 033684dd Michael Hanselmann
  - Short call description for docstring
39 033684dd Michael Hanselmann

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

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

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

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

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

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

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

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

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

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

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