Statistics
| Branch: | Tag: | Revision:

root / lib / rpc_defs.py @ ec5af888

History | View | Annotate | Download (23.2 kB)

1 d5a2a550 Michael Hanselmann
#
2 d5a2a550 Michael Hanselmann
#
3 d5a2a550 Michael Hanselmann
4 cad0723b Iustin Pop
# Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 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 2ff587d4 Agata Murawska
  - Timeout (e.g. L{constants.RPC_TMO_NORMAL}), or callback receiving all
29 2ff587d4 Agata Murawska
    arguments in a 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 2ff587d4 Agata Murawska
from ganeti import constants
43 a09f9847 Michael Hanselmann
from ganeti import utils
44 26d502d0 Michael Hanselmann
from ganeti import objects
45 a09f9847 Michael Hanselmann
46 d5a2a550 Michael Hanselmann
47 0d1e78dd Michael Hanselmann
# Guidelines for choosing timeouts:
48 2ff587d4 Agata Murawska
# - call used during watcher: timeout of 1min, constants.RPC_TMO_URGENT
49 2ff587d4 Agata Murawska
# - trivial (but be sure it is trivial)
50 2ff587d4 Agata Murawska
#     (e.g. reading a file): 5min, constants.RPC_TMO_FAST
51 2ff587d4 Agata Murawska
# - other calls: 15 min, constants.RPC_TMO_NORMAL
52 2ff587d4 Agata Murawska
# - special calls (instance add, etc.):
53 2ff587d4 Agata Murawska
#     either constants.RPC_TMO_SLOW (1h) or huge timeouts
54 d5a2a550 Michael Hanselmann
55 d5a2a550 Michael Hanselmann
SINGLE = "single-node"
56 d5a2a550 Michael Hanselmann
MULTI = "multi-node"
57 d5a2a550 Michael Hanselmann
58 890ea4ce Michael Hanselmann
ACCEPT_OFFLINE_NODE = object()
59 890ea4ce 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 5fce6a89 Constantinos Venetsanopoulos
 ED_INST_DICT_HVP_BEP_DP,
65 cd40dc53 Michael Hanselmann
 ED_NODE_TO_DISK_DICT,
66 b8291e00 René Nussbaumer
 ED_INST_DICT_OSP_DP,
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 aedf5fd7 René Nussbaumer
 ED_BLOCKDEV_RENAME,
72 aedf5fd7 René Nussbaumer
 ED_DISKS_DICT_DP,
73 cbe4a0a5 Dimitris Aragiorgis
 ED_SINGLE_DISK_DICT_DP,
