Revision 34af39e8 src/Ganeti/OpCodes.hs
b/src/Ganeti/OpCodes.hs | ||
---|---|---|
1 |
{-# LANGUAGE TemplateHaskell #-} |
|
1 |
{-# LANGUAGE ExistentialQuantification, TemplateHaskell #-} |
|
2 |
{-# OPTIONS_GHC -fno-warn-orphans #-} |
|
2 | 3 |
|
3 | 4 |
{-| Implementation of the opcodes. |
4 | 5 |
|
... | ... | |
26 | 27 |
-} |
27 | 28 |
|
28 | 29 |
module Ganeti.OpCodes |
29 |
( OpCode(..) |
|
30 |
( pyClasses |
|
31 |
, OpCode(..) |
|
30 | 32 |
, TagObject(..) |
31 | 33 |
, tagObjectFrom |
32 | 34 |
, encodeTagObject |
... | ... | |
47 | 49 |
, setOpPriority |
48 | 50 |
) where |
49 | 51 |
|
50 |
import Data.Maybe (fromMaybe) |
|
51 |
import Text.JSON (readJSON, JSON, JSValue, makeObj) |
|
52 |
import Text.JSON (readJSON, JSObject, JSON, JSValue(..), makeObj, fromJSObject) |
|
52 | 53 |
import qualified Text.JSON |
53 | 54 |
|
54 | 55 |
import Ganeti.THH |
55 | 56 |
|
57 |
import qualified Ganeti.Hs2Py.OpDoc as OpDoc |
|
56 | 58 |
import Ganeti.OpParams |
57 |
import Ganeti.Types (OpSubmitPriority(..), fromNonEmpty)
|
|
59 |
import Ganeti.Types |
|
58 | 60 |
import Ganeti.Query.Language (queryTypeOpToRaw) |
59 | 61 |
|
62 |
import Data.List (intercalate) |
|
63 |
import Data.Map (Map) |
|
64 |
import qualified Data.Map as Map |
|
65 |
import Data.Set (Set) |
|
66 |
import qualified Data.Set as Set |
|
67 |
|
|
68 |
import qualified Ganeti.Constants as C |
|
69 |
|
|
70 |
instance PyValue Bool |
|
71 |
instance PyValue Int |
|
72 |
instance PyValue Double |
|
73 |
instance PyValue Char |
|
74 |
|
|
75 |
instance (PyValue a, PyValue b) => PyValue (a, b) where |
|
76 |
showValue (x, y) = show (showValue x, showValue y) |
|
77 |
|
|
78 |
instance PyValue a => PyValue [a] where |
|
79 |
showValue xs = show (map showValue xs) |
|
80 |
|
|
81 |
instance PyValue a => PyValue (Set a) where |
|
82 |
showValue s = showValue (Set.toList s) |
|
83 |
|
|
84 |
instance (PyValue k, PyValue a) => PyValue (Map k a) where |
|
85 |
showValue mp = |
|
86 |
"{" ++ intercalate ", " (map showPair (Map.assocs mp)) ++ "}" |
|
87 |
where showPair (k, x) = show k ++ ":" ++ show x |
|
88 |
|
|
89 |
instance PyValue DiskIndex where |
|
90 |
showValue = showValue . unDiskIndex |
|
91 |
|
|
92 |
instance PyValue IDiskParams where |
|
93 |
showValue _ = error "OpCodes.showValue(IDiskParams): unhandled case" |
|
94 |
|
|
95 |
instance PyValue RecreateDisksInfo where |
|
96 |
showValue RecreateDisksAll = "[]" |
|
97 |
showValue (RecreateDisksIndices is) = showValue is |
|
98 |
showValue (RecreateDisksParams is) = showValue is |
|
99 |
|
|
100 |
instance PyValue a => PyValue (SetParamsMods a) where |
|
101 |
showValue SetParamsEmpty = "[]" |
|
102 |
showValue _ = error "OpCodes.showValue(SetParamsMods): unhandled case" |
|
103 |
|
|
104 |
instance PyValue a => PyValue (NonNegative a) where |
|
105 |
showValue = showValue . fromNonNegative |
|
106 |
|
|
107 |
instance PyValue a => PyValue (NonEmpty a) where |
|
108 |
showValue = showValue . fromNonEmpty |
|
109 |
|
|
110 |
-- FIXME: should use the 'toRaw' function instead of being harcoded or |
|
111 |
-- perhaps use something similar to the NonNegative type instead of |
|
112 |
-- using the declareSADT |
|
113 |
instance PyValue ExportMode where |
|
114 |
showValue ExportModeLocal = show C.exportModeLocal |
|
115 |
showValue ExportModeRemove = show C.exportModeLocal |
|
116 |
|
|
117 |
instance PyValue CVErrorCode where |
|
118 |
showValue = cVErrorCodeToRaw |
|
119 |
|
|
120 |
instance PyValue VerifyOptionalChecks where |
|
121 |
showValue = verifyOptionalChecksToRaw |
|
122 |
|
|
123 |
instance PyValue INicParams where |
|
124 |
showValue = error "instance PyValue INicParams: not implemented" |
|
125 |
|
|
126 |
instance PyValue a => PyValue (JSObject a) where |
|
127 |
showValue obj = |
|
128 |
"{" ++ intercalate ", " (map showPair (fromJSObject obj)) ++ "}" |
|
129 |
where showPair (k, v) = show k ++ ":" ++ showValue v |
|
130 |
|
|
131 |
instance PyValue JSValue where |
|
132 |
showValue (JSObject obj) = showValue obj |
|
133 |
showValue x = show x |
|
134 |
|
|
135 |
type JobIdListOnly = [(Bool, Either String JobId)] |
|
136 |
|
|
137 |
type InstanceMultiAllocResponse = |
|
138 |
([(Bool, Either String JobId)], NonEmptyString) |
|
139 |
|
|
140 |
type QueryFieldDef = |
|
141 |
(NonEmptyString, NonEmptyString, TagKind, NonEmptyString) |
|
142 |
|
|
143 |
type QueryResponse = |
|
144 |
([QueryFieldDef], [[(QueryResultCode, JSValue)]]) |
|
145 |
|
|
146 |
type QueryFieldsResponse = [QueryFieldDef] |
|
147 |
|
|
60 | 148 |
-- | OpCode representation. |
61 | 149 |
-- |
62 | 150 |
-- We only implement a subset of Ganeti opcodes: those which are actually used |
63 | 151 |
-- in the htools codebase. |
64 | 152 |
$(genOpCode "OpCode" |
65 |
[ ("OpTestDelay", |
|
66 |
[ pDelayDuration |
|
67 |
, pDelayOnMaster |
|
68 |
, pDelayOnNodes |
|
69 |
, pDelayOnNodeUuids |
|
70 |
, pDelayRepeat |
|
71 |
]) |
|
72 |
, ("OpInstanceReplaceDisks", |
|
73 |
[ pInstanceName |
|
74 |
, pInstanceUuid |
|
75 |
, pEarlyRelease |
|
76 |
, pIgnoreIpolicy |
|
77 |
, pReplaceDisksMode |
|
78 |
, pReplaceDisksList |
|
79 |
, pRemoteNode |
|
80 |
, pRemoteNodeUuid |
|
81 |
, pIallocator |
|
82 |
]) |
|
83 |
, ("OpInstanceFailover", |
|
84 |
[ pInstanceName |
|
85 |
, pInstanceUuid |
|
86 |
, pShutdownTimeout |
|
87 |
, pIgnoreConsistency |
|
88 |
, pMigrationTargetNode |
|
89 |
, pMigrationTargetNodeUuid |
|
90 |
, pIgnoreIpolicy |
|
91 |
, pIallocator |
|
92 |
]) |
|
93 |
, ("OpInstanceMigrate", |
|
94 |
[ pInstanceName |
|
95 |
, pInstanceUuid |
|
96 |
, pMigrationMode |
|
97 |
, pMigrationLive |
|
98 |
, pMigrationTargetNode |
|
99 |
, pMigrationTargetNodeUuid |
|
100 |
, pAllowRuntimeChgs |
|
101 |
, pIgnoreIpolicy |
|
102 |
, pMigrationCleanup |
|
103 |
, pIallocator |
|
104 |
, pAllowFailover |
|
105 |
]) |
|
106 |
, ("OpTagsGet", |
|
107 |
[ pTagsObject |
|
108 |
, pUseLocking |
|
109 |
]) |
|
110 |
, ("OpTagsSearch", |
|
111 |
[ pTagSearchPattern ]) |
|
112 |
, ("OpTagsSet", |
|
113 |
[ pTagsObject |
|
114 |
, pTagsList |
|
115 |
]) |
|
116 |
, ("OpTagsDel", |
|
117 |
[ pTagsObject |
|
118 |
, pTagsList |
|
119 |
]) |
|
120 |
, ("OpClusterPostInit", []) |
|
121 |
, ("OpClusterDestroy", []) |
|
122 |
, ("OpClusterQuery", []) |
|
153 |
[ ("OpClusterPostInit", |
|
154 |
[t| Bool |], |
|
155 |
OpDoc.opClusterPostInit, |
|
156 |
[], |
|
157 |
[]) |
|
158 |
, ("OpClusterDestroy", |
|
159 |
[t| NonEmptyString |], |
|
160 |
OpDoc.opClusterDestroy, |
|
161 |
[], |
|
162 |
[]) |
|
163 |
, ("OpClusterQuery", |
|
164 |
[t| JSObject JSValue |], |
|
165 |
OpDoc.opClusterQuery, |
|
166 |
[], |
|
167 |
[]) |
|
123 | 168 |
, ("OpClusterVerify", |
169 |
[t| JobIdListOnly |], |
|
170 |
OpDoc.opClusterVerify, |
|
124 | 171 |
[ pDebugSimulateErrors |
125 | 172 |
, pErrorCodes |
126 | 173 |
, pSkipChecks |
127 | 174 |
, pIgnoreErrors |
128 | 175 |
, pVerbose |
129 | 176 |
, pOptGroupName |
130 |
]) |
|
177 |
], |
|
178 |
[]) |
|
131 | 179 |
, ("OpClusterVerifyConfig", |
180 |
[t| Bool |], |
|
181 |
OpDoc.opClusterVerifyConfig, |
|
132 | 182 |
[ pDebugSimulateErrors |
133 | 183 |
, pErrorCodes |
134 | 184 |
, pIgnoreErrors |
135 | 185 |
, pVerbose |
136 |
]) |
|
186 |
], |
|
187 |
[]) |
|
137 | 188 |
, ("OpClusterVerifyGroup", |
189 |
[t| Bool |], |
|
190 |
OpDoc.opClusterVerifyGroup, |
|
138 | 191 |
[ pGroupName |
139 | 192 |
, pDebugSimulateErrors |
140 | 193 |
, pErrorCodes |
141 | 194 |
, pSkipChecks |
142 | 195 |
, pIgnoreErrors |
143 | 196 |
, pVerbose |
144 |
]) |
|
145 |
, ("OpClusterVerifyDisks", []) |
|
197 |
], |
|
198 |
"group_name") |
|
199 |
, ("OpClusterVerifyDisks", |
|
200 |
[t| JobIdListOnly |], |
|
201 |
OpDoc.opClusterVerifyDisks, |
|
202 |
[], |
|
203 |
[]) |
|
146 | 204 |
, ("OpGroupVerifyDisks", |
205 |
[t| (Map String String, [String], Map String [[String]]) |], |
|
206 |
OpDoc.opGroupVerifyDisks, |
|
147 | 207 |
[ pGroupName |
148 |
]) |
|
208 |
], |
|
209 |
"group_name") |
|
149 | 210 |
, ("OpClusterRepairDiskSizes", |
211 |
[t| [(NonEmptyString, NonNegative Int, NonEmptyString, NonNegative Int)]|], |
|
212 |
OpDoc.opClusterRepairDiskSizes, |
|
150 | 213 |
[ pInstances |
151 |
]) |
|
214 |
], |
|
215 |
[]) |
|
152 | 216 |
, ("OpClusterConfigQuery", |
217 |
[t| [JSValue] |], |
|
218 |
OpDoc.opClusterConfigQuery, |
|
153 | 219 |
[ pOutputFields |
154 |
]) |
|
220 |
], |
|
221 |
[]) |
|
155 | 222 |
, ("OpClusterRename", |
223 |
[t| NonEmptyString |], |
|
224 |
OpDoc.opClusterRename, |
|
156 | 225 |
[ pName |
157 |
]) |
|
226 |
], |
|
227 |
"name") |
|
158 | 228 |
, ("OpClusterSetParams", |
229 |
[t| () |], |
|
230 |
OpDoc.opClusterSetParams, |
|
159 | 231 |
[ pForce |
160 | 232 |
, pHvState |
161 | 233 |
, pDiskState |
... | ... | |
173 | 245 |
, pMaintainNodeHealth |
174 | 246 |
, pPreallocWipeDisks |
175 | 247 |
, pNicParams |
176 |
, pNdParams |
|
177 |
, pIpolicy |
|
248 |
, withDoc "Cluster-wide node parameter defaults" pNdParams
|
|
249 |
, withDoc "Cluster-wide ipolicy specs" pIpolicy
|
|
178 | 250 |
, pDrbdHelper |
179 | 251 |
, pDefaultIAllocator |
180 | 252 |
, pMasterNetdev |
... | ... | |
186 | 258 |
, pEnabledDiskTemplates |
187 | 259 |
, pModifyEtcHosts |
188 | 260 |
, pGlobalFileStorageDir |
189 |
]) |
|
190 |
, ("OpClusterRedistConf", []) |
|
191 |
, ("OpClusterActivateMasterIp", []) |
|
192 |
, ("OpClusterDeactivateMasterIp", []) |
|
261 |
], |
|
262 |
[]) |
|
263 |
, ("OpClusterRedistConf", |
|
264 |
[t| () |], |
|
265 |
OpDoc.opClusterRedistConf, |
|
266 |
[], |
|
267 |
[]) |
|
268 |
, ("OpClusterActivateMasterIp", |
|
269 |
[t| () |], |
|
270 |
OpDoc.opClusterActivateMasterIp, |
|
271 |
[], |
|
272 |
[]) |
|
273 |
, ("OpClusterDeactivateMasterIp", |
|
274 |
[t| () |], |
|
275 |
OpDoc.opClusterDeactivateMasterIp, |
|
276 |
[], |
|
277 |
[]) |
|
193 | 278 |
, ("OpQuery", |
279 |
[t| QueryResponse |], |
|
280 |
OpDoc.opQuery, |
|
194 | 281 |
[ pQueryWhat |
195 | 282 |
, pUseLocking |
196 | 283 |
, pQueryFields |
197 | 284 |
, pQueryFilter |
198 |
]) |
|
285 |
], |
|
286 |
"what") |
|
199 | 287 |
, ("OpQueryFields", |
288 |
[t| QueryFieldsResponse |], |
|
289 |
OpDoc.opQueryFields, |
|
200 | 290 |
[ pQueryWhat |
201 |
, pQueryFields |
|
202 |
]) |
|
291 |
, pQueryFieldsFields |
|
292 |
], |
|
293 |
"what") |
|
203 | 294 |
, ("OpOobCommand", |
295 |
[t| [[(QueryResultCode, JSValue)]] |], |
|
296 |
OpDoc.opOobCommand, |
|
204 | 297 |
[ pNodeNames |
205 |
, pNodeUuids |
|
298 |
, withDoc "List of node UUIDs to run the OOB command against" pNodeUuids
|
|
206 | 299 |
, pOobCommand |
207 | 300 |
, pOobTimeout |
208 | 301 |
, pIgnoreStatus |
209 | 302 |
, pPowerDelay |
210 |
]) |
|
303 |
], |
|
304 |
[]) |
|
305 |
, ("OpRestrictedCommand", |
|
306 |
[t| [(Bool, String)] |], |
|
307 |
OpDoc.opRestrictedCommand, |
|
308 |
[ pUseLocking |
|
309 |
, withDoc |
|
310 |
"Nodes on which the command should be run (at least one)" |
|
311 |
pRequiredNodes |
|
312 |
, withDoc |
|
313 |
"Node UUIDs on which the command should be run (at least one)" |
|
314 |
pRequiredNodeUuids |
|
315 |
, pRestrictedCommand |
|
316 |
], |
|
317 |
[]) |
|
211 | 318 |
, ("OpNodeRemove", |
319 |
[t| () |], |
|
320 |
OpDoc.opNodeRemove, |
|
212 | 321 |
[ pNodeName |
213 | 322 |
, pNodeUuid |
214 |
]) |
|
323 |
], |
|
324 |
"node_name") |
|
215 | 325 |
, ("OpNodeAdd", |
326 |
[t| () |], |
|
327 |
OpDoc.opNodeAdd, |
|
216 | 328 |
[ pNodeName |
217 | 329 |
, pHvState |
218 | 330 |
, pDiskState |
... | ... | |
223 | 335 |
, pMasterCapable |
224 | 336 |
, pVmCapable |
225 | 337 |
, pNdParams |
226 |
]) |
|
227 |
, ("OpNodeQuery", dOldQuery) |
|
338 |
], |
|
339 |
"node_name") |
|
340 |
, ("OpNodeQuery", |
|
341 |
[t| [[JSValue]] |], |
|
342 |
OpDoc.opNodeQuery, |
|
343 |
[ pOutputFields |
|
344 |
, withDoc "Empty list to query all nodes, node names otherwise" pNames |
|
345 |
, pUseLocking |
|
346 |
], |
|
347 |
[]) |
|
228 | 348 |
, ("OpNodeQueryvols", |
349 |
[t| [JSValue] |], |
|
350 |
OpDoc.opNodeQueryvols, |
|
229 | 351 |
[ pOutputFields |
230 |
, pNodes |
|
231 |
]) |
|
352 |
, withDoc "Empty list to query all nodes, node names otherwise" pNodes |
|
353 |
], |
|
354 |
[]) |
|
232 | 355 |
, ("OpNodeQueryStorage", |
356 |
[t| [[JSValue]] |], |
|
357 |
OpDoc.opNodeQueryStorage, |
|
233 | 358 |
[ pOutputFields |
234 | 359 |
, pStorageType |
235 |
, pNodes |
|
360 |
, withDoc |
|
361 |
"Empty list to query all, list of names to query otherwise" |
|
362 |
pNodes |
|
236 | 363 |
, pStorageName |
237 |
]) |
|
364 |
], |
|
365 |
[]) |
|
238 | 366 |
, ("OpNodeModifyStorage", |
367 |
[t| () |], |
|
368 |
OpDoc.opNodeModifyStorage, |
|
239 | 369 |
[ pNodeName |
240 | 370 |
, pNodeUuid |
241 | 371 |
, pStorageType |
242 | 372 |
, pStorageName |
243 | 373 |
, pStorageChanges |
244 |
]) |
|
374 |
], |
|
375 |
"node_name") |
|
245 | 376 |
, ("OpRepairNodeStorage", |
377 |
[t| () |], |
|
378 |
OpDoc.opRepairNodeStorage, |
|
246 | 379 |
[ pNodeName |
247 | 380 |
, pNodeUuid |
248 | 381 |
, pStorageType |
249 | 382 |
, pStorageName |
250 | 383 |
, pIgnoreConsistency |
251 |
]) |
|
384 |
], |
|
385 |
"node_name") |
|
252 | 386 |
, ("OpNodeSetParams", |
387 |
[t| [(NonEmptyString, JSValue)] |], |
|
388 |
OpDoc.opNodeSetParams, |
|
253 | 389 |
[ pNodeName |
254 | 390 |
, pNodeUuid |
255 | 391 |
, pForce |
256 | 392 |
, pHvState |
257 | 393 |
, pDiskState |
258 | 394 |
, pMasterCandidate |
259 |
, pOffline |
|
395 |
, withDoc "Whether to mark the node offline" pOffline
|
|
260 | 396 |
, pDrained |
261 | 397 |
, pAutoPromote |
262 | 398 |
, pMasterCapable |
... | ... | |
264 | 400 |
, pSecondaryIp |
265 | 401 |
, pNdParams |
266 | 402 |
, pPowered |
267 |
]) |
|
403 |
], |
|
404 |
"node_name") |
|
268 | 405 |
, ("OpNodePowercycle", |
406 |
[t| Maybe NonEmptyString |], |
|
407 |
OpDoc.opNodePowercycle, |
|
269 | 408 |
[ pNodeName |
270 | 409 |
, pNodeUuid |
271 | 410 |
, pForce |
272 |
]) |
|
411 |
], |
|
412 |
"node_name") |
|
273 | 413 |
, ("OpNodeMigrate", |
414 |
[t| JobIdListOnly |], |
|
415 |
OpDoc.opNodeMigrate, |
|
274 | 416 |
[ pNodeName |
275 | 417 |
, pNodeUuid |
276 | 418 |
, pMigrationMode |
... | ... | |
280 | 422 |
, pAllowRuntimeChgs |
281 | 423 |
, pIgnoreIpolicy |
282 | 424 |
, pIallocator |
283 |
]) |
|
425 |
], |
|
426 |
"node_name") |
|
284 | 427 |
, ("OpNodeEvacuate", |
428 |
[t| JobIdListOnly |], |
|
429 |
OpDoc.opNodeEvacuate, |
|
285 | 430 |
[ pEarlyRelease |
286 | 431 |
, pNodeName |
287 | 432 |
, pNodeUuid |
... | ... | |
289 | 434 |
, pRemoteNodeUuid |
290 | 435 |
, pIallocator |
291 | 436 |
, pEvacMode |
292 |
]) |
|
437 |
], |
|
438 |
"node_name") |
|
293 | 439 |
, ("OpInstanceCreate", |
440 |
[t| [NonEmptyString] |], |
|
441 |
OpDoc.opInstanceCreate, |
|
294 | 442 |
[ pInstanceName |
295 | 443 |
, pForceVariant |
296 | 444 |
, pWaitForSync |
297 | 445 |
, pNameCheck |
298 | 446 |
, pIgnoreIpolicy |
447 |
, pOpportunisticLocking |
|
299 | 448 |
, pInstBeParams |
300 | 449 |
, pInstDisks |
301 | 450 |
, pDiskTemplate |
... | ... | |
324 | 473 |
, pSrcNodeUuid |
325 | 474 |
, pSrcPath |
326 | 475 |
, pStartInstance |
327 |
, pOpportunisticLocking |
|
328 | 476 |
, pInstTags |
329 |
]) |
|
477 |
], |
|
478 |
"instance_name") |
|
330 | 479 |
, ("OpInstanceMultiAlloc", |
331 |
[ pIallocator |
|
480 |
[t| InstanceMultiAllocResponse |], |
|
481 |
OpDoc.opInstanceMultiAlloc, |
|
482 |
[ pOpportunisticLocking |
|
483 |
, pIallocator |
|
332 | 484 |
, pMultiAllocInstances |
333 |
, pOpportunisticLocking
|
|
334 |
]) |
|
485 |
],
|
|
486 |
[])
|
|
335 | 487 |
, ("OpInstanceReinstall", |
488 |
[t| () |], |
|
489 |
OpDoc.opInstanceReinstall, |
|
336 | 490 |
[ pInstanceName |
337 | 491 |
, pInstanceUuid |
338 | 492 |
, pForceVariant |
339 | 493 |
, pInstOs |
340 | 494 |
, pTempOsParams |
341 |
]) |
|
495 |
], |
|
496 |
"instance_name") |
|
342 | 497 |
, ("OpInstanceRemove", |
498 |
[t| () |], |
|
499 |
OpDoc.opInstanceRemove, |
|
343 | 500 |
[ pInstanceName |
344 | 501 |
, pInstanceUuid |
345 | 502 |
, pShutdownTimeout |
346 | 503 |
, pIgnoreFailures |
347 |
]) |
|
504 |
], |
|
505 |
"instance_name") |
|
348 | 506 |
, ("OpInstanceRename", |
507 |
[t| NonEmptyString |], |
|
508 |
OpDoc.opInstanceRename, |
|
349 | 509 |
[ pInstanceName |
350 | 510 |
, pInstanceUuid |
351 |
, pNewName |
|
511 |
, withDoc "New instance name" pNewName
|
|
352 | 512 |
, pNameCheck |
353 | 513 |
, pIpCheck |
354 |
]) |
|
514 |
], |
|
515 |
[]) |
|
355 | 516 |
, ("OpInstanceStartup", |
517 |
[t| () |], |
|
518 |
OpDoc.opInstanceStartup, |
|
356 | 519 |
[ pInstanceName |
357 | 520 |
, pInstanceUuid |
358 | 521 |
, pForce |
... | ... | |
361 | 524 |
, pTempBeParams |
362 | 525 |
, pNoRemember |
363 | 526 |
, pStartupPaused |
364 |
]) |
|
527 |
], |
|
528 |
"instance_name") |
|
365 | 529 |
, ("OpInstanceShutdown", |
530 |
[t| () |], |
|
531 |
OpDoc.opInstanceShutdown, |
|
366 | 532 |
[ pInstanceName |
367 | 533 |
, pInstanceUuid |
368 | 534 |
, pForce |
369 | 535 |
, pIgnoreOfflineNodes |
370 |
, pShutdownTimeout'
|
|
536 |
, pShutdownTimeout |
|
371 | 537 |
, pNoRemember |
372 |
]) |
|
538 |
], |
|
539 |
"instance_name") |
|
373 | 540 |
, ("OpInstanceReboot", |
541 |
[t| () |], |
|
542 |
OpDoc.opInstanceReboot, |
|
374 | 543 |
[ pInstanceName |
375 | 544 |
, pInstanceUuid |
376 | 545 |
, pShutdownTimeout |
377 | 546 |
, pIgnoreSecondaries |
378 | 547 |
, pRebootType |
379 |
]) |
|
548 |
], |
|
549 |
"instance_name") |
|
550 |
, ("OpInstanceReplaceDisks", |
|
551 |
[t| () |], |
|
552 |
OpDoc.opInstanceReplaceDisks, |
|
553 |
[ pInstanceName |
|
554 |
, pInstanceUuid |
|
555 |
, pEarlyRelease |
|
556 |
, pIgnoreIpolicy |
|
557 |
, pReplaceDisksMode |
|
558 |
, pReplaceDisksList |
|
559 |
, pRemoteNode |
|
560 |
, pRemoteNodeUuid |
|
561 |
, pIallocator |
|
562 |
], |
|
563 |
"instance_name") |
|
564 |
, ("OpInstanceFailover", |
|
565 |
[t| () |], |
|
566 |
OpDoc.opInstanceFailover, |
|
567 |
[ pInstanceName |
|
568 |
, pInstanceUuid |
|
569 |
, pShutdownTimeout |
|
570 |
, pIgnoreConsistency |
|
571 |
, pMigrationTargetNode |
|
572 |
, pMigrationTargetNodeUuid |
|
573 |
, pIgnoreIpolicy |
|
574 |
, pIallocator |
|
575 |
], |
|
576 |
"instance_name") |
|
577 |
, ("OpInstanceMigrate", |
|
578 |
[t| () |], |
|
579 |
OpDoc.opInstanceMigrate, |
|
580 |
[ pInstanceName |
|
581 |
, pInstanceUuid |
|
582 |
, pMigrationMode |
|
583 |
, pMigrationLive |
|
584 |
, pMigrationTargetNode |
|
585 |
, pMigrationTargetNodeUuid |
|
586 |
, pAllowRuntimeChgs |
|
587 |
, pIgnoreIpolicy |
|
588 |
, pMigrationCleanup |
|
589 |
, pIallocator |
|
590 |
, pAllowFailover |
|
591 |
], |
|
592 |
"instance_name") |
|
380 | 593 |
, ("OpInstanceMove", |
594 |
[t| () |], |
|
595 |
OpDoc.opInstanceMove, |
|
381 | 596 |
[ pInstanceName |
382 | 597 |
, pInstanceUuid |
383 | 598 |
, pShutdownTimeout |
... | ... | |
385 | 600 |
, pMoveTargetNode |
386 | 601 |
, pMoveTargetNodeUuid |
387 | 602 |
, pIgnoreConsistency |
388 |
]) |
|
603 |
], |
|
604 |
"instance_name") |
|
389 | 605 |
, ("OpInstanceConsole", |
606 |
[t| JSObject JSValue |], |
|
607 |
OpDoc.opInstanceConsole, |
|
390 | 608 |
[ pInstanceName |
391 | 609 |
, pInstanceUuid |
392 |
]) |
|
610 |
], |
|
611 |
"instance_name") |
|
393 | 612 |
, ("OpInstanceActivateDisks", |
613 |
[t| [(NonEmptyString, NonEmptyString, NonEmptyString)] |], |
|
614 |
OpDoc.opInstanceActivateDisks, |
|
394 | 615 |
[ pInstanceName |
395 | 616 |
, pInstanceUuid |
396 | 617 |
, pIgnoreDiskSize |
397 | 618 |
, pWaitForSyncFalse |
398 |
]) |
|
619 |
], |
|
620 |
"instance_name") |
|
399 | 621 |
, ("OpInstanceDeactivateDisks", |
622 |
[t| () |], |
|
623 |
OpDoc.opInstanceDeactivateDisks, |
|
400 | 624 |
[ pInstanceName |
401 | 625 |
, pInstanceUuid |
402 | 626 |
, pForce |
403 |
]) |
|
627 |
], |
|
628 |
"instance_name") |
|
404 | 629 |
, ("OpInstanceRecreateDisks", |
630 |
[t| () |], |
|
631 |
OpDoc.opInstanceRecreateDisks, |
|
405 | 632 |
[ pInstanceName |
406 | 633 |
, pInstanceUuid |
407 | 634 |
, pRecreateDisksInfo |
408 |
, pNodes |
|
409 |
, pNodeUuids |
|
635 |
, withDoc "New instance nodes, if relocation is desired" pNodes
|
|
636 |
, withDoc "New instance node UUIDs, if relocation is desired" pNodeUuids
|
|
410 | 637 |
, pIallocator |
411 |
]) |
|
412 |
, ("OpInstanceQuery", dOldQuery) |
|
638 |
], |
|
639 |
"instance_name") |
|
640 |
, ("OpInstanceQuery", |
|
641 |
[t| [[JSValue]] |], |
|
642 |
OpDoc.opInstanceQuery, |
|
643 |
[ pOutputFields |
|
644 |
, pUseLocking |
|
645 |
, withDoc |
|
646 |
"Empty list to query all instances, instance names otherwise" |
|
647 |
pNames |
|
648 |
], |
|
649 |
[]) |
|
413 | 650 |
, ("OpInstanceQueryData", |
651 |
[t| JSObject (JSObject JSValue) |], |
|
652 |
OpDoc.opInstanceQueryData, |
|
414 | 653 |
[ pUseLocking |
415 | 654 |
, pInstances |
416 | 655 |
, pStatic |
417 |
]) |
|
656 |
], |
|
657 |
[]) |
|
418 | 658 |
, ("OpInstanceSetParams", |
659 |
[t| [(NonEmptyString, JSValue)] |], |
|
660 |
OpDoc.opInstanceSetParams, |
|
419 | 661 |
[ pInstanceName |
420 | 662 |
, pInstanceUuid |
421 | 663 |
, pForce |
... | ... | |
429 | 671 |
, pOptDiskTemplate |
430 | 672 |
, pPrimaryNode |
431 | 673 |
, pPrimaryNodeUuid |
432 |
, pRemoteNode |
|
433 |
, pRemoteNodeUuid |
|
674 |
, withDoc "Secondary node (used when changing disk template)" pRemoteNode |
|
675 |
, withDoc |
|
676 |
"Secondary node UUID (used when changing disk template)" |
|
677 |
pRemoteNodeUuid |
|
434 | 678 |
, pOsNameChange |
435 | 679 |
, pInstOsParams |
436 | 680 |
, pWaitForSync |
437 |
, pOffline |
|
681 |
, withDoc "Whether to mark the instance as offline" pOffline
|
|
438 | 682 |
, pIpConflictsCheck |
439 |
]) |
|
683 |
], |
|
684 |
"instance_name") |
|
440 | 685 |
, ("OpInstanceGrowDisk", |
686 |
[t| () |], |
|
687 |
OpDoc.opInstanceGrowDisk, |
|
441 | 688 |
[ pInstanceName |
442 | 689 |
, pInstanceUuid |
443 | 690 |
, pWaitForSync |
444 | 691 |
, pDiskIndex |
445 | 692 |
, pDiskChgAmount |
446 | 693 |
, pDiskChgAbsolute |
447 |
]) |
|
694 |
], |
|
695 |
"instance_name") |
|
448 | 696 |
, ("OpInstanceChangeGroup", |
697 |
[t| JobIdListOnly |], |
|
698 |
OpDoc.opInstanceChangeGroup, |
|
449 | 699 |
[ pInstanceName |
450 | 700 |
, pInstanceUuid |
451 | 701 |
, pEarlyRelease |
452 | 702 |
, pIallocator |
453 | 703 |
, pTargetGroups |
454 |
]) |
|
704 |
], |
|
705 |
"instance_name") |
|
455 | 706 |
, ("OpGroupAdd", |
707 |
[t| () |], |
|
708 |
OpDoc.opGroupAdd, |
|
456 | 709 |
[ pGroupName |
457 | 710 |
, pNodeGroupAllocPolicy |
458 | 711 |
, pGroupNodeParams |
459 | 712 |
, pDiskParams |
460 | 713 |
, pHvState |
461 | 714 |
, pDiskState |
462 |
, pIpolicy |
|
463 |
]) |
|
715 |
, withDoc "Group-wide ipolicy specs" pIpolicy |
|
716 |
], |
|
717 |
"group_name") |
|
464 | 718 |
, ("OpGroupAssignNodes", |
719 |
[t| () |], |
|
720 |
OpDoc.opGroupAssignNodes, |
|
465 | 721 |
[ pGroupName |
466 | 722 |
, pForce |
467 |
, pRequiredNodes |
|
468 |
, pRequiredNodeUuids |
|
469 |
]) |
|
470 |
, ("OpGroupQuery", dOldQueryNoLocking) |
|
723 |
, withDoc "List of nodes to assign" pRequiredNodes |
|
724 |
, withDoc "List of node UUIDs to assign" pRequiredNodeUuids |
|
725 |
], |
|
726 |
"group_name") |
|
727 |
, ("OpGroupQuery", |
|
728 |
[t| [[JSValue]] |], |
|
729 |
OpDoc.opGroupQuery, |
|
730 |
[ pOutputFields |
|
731 |
, withDoc "Empty list to query all groups, group names otherwise" pNames |
|
732 |
], |
|
733 |
[]) |
|
471 | 734 |
, ("OpGroupSetParams", |
735 |
[t| [(NonEmptyString, JSValue)] |], |
|
736 |
OpDoc.opGroupSetParams, |
|
472 | 737 |
[ pGroupName |
473 | 738 |
, pNodeGroupAllocPolicy |
474 | 739 |
, pGroupNodeParams |
475 | 740 |
, pDiskParams |
476 | 741 |
, pHvState |
477 | 742 |
, pDiskState |
478 |
, pIpolicy |
|
479 |
]) |
|
743 |
, withDoc "Group-wide ipolicy specs" pIpolicy |
|
744 |
], |
|
745 |
"group_name") |
|
480 | 746 |
, ("OpGroupRemove", |
481 |
[ pGroupName ]) |
|
747 |
[t| () |], |
|
748 |
OpDoc.opGroupRemove, |
|
749 |
[ pGroupName |
|
750 |
], |
|
751 |
"group_name") |
|
482 | 752 |
, ("OpGroupRename", |
753 |
[t| NonEmptyString |], |
|
754 |
OpDoc.opGroupRename, |
|
483 | 755 |
[ pGroupName |
484 |
, pNewName |
|
485 |
]) |
|
756 |
, withDoc "New group name" pNewName |
|
757 |
], |
|
758 |
[]) |
|
486 | 759 |
, ("OpGroupEvacuate", |
760 |
[t| JobIdListOnly |], |
|
761 |
OpDoc.opGroupEvacuate, |
|
487 | 762 |
[ pGroupName |
488 | 763 |
, pEarlyRelease |
489 | 764 |
, pIallocator |
490 | 765 |
, pTargetGroups |
491 |
]) |
|
766 |
], |
|
767 |
"group_name") |
|
492 | 768 |
, ("OpOsDiagnose", |
769 |
[t| [[JSValue]] |], |
|
770 |
OpDoc.opOsDiagnose, |
|
493 | 771 |
[ pOutputFields |
494 |
, pNames ]) |
|
772 |
, withDoc "Which operating systems to diagnose" pNames |
|
773 |
], |
|
774 |
[]) |
|
495 | 775 |
, ("OpExtStorageDiagnose", |
776 |
[t| [[JSValue]] |], |
|
777 |
OpDoc.opExtStorageDiagnose, |
|
496 | 778 |
[ pOutputFields |
497 |
, pNames ]) |
|
779 |
, withDoc "Which ExtStorage Provider to diagnose" pNames |
|
780 |
], |
|
781 |
[]) |
|
498 | 782 |
, ("OpBackupQuery", |
783 |
[t| JSObject (Either Bool [NonEmptyString]) |], |
|
784 |
OpDoc.opBackupQuery, |
|
499 | 785 |
[ pUseLocking |
500 |
, pNodes |
|
501 |
]) |
|
786 |
, withDoc "Empty list to query all nodes, node names otherwise" pNodes |
|
787 |
], |
|
788 |
[]) |
|
502 | 789 |
, ("OpBackupPrepare", |
790 |
[t| Maybe (JSObject JSValue) |], |
|
791 |
OpDoc.opBackupPrepare, |
|
503 | 792 |
[ pInstanceName |
504 | 793 |
, pInstanceUuid |
505 | 794 |
, pExportMode |
506 |
]) |
|
795 |
], |
|
796 |
"instance_name") |
|
507 | 797 |
, ("OpBackupExport", |
798 |
[t| (Bool, [Bool]) |], |
|
799 |
OpDoc.opBackupExport, |
|
508 | 800 |
[ pInstanceName |
509 | 801 |
, pInstanceUuid |
510 | 802 |
, pShutdownTimeout |
... | ... | |
513 | 805 |
, pShutdownInstance |
514 | 806 |
, pRemoveInstance |
515 | 807 |
, pIgnoreRemoveFailures |
516 |
, pExportMode |
|
808 |
, defaultField [| ExportModeLocal |] pExportMode
|
|
517 | 809 |
, pX509KeyName |
518 | 810 |
, pX509DestCA |
519 |
]) |
|
811 |
], |
|
812 |
"instance_name") |
|
520 | 813 |
, ("OpBackupRemove", |
814 |
[t| () |], |
|
815 |
OpDoc.opBackupRemove, |
|
521 | 816 |
[ pInstanceName |
522 | 817 |
, pInstanceUuid |
523 |
]) |
|
818 |
], |
|
819 |
"instance_name") |
|
820 |
, ("OpTagsGet", |
|
821 |
[t| [NonEmptyString] |], |
|
822 |
OpDoc.opTagsGet, |
|
823 |
[ pTagsObject |
|
824 |
, pUseLocking |
|
825 |
, withDoc "Name of object to retrieve tags from" pTagsName |
|
826 |
], |
|
827 |
"name") |
|
828 |
, ("OpTagsSearch", |
|
829 |
[t| [(NonEmptyString, NonEmptyString)] |], |
|
830 |
OpDoc.opTagsSearch, |
|
831 |
[ pTagSearchPattern |
|
832 |
], |
|
833 |
"pattern") |
|
834 |
, ("OpTagsSet", |
|
835 |
[t| () |], |
|
836 |
OpDoc.opTagsSet, |
|
837 |
[ pTagsObject |
|
838 |
, pTagsList |
|
839 |
, withDoc "Name of object where tag(s) should be added" pTagsName |
|
840 |
], |
|
841 |
[]) |
|
842 |
, ("OpTagsDel", |
|
843 |
[t| () |], |
|
844 |
OpDoc.opTagsDel, |
|
845 |
[ pTagsObject |
|
846 |
, pTagsList |
|
847 |
, withDoc "Name of object where tag(s) should be deleted" pTagsName |
|
848 |
], |
|
849 |
[]) |
|
850 |
, ("OpTestDelay", |
|
851 |
[t| () |], |
|
852 |
OpDoc.opTestDelay, |
|
853 |
[ pDelayDuration |
|
854 |
, pDelayOnMaster |
|
855 |
, pDelayOnNodes |
|
856 |
, pDelayOnNodeUuids |
|
857 |
, pDelayRepeat |
|
858 |
], |
|
859 |
"duration") |
|
524 | 860 |
, ("OpTestAllocator", |
861 |
[t| () |], |
|
862 |
OpDoc.opTestAllocator, |
|
525 | 863 |
[ pIAllocatorDirection |
526 | 864 |
, pIAllocatorMode |
527 | 865 |
, pIAllocatorReqName |
... | ... | |
539 | 877 |
, pTargetGroups |
540 | 878 |
, pIAllocatorSpindleUse |
541 | 879 |
, pIAllocatorCount |
542 |
]) |
|
880 |
], |
|
881 |
"iallocator") |
|
543 | 882 |
, ("OpTestJqueue", |
883 |
[t| () |], |
|
884 |
OpDoc.opTestJqueue, |
|
544 | 885 |
[ pJQueueNotifyWaitLock |
545 | 886 |
, pJQueueNotifyExec |
546 | 887 |
, pJQueueLogMessages |
547 | 888 |
, pJQueueFail |
548 |
]) |
|
889 |
], |
|
890 |
[]) |
|
549 | 891 |
, ("OpTestDummy", |
892 |
[t| () |], |
|
893 |
OpDoc.opTestDummy, |
|
550 | 894 |
[ pTestDummyResult |
551 | 895 |
, pTestDummyMessages |
552 | 896 |
, pTestDummyFail |
553 | 897 |
, pTestDummySubmitJobs |
554 |
]) |
|
898 |
], |
|
899 |
[]) |
|
555 | 900 |
, ("OpNetworkAdd", |
901 |
[t| () |], |
|
902 |
OpDoc.opNetworkAdd, |
|
556 | 903 |
[ pNetworkName |
557 | 904 |
, pNetworkAddress4 |
558 | 905 |
, pNetworkGateway4 |
... | ... | |
561 | 908 |
, pNetworkMacPrefix |
562 | 909 |
, pNetworkAddRsvdIps |
563 | 910 |
, pIpConflictsCheck |
564 |
, pInstTags |
|
565 |
]) |
|
911 |
, withDoc "Network tags" pInstTags |
|
912 |
], |
|
913 |
"network_name") |
|
566 | 914 |
, ("OpNetworkRemove", |
915 |
[t| () |], |
|
916 |
OpDoc.opNetworkRemove, |
|
567 | 917 |
[ pNetworkName |
568 | 918 |
, pForce |
569 |
]) |
|
919 |
], |
|
920 |
"network_name") |
|
570 | 921 |
, ("OpNetworkSetParams", |
922 |
[t| () |], |
|
923 |
OpDoc.opNetworkSetParams, |
|
571 | 924 |
[ pNetworkName |
572 | 925 |
, pNetworkGateway4 |
573 | 926 |
, pNetworkAddress6 |
574 | 927 |
, pNetworkGateway6 |
575 | 928 |
, pNetworkMacPrefix |
576 |
, pNetworkAddRsvdIps |
|
929 |
, withDoc "Which external IP addresses to reserve" pNetworkAddRsvdIps
|
|
577 | 930 |
, pNetworkRemoveRsvdIps |
578 |
]) |
|
931 |
], |
|
932 |
"network_name") |
|
579 | 933 |
, ("OpNetworkConnect", |
934 |
[t| () |], |
|
935 |
OpDoc.opNetworkConnect, |
|
580 | 936 |
[ pGroupName |
581 | 937 |
, pNetworkName |
582 | 938 |
, pNetworkMode |
583 | 939 |
, pNetworkLink |
584 | 940 |
, pIpConflictsCheck |
585 |
]) |
|
941 |
], |
|
942 |
"network_name") |
|
586 | 943 |
, ("OpNetworkDisconnect", |
944 |
[t| () |], |
|
945 |
OpDoc.opNetworkDisconnect, |
|
587 | 946 |
[ pGroupName |
588 | 947 |
, pNetworkName |
589 |
]) |
|
590 |
, ("OpNetworkQuery", dOldQuery) |
|
591 |
, ("OpRestrictedCommand", |
|
592 |
[ pUseLocking |
|
593 |
, pRequiredNodes |
|
594 |
, pRequiredNodeUuids |
|
595 |
, pRestrictedCommand |
|
596 |
]) |
|
948 |
], |
|
949 |
"network_name") |
|
950 |
, ("OpNetworkQuery", |
|
951 |
[t| [[JSValue]] |], |
|
952 |
OpDoc.opNetworkQuery, |
|
953 |
[ pOutputFields |
|
954 |
, pUseLocking |
|
955 |
, withDoc "Empty list to query all groups, group names otherwise" pNames |
|
956 |
], |
|
957 |
[]) |
|
597 | 958 |
]) |
598 | 959 |
|
599 | 960 |
-- | Returns the OP_ID for a given opcode value. |
... | ... | |
648 | 1009 |
opSummaryVal OpBackupPrepare { opInstanceName = s } = Just s |
649 | 1010 |
opSummaryVal OpBackupExport { opInstanceName = s } = Just s |
650 | 1011 |
opSummaryVal OpBackupRemove { opInstanceName = s } = Just s |
651 |
opSummaryVal OpTagsGet { opKind = k } = |
|
652 |
Just . fromMaybe "None" $ tagNameOf k |
|
1012 |
opSummaryVal OpTagsGet { opKind = s } = Just (show s) |
|
653 | 1013 |
opSummaryVal OpTagsSearch { opTagSearchPattern = s } = Just (fromNonEmpty s) |
654 | 1014 |
opSummaryVal OpTestDelay { opDelayDuration = d } = Just (show d) |
655 | 1015 |
opSummaryVal OpTestAllocator { opIallocator = s } = |
Also available in: Unified diff