74 cbe4a0a5 Dimitris Aragiorgis
 ED_NIC_DICT) = range(1, 15)
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 2ff587d4 Agata Murawska
  ("file_storage_dir_create", SINGLE, None, constants.RPC_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 2ff587d4 Agata Murawska
  ("file_storage_dir_remove", SINGLE, None, constants.RPC_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 2ff587d4 Agata Murawska
  ("file_storage_dir_rename", SINGLE, None, constants.RPC_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 2ff587d4 Agata Murawska
  ("storage_list", MULTI, None, constants.RPC_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 2ff587d4 Agata Murawska
  ("storage_modify", SINGLE, None, constants.RPC_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 2ff587d4 Agata Murawska
  ("storage_execute", SINGLE, None, constants.RPC_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 2ff587d4 Agata Murawska
  ("instance_info", SINGLE, None, constants.RPC_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 2ff587d4 Agata Murawska
  ("all_instances_info", MULTI, None, constants.RPC_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 2ff587d4 Agata Murawska
  ("instance_list", MULTI, None, constants.RPC_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 2ff587d4 Agata Murawska
  ("instance_reboot", SINGLE, None, constants.RPC_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 2ff587d4 Agata Murawska
  ("instance_shutdown", SINGLE, None, constants.RPC_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 2ff587d4 Agata Murawska
  ("instance_balloon_memory", SINGLE, None, constants.RPC_TMO_NORMAL, [
228 ebe466d8 Guido Trotter
    ("instance", ED_INST_DICT, "Instance object"),
229 ebe466d8 Guido Trotter
    ("memory", None, None),
230 ebe466d8 Guido Trotter
    ], None, None, "Modify the amount of an instance's runtime memory"),
231 2ff587d4 Agata Murawska
  ("instance_run_rename", SINGLE, None, constants.RPC_TMO_SLOW, [
232 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, "Instance object"),
233 033684dd Michael Hanselmann
    ("old_name", None, None),
234 033684dd Michael Hanselmann
    ("debug", None, None),
235 60154921 Iustin Pop
    ], None, None, "Run the OS rename script for an instance"),
236 2ff587d4 Agata Murawska
  ("instance_migratable", SINGLE, None, constants.RPC_TMO_NORMAL, [
237 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, "Instance object"),
238 60154921 Iustin Pop
    ], None, None, "Checks whether the given instance can be migrated"),
239 2ff587d4 Agata Murawska
  ("migration_info", SINGLE, None, constants.RPC_TMO_NORMAL, [
240 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, "Instance object"),
241 60154921 Iustin Pop
    ], None, None,
242 033684dd Michael Hanselmann
    "Gather the information necessary to prepare an instance migration"),
243 2ff587d4 Agata Murawska
  ("accept_instance", SINGLE, None, constants.RPC_TMO_NORMAL, [
244 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, "Instance object"),
245 033684dd Michael Hanselmann
    ("info", None, "Result for the call_migration_info call"),
246 033684dd Michael Hanselmann
    ("target", None, "Target hostname (usually an IP address)"),
247 60154921 Iustin Pop
    ], None, None, "Prepare a node to accept an instance"),
248 2ff587d4 Agata Murawska
  ("instance_finalize_migration_dst", SINGLE, None, constants.RPC_TMO_NORMAL, [
249 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, "Instance object"),
250 033684dd Michael Hanselmann
    ("info", None, "Result for the call_migration_info call"),
251 033684dd Michael Hanselmann
    ("success", None, "Whether the migration was a success or failure"),
252 60154921 Iustin Pop
    ], None, None, "Finalize any target-node migration specific operation"),
253 2ff587d4 Agata Murawska
  ("instance_migrate", SINGLE, None, constants.RPC_TMO_SLOW, [
254 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, "Instance object"),
255 033684dd Michael Hanselmann
    ("target", None, "Target node name"),
256 033684dd Michael Hanselmann
    ("live", None, "Whether the migration should be done live or not"),
257 60154921 Iustin Pop
    ], None, None, "Migrate an instance"),
258 2ff587d4 Agata Murawska
  ("instance_finalize_migration_src", SINGLE, None, constants.RPC_TMO_SLOW, [
259 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, "Instance object"),
260 033684dd Michael Hanselmann
    ("success", None, "Whether the migration succeeded or not"),
261 033684dd Michael Hanselmann
    ("live", None, "Whether the user requested a live migration or not"),
262 60154921 Iustin Pop
    ], None, None, "Finalize the instance migration on the source node"),
263 2ff587d4 Agata Murawska
  ("instance_get_migration_status", SINGLE, None, constants.RPC_TMO_SLOW, [
264 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, "Instance object"),
265 60154921 Iustin Pop
    ], None, _MigrationStatusPostProc, "Report migration status"),
266 2ff587d4 Agata Murawska
  ("instance_start", SINGLE, None, constants.RPC_TMO_NORMAL, [
267 5fce6a89 Constantinos Venetsanopoulos
    ("instance_hvp_bep", ED_INST_DICT_HVP_BEP_DP, None),
268 c4de9b7a Michael Hanselmann
    ("startup_paused", None, None),
269 60154921 Iustin Pop
    ], None, None, "Starts an instance"),
270 2ff587d4 Agata Murawska
  ("instance_os_add", SINGLE, None, constants.RPC_TMO_1DAY, [
271 b8291e00 René Nussbaumer
    ("instance_osp", ED_INST_DICT_OSP_DP, None),
272 c4de9b7a Michael Hanselmann
    ("reinstall", None, None),
273 c4de9b7a Michael Hanselmann
    ("debug", None, None),
274 60154921 Iustin Pop
    ], None, None, "Starts an instance"),
275 033684dd Michael Hanselmann
  ]
276 033684dd Michael Hanselmann
277 033684dd Michael Hanselmann
_IMPEXP_CALLS = [
278 2ff587d4 Agata Murawska
  ("import_start", SINGLE, None, constants.RPC_TMO_NORMAL, [
279 cd40dc53 Michael Hanselmann
    ("opts", ED_OBJECT_DICT, None),
280 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, None),
281 46c293f0 Michael Hanselmann
    ("component", None, None),
282 cd40dc53 Michael Hanselmann
    ("dest", ED_IMPEXP_IO, "Import destination"),
283 60154921 Iustin Pop
    ], None, None, "Starts an import daemon"),
284 2ff587d4 Agata Murawska
  ("export_start", SINGLE, None, constants.RPC_TMO_NORMAL, [
285 cd40dc53 Michael Hanselmann
    ("opts", ED_OBJECT_DICT, None),
286 46c293f0 Michael Hanselmann
    ("host", None, None),
287 46c293f0 Michael Hanselmann
    ("port", None, None),
288 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, None),
289 46c293f0 Michael Hanselmann
    ("component", None, None),
290 cd40dc53 Michael Hanselmann
    ("source", ED_IMPEXP_IO, "Export source"),
291 60154921 Iustin Pop
    ], None, None, "Starts an export daemon"),
292 2ff587d4 Agata Murawska
  ("impexp_status", SINGLE, None, constants.RPC_TMO_FAST, [
293 033684dd Michael Hanselmann
    ("names", None, "Import/export names"),
294 60154921 Iustin Pop
    ], None, _ImpExpStatusPostProc, "Gets the status of an import or export"),
295 2ff587d4 Agata Murawska
  ("impexp_abort", SINGLE, None, constants.RPC_TMO_NORMAL, [
296 033684dd Michael Hanselmann
    ("name", None, "Import/export name"),
297 60154921 Iustin Pop
    ], None, None, "Aborts an import or export"),
298 2ff587d4 Agata Murawska
  ("impexp_cleanup", SINGLE, None, constants.RPC_TMO_NORMAL, [
299 033684dd Michael Hanselmann
    ("name", None, "Import/export name"),
300 60154921 Iustin Pop
    ], None, None, "Cleans up after an import or export"),
301 2ff587d4 Agata Murawska
  ("export_info", SINGLE, None, constants.RPC_TMO_FAST, [
302 033684dd Michael Hanselmann
    ("path", None, None),
303 60154921 Iustin Pop
    ], None, None, "Queries the export information in a given path"),
304 2ff587d4 Agata Murawska
  ("finalize_export", SINGLE, None, constants.RPC_TMO_NORMAL, [
305 cd40dc53 Michael Hanselmann
    ("instance", ED_INST_DICT, None),
306 cd40dc53 Michael Hanselmann
    ("snap_disks", ED_FINALIZE_EXPORT_DISKS, None),
307 60154921 Iustin Pop
    ], None, None, "Request the completion of an export operation"),
308 2ff587d4 Agata Murawska
  ("export_list", MULTI, None, constants.RPC_TMO_FAST, [], None, None,
309 60154921 Iustin Pop
   "Gets the stored exports list"),
310 2ff587d4 Agata Murawska
  ("export_remove", SINGLE, None, constants.RPC_TMO_FAST, [
311 033684dd Michael Hanselmann
    ("export", None, None),
312 60154921 Iustin Pop
    ], None, None, "Requests removal of a given export"),
313 033684dd Michael Hanselmann
  ]
314 033684dd Michael Hanselmann
315 033684dd Michael Hanselmann
_X509_CALLS = [
316 2ff587d4 Agata Murawska
  ("x509_cert_create", SINGLE, None, constants.RPC_TMO_NORMAL, [
317 033684dd Michael Hanselmann
    ("validity", None, "Validity in seconds"),
318 60154921 Iustin Pop
    ], None, None, "Creates a new X509 certificate for SSL/TLS"),
319 2ff587d4 Agata Murawska
  ("x509_cert_remove", SINGLE, None, constants.RPC_TMO_NORMAL, [
320 033684dd Michael Hanselmann
    ("name", None, "Certificate name"),
321 60154921 Iustin Pop
    ], None, None, "Removes a X509 certificate"),
322 033684dd Michael Hanselmann
  ]
323 033684dd Michael Hanselmann
324 033684dd Michael Hanselmann
_BLOCKDEV_CALLS = [
325 2ff587d4 Agata Murawska
  ("bdev_sizes", MULTI, None, constants.RPC_TMO_URGENT, [
326 033684dd Michael Hanselmann
    ("devices", None, None),
327 60154921 Iustin Pop
    ], None, None,
328 60154921 Iustin Pop
   "Gets the sizes of requested block devices present on a node"),
329 2ff587d4 Agata Murawska
  ("blockdev_create", SINGLE, None, constants.RPC_TMO_NORMAL, [
330 cd40dc53 Michael Hanselmann
    ("bdev", ED_OBJECT_DICT, None),
331 033684dd Michael Hanselmann
    ("size", None, None),
332 033684dd Michael Hanselmann
    ("owner", None, None),
333 033684dd Michael Hanselmann
    ("on_primary", None, None),
334 033684dd Michael Hanselmann
    ("info", None, None),
335 60154921 Iustin Pop
    ], None, None, "Request creation of a given block device"),
336 2ff587d4 Agata Murawska
  ("blockdev_wipe", SINGLE, None, constants.RPC_TMO_SLOW, [
337 c7ea9827 René Nussbaumer
    ("bdev", ED_SINGLE_DISK_DICT_DP, None),
338 033684dd Michael Hanselmann
    ("offset", None, None),
339 033684dd Michael Hanselmann
    ("size", None, None),
340 60154921 Iustin Pop
    ], None, None,
341 033684dd Michael Hanselmann
    "Request wipe at given offset with given size of a block device"),
342 2ff587d4 Agata Murawska
  ("blockdev_remove", SINGLE, None, constants.RPC_TMO_NORMAL, [
343 cd40dc53 Michael Hanselmann
    ("bdev", ED_OBJECT_DICT, None),
344 60154921 Iustin Pop
    ], None, None, "Request removal of a given block device"),
345 2ff587d4 Agata Murawska
  ("blockdev_pause_resume_sync", SINGLE, None, constants.RPC_TMO_NORMAL, [
346 c7ea9827 René Nussbaumer
    ("disks", ED_DISKS_DICT_DP, None),
347 033684dd Michael Hanselmann
    ("pause", None, None),
348 60154921 Iustin Pop
    ], None, None, "Request a pause/resume of given block device"),
349 2ff587d4 Agata Murawska
  ("blockdev_assemble", SINGLE, None, constants.RPC_TMO_NORMAL, [
350 c7ea9827 René Nussbaumer
    ("disk", ED_SINGLE_DISK_DICT_DP, None),
351 033684dd Michael Hanselmann
    ("owner", None, None),
352 033684dd Michael Hanselmann
    ("on_primary", None, None),
353 033684dd Michael Hanselmann
    ("idx", None, None),
354 60154921 Iustin Pop
    ], None, None, "Request assembling of a given block device"),
355 2ff587d4 Agata Murawska
  ("blockdev_shutdown", SINGLE, None, constants.RPC_TMO_NORMAL, [
356 55de1d68 René Nussbaumer
    ("disk", ED_SINGLE_DISK_DICT_DP, None),
357 60154921 Iustin Pop
    ], None, None, "Request shutdown of a given block device"),
358 2ff587d4 Agata Murawska
  ("blockdev_addchildren", SINGLE, None, constants.RPC_TMO_NORMAL, [
359 c7ea9827 René Nussbaumer
    ("bdev", ED_SINGLE_DISK_DICT_DP, None),
360 cd40dc53 Michael Hanselmann
    ("ndevs", ED_OBJECT_DICT_LIST, None),
361 60154921 Iustin Pop
    ], None, None,
362 60154921 Iustin Pop
   "Request adding a list of children to a (mirroring) device"),
363 2ff587d4 Agata Murawska
  ("blockdev_removechildren", SINGLE, None, constants.RPC_TMO_NORMAL, [
364 cd40dc53 Michael Hanselmann
    ("bdev", ED_OBJECT_DICT, None),
365 cd40dc53 Michael Hanselmann
    ("ndevs", ED_OBJECT_DICT_LIST, None),
366 60154921 Iustin Pop
    ], None, None,
367 60154921 Iustin Pop
   "Request removing a list of children from a (mirroring) device"),
368 2ff587d4 Agata Murawska
  ("blockdev_close", SINGLE, None, constants.RPC_TMO_NORMAL, [
369 033684dd Michael Hanselmann
    ("instance_name", None, None),
370 cd40dc53 Michael Hanselmann
    ("disks", ED_OBJECT_DICT_LIST, None),
371 60154921 Iustin Pop
    ], None, None, "Closes the given block devices"),
372 2ff587d4 Agata Murawska
  ("blockdev_getsize", SINGLE, None, constants.RPC_TMO_NORMAL, [
373 cd40dc53 Michael Hanselmann
    ("disks", ED_OBJECT_DICT_LIST, None),
374 60154921 Iustin Pop
    ], None, None, "Returns the size of the given disks"),
375 2ff587d4 Agata Murawska
  ("drbd_disconnect_net", MULTI, None, constants.RPC_TMO_NORMAL, [
376 033684dd Michael Hanselmann
    ("nodes_ip", None, None),
377 cd40dc53 Michael Hanselmann
    ("disks", ED_OBJECT_DICT_LIST, None),
378 60154921 Iustin Pop
    ], None, None, "Disconnects the network of the given drbd devices"),
379 2ff587d4 Agata Murawska
  ("drbd_attach_net", MULTI, None, constants.RPC_TMO_NORMAL, [
380 033684dd Michael Hanselmann
    ("nodes_ip", None, None),
381 c7ea9827 René Nussbaumer
    ("disks", ED_DISKS_DICT_DP, None),
382 033684dd Michael Hanselmann
    ("instance_name", None, None),
383 033684dd Michael Hanselmann
    ("multimaster", None, None),
384 60154921 Iustin Pop
    ], None, None, "Connects the given DRBD devices"),
385 2ff587d4 Agata Murawska
  ("drbd_wait_sync", MULTI, None, constants.RPC_TMO_SLOW, [
386 033684dd Michael Hanselmann
    ("nodes_ip", None, None),
387 c7ea9827 René Nussbaumer
    ("disks", ED_DISKS_DICT_DP, None),
388 60154921 Iustin Pop
    ], None, None,
389 60154921 Iustin Pop
   "Waits for the synchronization of drbd devices is complete"),
390 2ff587d4 Agata Murawska
  ("blockdev_grow", SINGLE, None, constants.RPC_TMO_NORMAL, [
391 c7ea9827 René Nussbaumer
    ("cf_bdev", ED_SINGLE_DISK_DICT_DP, None),
392 033684dd Michael Hanselmann
    ("amount", None, None),
393 033684dd Michael Hanselmann
    ("dryrun", None, None),
394 cad0723b Iustin Pop
    ("backingstore", None, None),
395 cad0723b Iustin Pop
    ], None, None, "Request growing of the given block device by a"
396 cad0723b Iustin Pop
   " given amount"),
397 2ff587d4 Agata Murawska
  ("blockdev_export", SINGLE, None, constants.RPC_TMO_1DAY, [
398 c7ea9827 René Nussbaumer
    ("cf_bdev", ED_SINGLE_DISK_DICT_DP, None),
399 033684dd Michael Hanselmann
    ("dest_node", None, None),
400 033684dd Michael Hanselmann
    ("dest_path", None, None),
401 033684dd Michael Hanselmann
    ("cluster_name", None, None),
402 60154921 Iustin Pop
    ], None, None, "Export a given disk to another node"),
403 2ff587d4 Agata Murawska
  ("blockdev_snapshot", SINGLE, None, constants.RPC_TMO_NORMAL, [
404 c7ea9827 René Nussbaumer
    ("cf_bdev", ED_SINGLE_DISK_DICT_DP, None),
405 60154921 Iustin Pop
    ], None, None, "Export a given disk to another node"),
406 2ff587d4 Agata Murawska
  ("blockdev_rename", SINGLE, None, constants.RPC_TMO_NORMAL, [
407 cd40dc53 Michael Hanselmann
    ("devlist", ED_BLOCKDEV_RENAME, None),
408 60154921 Iustin Pop
    ], None, None, "Request rename of the given block devices"),
409 2ff587d4 Agata Murawska
  ("blockdev_find", SINGLE, None, constants.RPC_TMO_NORMAL, [
410 cd40dc53 Michael Hanselmann
    ("disk", ED_OBJECT_DICT, None),
411 60154921 Iustin Pop
    ], None, _BlockdevFindPostProc,
412 033684dd Michael Hanselmann
    "Request identification of a given block device"),
413 2ff587d4 Agata Murawska
  ("blockdev_getmirrorstatus", SINGLE, None, constants.RPC_TMO_NORMAL, [
414 70817cee René Nussbaumer
    ("disks", ED_DISKS_DICT_DP, None),
415 60154921 Iustin Pop
    ], None, _BlockdevGetMirrorStatusPostProc,
416 033684dd Michael Hanselmann
    "Request status of a (mirroring) device"),
417 2ff587d4 Agata Murawska
  ("blockdev_getmirrorstatus_multi", MULTI, None, constants.RPC_TMO_NORMAL, [
418 cd40dc53 Michael Hanselmann
    ("node_disks", ED_NODE_TO_DISK_DICT, None),
419 5449685e Iustin Pop
    ], _BlockdevGetMirrorStatusMultiPreProc,
420 5449685e Iustin Pop
   _BlockdevGetMirrorStatusMultiPostProc,
421 033684dd Michael Hanselmann
    "Request status of (mirroring) devices from multiple nodes"),
422 48e175a2 Iustin Pop
  ("blockdev_setinfo", SINGLE, None, constants.RPC_TMO_NORMAL, [
423 48e175a2 Iustin Pop
    ("disk", ED_OBJECT_DICT, None),
424 48e175a2 Iustin Pop
    ("info", None, None),
425 48e175a2 Iustin Pop
    ], None, None, "Sets metadata information on a given block device"),
426 033684dd Michael Hanselmann
  ]
427 033684dd Michael Hanselmann
428 033684dd Michael Hanselmann
_OS_CALLS = [
429 2ff587d4 Agata Murawska
  ("os_diagnose", MULTI, None, constants.RPC_TMO_FAST, [], None, None,
430 033684dd Michael Hanselmann
   "Request a diagnose of OS definitions"),
431 2ff587d4 Agata Murawska
  ("os_validate", MULTI, None, constants.RPC_TMO_FAST, [
432 033684dd Michael Hanselmann
    ("required", None, None),
433 033684dd Michael Hanselmann
    ("name", None, None),
434 033684dd Michael Hanselmann
    ("checks", None, None),
435 033684dd Michael Hanselmann
    ("params", None, None),
436 60154921 Iustin Pop
    ], None, None, "Run a validation routine for a given OS"),
437 2ff587d4 Agata Murawska
  ("os_get", SINGLE, None, constants.RPC_TMO_FAST, [
438 033684dd Michael Hanselmann
    ("name", None, None),
439 60154921 Iustin Pop
    ], None, _OsGetPostProc, "Returns an OS definition"),
440 033684dd Michael Hanselmann
  ]
441 033684dd Michael Hanselmann
442 033684dd Michael Hanselmann
_NODE_CALLS = [
443 2ff587d4 Agata Murawska
  ("node_has_ip_address", SINGLE, None, constants.RPC_TMO_FAST, [
444 033684dd Michael Hanselmann
    ("address", None, "IP address"),
445 60154921 Iustin Pop
    ], None, None, "Checks if a node has the given IP address"),
446 2ff587d4 Agata Murawska
  ("node_info", MULTI, None, constants.RPC_TMO_URGENT, [
447 78519c10 Michael Hanselmann
    ("vg_names", None,
448 78519c10 Michael Hanselmann
     "Names of the volume groups to ask for disk space information"),
449 78519c10 Michael Hanselmann
    ("hv_names", None,
450 78519c10 Michael Hanselmann
     "Names of the hypervisors to ask for node information"),
451 60154921 Iustin Pop
    ], None, None, "Return node information"),
452 2ff587d4 Agata Murawska
  ("node_verify", MULTI, None, constants.RPC_TMO_NORMAL, [
453 033684dd Michael Hanselmann
    ("checkdict", None, None),
454 033684dd Michael Hanselmann
    ("cluster_name", None, None),
455 60154921 Iustin Pop
    ], None, None, "Request verification of given parameters"),
456 2ff587d4 Agata Murawska
  ("node_volumes", MULTI, None, constants.RPC_TMO_FAST, [], None, None,
457 60154921 Iustin Pop
   "Gets all volumes on node(s)"),
458 2ff587d4 Agata Murawska
  ("node_demote_from_mc", SINGLE, None, constants.RPC_TMO_FAST, [], None, None,
459 033684dd Michael Hanselmann
   "Demote a node from the master candidate role"),
460 2ff587d4 Agata Murawska
  ("node_powercycle", SINGLE, ACCEPT_OFFLINE_NODE, constants.RPC_TMO_NORMAL, [
461 033684dd Michael Hanselmann
    ("hypervisor", None, "Hypervisor type"),
462 60154921 Iustin Pop
    ], None, None, "Tries to powercycle a node"),
463 033684dd Michael Hanselmann
  ]
464 033684dd Michael Hanselmann
465 033684dd Michael Hanselmann
_MISC_CALLS = [
466 2ff587d4 Agata Murawska
  ("lv_list", MULTI, None, constants.RPC_TMO_URGENT, [
467 033684dd Michael Hanselmann
    ("vg_name", None, None),
468 60154921 Iustin Pop
    ], None, None, "Gets the logical volumes present in a given volume group"),
469 2ff587d4 Agata Murawska
  ("vg_list", MULTI, None, constants.RPC_TMO_URGENT, [], None, None,
470 dd6d2d09 Michael Hanselmann
   "Gets the volume group list"),
471 2ff587d4 Agata Murawska
  ("bridges_exist", SINGLE, None, constants.RPC_TMO_URGENT, [
472 033684dd Michael Hanselmann
    ("bridges_list", None, "Bridges which must be present on remote node"),
473 60154921 Iustin Pop
    ], None, None, "Checks if a node has all the bridges given"),
474 2ff587d4 Agata Murawska
  ("etc_hosts_modify", SINGLE, None, constants.RPC_TMO_NORMAL, [
475 033684dd Michael Hanselmann
    ("mode", None,
476 033684dd Michael Hanselmann
     "Mode to operate; currently L{constants.ETC_HOSTS_ADD} or"
477 033684dd Michael Hanselmann
     " L{constants.ETC_HOSTS_REMOVE}"),
478 033684dd Michael Hanselmann
    ("name", None, "Hostname to be modified"),
479 033684dd Michael Hanselmann
    ("ip", None, "IP address (L{constants.ETC_HOSTS_ADD} only)"),
480 60154921 Iustin Pop
    ], None, None, "Modify hosts file with name"),
481 2ff587d4 Agata Murawska
  ("drbd_helper", MULTI, None, constants.RPC_TMO_URGENT, [],
482 2ff587d4 Agata Murawska
   None, None, "Gets DRBD helper"),
483 db2203e0 Michael Hanselmann
  ("restricted_command", MULTI, None, constants.RPC_TMO_SLOW, [
484 db2203e0 Michael Hanselmann
    ("cmd", None, "Command name"),
485 db2203e0 Michael Hanselmann
    ], None, None, "Runs restricted command"),
486 2ff587d4 Agata Murawska
  ("run_oob", SINGLE, None, constants.RPC_TMO_NORMAL, [
487 033684dd Michael Hanselmann
    ("oob_program", None, None),
488 033684dd Michael Hanselmann
    ("command", None, None),
489 033684dd Michael Hanselmann
    ("remote_node", None, None),
490 033684dd Michael Hanselmann
    ("timeout", None, None),
491 60154921 Iustin Pop
    ], None, None, "Runs out-of-band command"),
492 2ff587d4 Agata Murawska
  ("hooks_runner", MULTI, None, constants.RPC_TMO_NORMAL, [
493 033684dd Michael Hanselmann
    ("hpath", None, None),
494 033684dd Michael Hanselmann
    ("phase", None, None),
495 033684dd Michael Hanselmann
    ("env", None, None),
496 60154921 Iustin Pop
    ], None, None, "Call the hooks runner"),
497 2ff587d4 Agata Murawska
  ("iallocator_runner", SINGLE, None, constants.RPC_TMO_NORMAL, [
498 033684dd Michael Hanselmann
    ("name", None, "Iallocator name"),
499 033684dd Michael Hanselmann
    ("idata", None, "JSON-encoded input string"),
500 60154921 Iustin Pop
    ], None, None, "Call an iallocator on a remote node"),
501 dd6d2d09 Michael Hanselmann
  ("test_delay", MULTI, None, _TestDelayTimeout, [
502 033684dd Michael Hanselmann
    ("duration", None, None),
503 60154921 Iustin Pop
    ], None, None, "Sleep for a fixed time on given node(s)"),
504 2ff587d4 Agata Murawska
  ("hypervisor_validate_params", MULTI, None, constants.RPC_TMO_NORMAL, [
505 68959ca5 Michael Hanselmann
    ("hvname", None, "Hypervisor name"),
506 68959ca5 Michael Hanselmann
    ("hvfull", None, "Parameters to be validated"),
507 60154921 Iustin Pop
    ], None, None, "Validate hypervisor params"),
508 ec5af888 Michael Hanselmann
  ("get_watcher_pause", SINGLE, None, constants.RPC_TMO_URGENT, [],
509 ec5af888 Michael Hanselmann
    None, None, "Get watcher pause end"),
510 99e222b1 Michael Hanselmann
  ("set_watcher_pause", MULTI, None, constants.RPC_TMO_URGENT, [
511 99e222b1 Michael Hanselmann
    ("until", None, None),
512 99e222b1 Michael Hanselmann
    ], None, None, "Set watcher pause end"),
513 033684dd Michael Hanselmann
  ]
514 033684dd Michael Hanselmann
515 d5a2a550 Michael Hanselmann
CALLS = {
516 5ae4945a Iustin Pop
  "RpcClientDefault":
517 a09f9847 Michael Hanselmann
    _Prepare(_IMPEXP_CALLS + _X509_CALLS + _OS_CALLS + _NODE_CALLS +
518 a09f9847 Michael Hanselmann
             _FILE_STORAGE_CALLS + _MISC_CALLS + _INSTANCE_CALLS +
519 a09f9847 Michael Hanselmann
             _BLOCKDEV_CALLS + _STORAGE_CALLS),
520 a09f9847 Michael Hanselmann
  "RpcClientJobQueue": _Prepare([
521 2ff587d4 Agata Murawska
    ("jobqueue_update", MULTI, None, constants.RPC_TMO_URGENT, [
522 fb1ffbca Michael Hanselmann
      ("file_name", None, None),
523 cd40dc53 Michael Hanselmann
      ("content", ED_COMPRESS, None),
524 60154921 Iustin Pop
      ], None, None, "Update job queue file"),
525 2ff587d4 Agata Murawska
    ("jobqueue_purge", SINGLE, None, constants.RPC_TMO_NORMAL, [], None, None,
526 dd6d2d09 Michael Hanselmann
     "Purge job queue"),
527 2ff587d4 Agata Murawska
    ("jobqueue_rename", MULTI, None, constants.RPC_TMO_URGENT, [
528 fb1ffbca Michael Hanselmann
      ("rename", None, None),
529 60154921 Iustin Pop
      ], None, None, "Rename job queue file"),
530 be6c403e Michael Hanselmann
    ("jobqueue_set_drain_flag", MULTI, None, constants.RPC_TMO_URGENT, [
531 be6c403e Michael Hanselmann
      ("flag", None, None),
532 be6c403e Michael Hanselmann
      ], None, None, "Set job queue drain flag"),
533 a09f9847 Michael Hanselmann
    ]),
534 a09f9847 Michael Hanselmann
  "RpcClientBootstrap": _Prepare([
535 2ff587d4 Agata Murawska
    ("node_start_master_daemons", SINGLE, None, constants.RPC_TMO_FAST, [
536 db04ce5d Michael Hanselmann
      ("no_voting", None, None),
537 60154921 Iustin Pop
      ], None, None, "Starts master daemons on a node"),
538 2ff587d4 Agata Murawska
    ("node_activate_master_ip", SINGLE, None, constants.RPC_TMO_FAST, [
539 c79198a0 Andrea Spadaccini
      ("master_params", ED_OBJECT_DICT, "Network parameters of the master"),
540 57c7bc57 Andrea Spadaccini
      ("use_external_mip_script", None,
541 57c7bc57 Andrea Spadaccini
       "Whether to use the user-provided master IP address setup script"),
542 60154921 Iustin Pop
      ], None, None,
543 8da2bd43 Andrea Spadaccini
      "Activates master IP on a node"),
544 2ff587d4 Agata Murawska
    ("node_stop_master", SINGLE, None, constants.RPC_TMO_FAST, [], None, None,
545 db04ce5d Michael Hanselmann
     "Deactivates master IP and stops master daemons on a node"),
546 2ff587d4 Agata Murawska
    ("node_deactivate_master_ip", SINGLE, None, constants.RPC_TMO_FAST, [
547 c79198a0 Andrea Spadaccini
      ("master_params", ED_OBJECT_DICT, "Network parameters of the master"),
548 57c7bc57 Andrea Spadaccini
      ("use_external_mip_script", None,
549 57c7bc57 Andrea Spadaccini
       "Whether to use the user-provided master IP address setup script"),
550 60154921 Iustin Pop
      ], None, None,
551 db04ce5d Michael Hanselmann
     "Deactivates master IP on a node"),
552 2ff587d4 Agata Murawska
    ("node_change_master_netmask", SINGLE, None, constants.RPC_TMO_FAST, [
553 41e079ce Andrea Spadaccini
      ("old_netmask", None, "The old value of the netmask"),
554 41e079ce Andrea Spadaccini
      ("netmask", None, "The new value of the netmask"),
555 41e079ce Andrea Spadaccini
      ("master_ip", None, "The master IP"),
556 41e079ce Andrea Spadaccini
      ("master_netdev", None, "The master network device"),
557 60154921 Iustin Pop
      ], None, None, "Change master IP netmask"),
558 2ff587d4 Agata Murawska
    ("node_leave_cluster", SINGLE, None, constants.RPC_TMO_NORMAL, [
559 db04ce5d Michael Hanselmann
      ("modify_ssh_setup", None, None),
560 60154921 Iustin Pop
      ], None, None,
561 60154921 Iustin Pop
     "Requests a node to clean the cluster information it has"),
562 2ff587d4 Agata Murawska
    ("master_info", MULTI, None, constants.RPC_TMO_URGENT, [], None, None,
563 dd6d2d09 Michael Hanselmann
     "Query master info"),
564 bd6d1202 René Nussbaumer
    ]),
565 bd6d1202 René Nussbaumer
  "RpcClientDnsOnly": _Prepare([
566 2ff587d4 Agata Murawska
    ("version", MULTI, ACCEPT_OFFLINE_NODE, constants.RPC_TMO_URGENT, [], None,
567 2ff587d4 Agata Murawska
     None, "Query node version"),
568 a09f9847 Michael Hanselmann
    ]),
569 a09f9847 Michael Hanselmann
  "RpcClientConfig": _Prepare([
570 2ff587d4 Agata Murawska
    ("upload_file", MULTI, None, constants.RPC_TMO_NORMAL, [
571 cd40dc53 Michael Hanselmann
      ("file_name", ED_FILE_DETAILS, None),
572 60154921 Iustin Pop
      ], None, None, "Upload a file"),
573 2ff587d4 Agata Murawska
    ("write_ssconf_files", MULTI, None, constants.RPC_TMO_NORMAL, [
574 415a7304 Michael Hanselmann
      ("values", None, None),
575 60154921 Iustin Pop
      ], None, None, "Write ssconf files"),
576 a09f9847 Michael Hanselmann
    ]),
577 d5a2a550 Michael Hanselmann
  }