Statistics
| Branch: | Tag: | Revision:

root / src / Ganeti / OpCodes.hs @ 557f5dad

History | View | Annotate | Download (26.7 kB)

1 34af39e8 Jose A. Lopes
{-# LANGUAGE ExistentialQuantification, TemplateHaskell #-}
2 34af39e8 Jose A. Lopes
{-# OPTIONS_GHC -fno-warn-orphans #-}
3 e9aaa3c6 Iustin Pop
4 702a4ee0 Iustin Pop
{-| Implementation of the opcodes.
5 702a4ee0 Iustin Pop
6 702a4ee0 Iustin Pop
-}
7 702a4ee0 Iustin Pop
8 702a4ee0 Iustin Pop
{-
9 702a4ee0 Iustin Pop
10 551b44e2 Iustin Pop
Copyright (C) 2009, 2010, 2011, 2012, 2013 Google Inc.
11 702a4ee0 Iustin Pop
12 702a4ee0 Iustin Pop
This program is free software; you can redistribute it and/or modify
13 702a4ee0 Iustin Pop
it under the terms of the GNU General Public License as published by
14 702a4ee0 Iustin Pop
the Free Software Foundation; either version 2 of the License, or
15 702a4ee0 Iustin Pop
(at your option) any later version.
16 702a4ee0 Iustin Pop
17 702a4ee0 Iustin Pop
This program is distributed in the hope that it will be useful, but
18 702a4ee0 Iustin Pop
WITHOUT ANY WARRANTY; without even the implied warranty of
19 702a4ee0 Iustin Pop
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20 702a4ee0 Iustin Pop
General Public License for more details.
21 702a4ee0 Iustin Pop
22 702a4ee0 Iustin Pop
You should have received a copy of the GNU General Public License
23 702a4ee0 Iustin Pop
along with this program; if not, write to the Free Software
24 702a4ee0 Iustin Pop
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
25 702a4ee0 Iustin Pop
02110-1301, USA.
26 702a4ee0 Iustin Pop
27 702a4ee0 Iustin Pop
-}
28 702a4ee0 Iustin Pop
29 702a4ee0 Iustin Pop
module Ganeti.OpCodes
30 34af39e8 Jose A. Lopes
  ( pyClasses
31 34af39e8 Jose A. Lopes
  , OpCode(..)
32 ebf38064 Iustin Pop
  , ReplaceDisksMode(..)
33 4a1dc2bf Iustin Pop
  , DiskIndex
34 4a1dc2bf Iustin Pop
  , mkDiskIndex
35 4a1dc2bf Iustin Pop
  , unDiskIndex
36 ebf38064 Iustin Pop
  , opID
37 a583ec5d Iustin Pop
  , allOpIDs
38 3929e782 Iustin Pop
  , allOpFields
39 ad1c1e41 Iustin Pop
  , opSummary
40 4a826364 Iustin Pop
  , CommonOpParams(..)
41 4a826364 Iustin Pop
  , defOpParams
42 4a826364 Iustin Pop
  , MetaOpCode(..)
43 62933497 Klaus Aehlig
  , resolveDependencies
44 4a826364 Iustin Pop
  , wrapOpCode
45 4a826364 Iustin Pop
  , setOpComment
46 551b44e2 Iustin Pop
  , setOpPriority
47 ebf38064 Iustin Pop
  ) where
48 702a4ee0 Iustin Pop
49 34af39e8 Jose A. Lopes
import Text.JSON (readJSON, JSObject, JSON, JSValue(..), makeObj, fromJSObject)
50 4a826364 Iustin Pop
import qualified Text.JSON
51 702a4ee0 Iustin Pop
52 12c19659 Iustin Pop
import Ganeti.THH
53 e9aaa3c6 Iustin Pop
54 34af39e8 Jose A. Lopes
import qualified Ganeti.Hs2Py.OpDoc as OpDoc
55 92f51573 Iustin Pop
import Ganeti.OpParams
56 c4d68e39 Jose A. Lopes
import Ganeti.PyValueInstances ()
57 34af39e8 Jose A. Lopes
import Ganeti.Types
58 ad1c1e41 Iustin Pop
import Ganeti.Query.Language (queryTypeOpToRaw)
59 4a1dc2bf Iustin Pop
60 34af39e8 Jose A. Lopes
import Data.List (intercalate)
61 34af39e8 Jose A. Lopes
import Data.Map (Map)
62 34af39e8 Jose A. Lopes
63 34af39e8 Jose A. Lopes
import qualified Ganeti.Constants as C
64 34af39e8 Jose A. Lopes
65 34af39e8 Jose A. Lopes
instance PyValue DiskIndex where
66 34af39e8 Jose A. Lopes
  showValue = showValue . unDiskIndex
67 34af39e8 Jose A. Lopes
68 34af39e8 Jose A. Lopes
instance PyValue IDiskParams where
69 34af39e8 Jose A. Lopes
  showValue _ = error "OpCodes.showValue(IDiskParams): unhandled case"
70 34af39e8 Jose A. Lopes
71 34af39e8 Jose A. Lopes
instance PyValue RecreateDisksInfo where
72 34af39e8 Jose A. Lopes
  showValue RecreateDisksAll = "[]"
73 34af39e8 Jose A. Lopes
  showValue (RecreateDisksIndices is) = showValue is
74 34af39e8 Jose A. Lopes
  showValue (RecreateDisksParams is) = showValue is
75 34af39e8 Jose A. Lopes
76 34af39e8 Jose A. Lopes
instance PyValue a => PyValue (SetParamsMods a) where
77 34af39e8 Jose A. Lopes
  showValue SetParamsEmpty = "[]"
78 34af39e8 Jose A. Lopes
  showValue _ = error "OpCodes.showValue(SetParamsMods): unhandled case"
79 34af39e8 Jose A. Lopes
80 34af39e8 Jose A. Lopes
instance PyValue a => PyValue (NonNegative a) where
81 34af39e8 Jose A. Lopes
  showValue = showValue . fromNonNegative
82 f048c574 Thomas Thrainer
83 34af39e8 Jose A. Lopes
instance PyValue a => PyValue (NonEmpty a) where
84 34af39e8 Jose A. Lopes
  showValue = showValue . fromNonEmpty
85 f048c574 Thomas Thrainer
86 34af39e8 Jose A. Lopes
-- FIXME: should use the 'toRaw' function instead of being harcoded or
87 34af39e8 Jose A. Lopes
-- perhaps use something similar to the NonNegative type instead of
88 34af39e8 Jose A. Lopes
-- using the declareSADT
89 34af39e8 Jose A. Lopes
instance PyValue ExportMode where
90 34af39e8 Jose A. Lopes
  showValue ExportModeLocal = show C.exportModeLocal
91 661c765b Jose A. Lopes
  showValue ExportModeRemote = show C.exportModeLocal
92 34af39e8 Jose A. Lopes
93 34af39e8 Jose A. Lopes
instance PyValue CVErrorCode where
94 34af39e8 Jose A. Lopes
  showValue = cVErrorCodeToRaw
95 94d8fc5a Jose A. Lopes
96 34af39e8 Jose A. Lopes
instance PyValue VerifyOptionalChecks where
97 34af39e8 Jose A. Lopes
  showValue = verifyOptionalChecksToRaw
98 34af39e8 Jose A. Lopes
99 34af39e8 Jose A. Lopes
instance PyValue INicParams where
100 34af39e8 Jose A. Lopes
  showValue = error "instance PyValue INicParams: not implemented"
101 34af39e8 Jose A. Lopes
102 34af39e8 Jose A. Lopes
instance PyValue a => PyValue (JSObject a) where
103 34af39e8 Jose A. Lopes
  showValue obj =
104 34af39e8 Jose A. Lopes
    "{" ++ intercalate ", " (map showPair (fromJSObject obj)) ++ "}"
105 34af39e8 Jose A. Lopes
    where showPair (k, v) = show k ++ ":" ++ showValue v
106 34af39e8 Jose A. Lopes
107 34af39e8 Jose A. Lopes
instance PyValue JSValue where
108 34af39e8 Jose A. Lopes
  showValue (JSObject obj) = showValue obj
109 34af39e8 Jose A. Lopes
  showValue x = show x
110 34af39e8 Jose A. Lopes
111 34af39e8 Jose A. Lopes
type JobIdListOnly = [(Bool, Either String JobId)]
112 34af39e8 Jose A. Lopes
113 34af39e8 Jose A. Lopes
type InstanceMultiAllocResponse =
114 34af39e8 Jose A. Lopes
  ([(Bool, Either String JobId)], NonEmptyString)
115 34af39e8 Jose A. Lopes
116 34af39e8 Jose A. Lopes
type QueryFieldDef =
117 34af39e8 Jose A. Lopes
  (NonEmptyString, NonEmptyString, TagKind, NonEmptyString)
118 34af39e8 Jose A. Lopes
119 34af39e8 Jose A. Lopes
type QueryResponse =
120 34af39e8 Jose A. Lopes
  ([QueryFieldDef], [[(QueryResultCode, JSValue)]])
121 34af39e8 Jose A. Lopes
122 34af39e8 Jose A. Lopes
type QueryFieldsResponse = [QueryFieldDef]
123 34af39e8 Jose A. Lopes
124 525bfb36 Iustin Pop
-- | OpCode representation.
125 525bfb36 Iustin Pop
--
126 3bebda52 Dato Simรณ
-- We only implement a subset of Ganeti opcodes: those which are actually used
127 3bebda52 Dato Simรณ
-- in the htools codebase.
128 12c19659 Iustin Pop
$(genOpCode "OpCode"
129 34af39e8 Jose A. Lopes
  [ ("OpClusterPostInit",
130 34af39e8 Jose A. Lopes
     [t| Bool |],
131 34af39e8 Jose A. Lopes
     OpDoc.opClusterPostInit,
132 34af39e8 Jose A. Lopes
     [],
133 34af39e8 Jose A. Lopes
     [])
134 34af39e8 Jose A. Lopes
  , ("OpClusterDestroy",
135 34af39e8 Jose A. Lopes
     [t| NonEmptyString |],
136 34af39e8 Jose A. Lopes
     OpDoc.opClusterDestroy,
137 34af39e8 Jose A. Lopes
     [],
138 34af39e8 Jose A. Lopes
     [])
139 34af39e8 Jose A. Lopes
  , ("OpClusterQuery",
140 34af39e8 Jose A. Lopes
     [t| JSObject JSValue |],
141 34af39e8 Jose A. Lopes
     OpDoc.opClusterQuery,
142 34af39e8 Jose A. Lopes
     [],
143 34af39e8 Jose A. Lopes
     [])
144 c66f09f5 Iustin Pop
  , ("OpClusterVerify",
145 34af39e8 Jose A. Lopes
     [t| JobIdListOnly |],
146 34af39e8 Jose A. Lopes
     OpDoc.opClusterVerify,
147 c66f09f5 Iustin Pop
     [ pDebugSimulateErrors
148 c66f09f5 Iustin Pop
     , pErrorCodes
149 c66f09f5 Iustin Pop
     , pSkipChecks
150 c66f09f5 Iustin Pop
     , pIgnoreErrors
151 c66f09f5 Iustin Pop
     , pVerbose
152 c66f09f5 Iustin Pop
     , pOptGroupName
153 34af39e8 Jose A. Lopes
     ],
154 34af39e8 Jose A. Lopes
     [])
155 c66f09f5 Iustin Pop
  , ("OpClusterVerifyConfig",
156 34af39e8 Jose A. Lopes
     [t| Bool |],
157 34af39e8 Jose A. Lopes
     OpDoc.opClusterVerifyConfig,
158 c66f09f5 Iustin Pop
     [ pDebugSimulateErrors
159 c66f09f5 Iustin Pop
     , pErrorCodes
160 c66f09f5 Iustin Pop
     , pIgnoreErrors
161 c66f09f5 Iustin Pop
     , pVerbose
162 34af39e8 Jose A. Lopes
     ],
163 34af39e8 Jose A. Lopes
     [])
164 c66f09f5 Iustin Pop
  , ("OpClusterVerifyGroup",
165 34af39e8 Jose A. Lopes
     [t| Bool |],
166 34af39e8 Jose A. Lopes
     OpDoc.opClusterVerifyGroup,
167 c66f09f5 Iustin Pop
     [ pGroupName
168 c66f09f5 Iustin Pop
     , pDebugSimulateErrors
169 c66f09f5 Iustin Pop
     , pErrorCodes
170 c66f09f5 Iustin Pop
     , pSkipChecks
171 c66f09f5 Iustin Pop
     , pIgnoreErrors
172 c66f09f5 Iustin Pop
     , pVerbose
173 34af39e8 Jose A. Lopes
     ],
174 34af39e8 Jose A. Lopes
     "group_name")
175 34af39e8 Jose A. Lopes
  , ("OpClusterVerifyDisks",
176 34af39e8 Jose A. Lopes
     [t| JobIdListOnly |],
177 34af39e8 Jose A. Lopes
     OpDoc.opClusterVerifyDisks,
178 34af39e8 Jose A. Lopes
     [],
179 34af39e8 Jose A. Lopes
     [])
180 c66f09f5 Iustin Pop
  , ("OpGroupVerifyDisks",
181 34af39e8 Jose A. Lopes
     [t| (Map String String, [String], Map String [[String]]) |],
182 34af39e8 Jose A. Lopes
     OpDoc.opGroupVerifyDisks,
183 c66f09f5 Iustin Pop
     [ pGroupName
184 34af39e8 Jose A. Lopes
     ],
185 34af39e8 Jose A. Lopes
     "group_name")
186 c66f09f5 Iustin Pop
  , ("OpClusterRepairDiskSizes",
187 34af39e8 Jose A. Lopes
     [t| [(NonEmptyString, NonNegative Int, NonEmptyString, NonNegative Int)]|],
188 34af39e8 Jose A. Lopes
     OpDoc.opClusterRepairDiskSizes,
189 c66f09f5 Iustin Pop
     [ pInstances
190 34af39e8 Jose A. Lopes
     ],
191 34af39e8 Jose A. Lopes
     [])
192 c66f09f5 Iustin Pop
  , ("OpClusterConfigQuery",
193 34af39e8 Jose A. Lopes
     [t| [JSValue] |],
194 34af39e8 Jose A. Lopes
     OpDoc.opClusterConfigQuery,
195 c66f09f5 Iustin Pop
     [ pOutputFields
196 34af39e8 Jose A. Lopes
     ],
197 34af39e8 Jose A. Lopes
     [])
198 c66f09f5 Iustin Pop
  , ("OpClusterRename",
199 34af39e8 Jose A. Lopes
      [t| NonEmptyString |],
200 34af39e8 Jose A. Lopes
      OpDoc.opClusterRename,
201 c66f09f5 Iustin Pop
     [ pName
202 34af39e8 Jose A. Lopes
     ],
203 34af39e8 Jose A. Lopes
     "name")
204 c66f09f5 Iustin Pop
  , ("OpClusterSetParams",
205 34af39e8 Jose A. Lopes
     [t| () |],
206 34af39e8 Jose A. Lopes
     OpDoc.opClusterSetParams,
207 e5c92cfb Klaus Aehlig
     [ pForce
208 e5c92cfb Klaus Aehlig
     , pHvState
209 c66f09f5 Iustin Pop
     , pDiskState
210 c66f09f5 Iustin Pop
     , pVgName
211 c66f09f5 Iustin Pop
     , pEnabledHypervisors
212 c66f09f5 Iustin Pop
     , pClusterHvParams
213 c66f09f5 Iustin Pop
     , pClusterBeParams
214 c66f09f5 Iustin Pop
     , pOsHvp
215 6d558717 Iustin Pop
     , pClusterOsParams
216 c66f09f5 Iustin Pop
     , pDiskParams
217 c66f09f5 Iustin Pop
     , pCandidatePoolSize
218 c66f09f5 Iustin Pop
     , pUidPool
219 c66f09f5 Iustin Pop
     , pAddUids
220 c66f09f5 Iustin Pop
     , pRemoveUids
221 c66f09f5 Iustin Pop
     , pMaintainNodeHealth
222 c66f09f5 Iustin Pop
     , pPreallocWipeDisks
223 c66f09f5 Iustin Pop
     , pNicParams
224 34af39e8 Jose A. Lopes
     , withDoc "Cluster-wide node parameter defaults" pNdParams
225 34af39e8 Jose A. Lopes
     , withDoc "Cluster-wide ipolicy specs" pIpolicy
226 c66f09f5 Iustin Pop
     , pDrbdHelper
227 c66f09f5 Iustin Pop
     , pDefaultIAllocator
228 0359e5d0 Spyros Trigazis
     , pDefaultIAllocatorParams
229 c66f09f5 Iustin Pop
     , pMasterNetdev
230 67fc4de7 Iustin Pop
     , pMasterNetmask
231 c66f09f5 Iustin Pop
     , pReservedLvs
232 c66f09f5 Iustin Pop
     , pHiddenOs
233 c66f09f5 Iustin Pop
     , pBlacklistedOs
234 c66f09f5 Iustin Pop
     , pUseExternalMipScript
235 66af5ec5 Helga Velroyen
     , pEnabledDiskTemplates
236 75f2ff7d Michele Tartara
     , pModifyEtcHosts
237 5ce621ab Helga Velroyen
     , pClusterFileStorageDir
238 5ce621ab Helga Velroyen
     , pClusterSharedFileStorageDir
239 34af39e8 Jose A. Lopes
     ],
240 34af39e8 Jose A. Lopes
     [])
241 34af39e8 Jose A. Lopes
  , ("OpClusterRedistConf",
242 34af39e8 Jose A. Lopes
     [t| () |],
243 34af39e8 Jose A. Lopes
     OpDoc.opClusterRedistConf,
244 34af39e8 Jose A. Lopes
     [],
245 34af39e8 Jose A. Lopes
     [])
246 34af39e8 Jose A. Lopes
  , ("OpClusterActivateMasterIp",
247 34af39e8 Jose A. Lopes
     [t| () |],
248 34af39e8 Jose A. Lopes
     OpDoc.opClusterActivateMasterIp,
249 34af39e8 Jose A. Lopes
     [],
250 34af39e8 Jose A. Lopes
     [])
251 34af39e8 Jose A. Lopes
  , ("OpClusterDeactivateMasterIp",
252 34af39e8 Jose A. Lopes
     [t| () |],
253 34af39e8 Jose A. Lopes
     OpDoc.opClusterDeactivateMasterIp,
254 34af39e8 Jose A. Lopes
     [],
255 34af39e8 Jose A. Lopes
     [])
256 c66f09f5 Iustin Pop
  , ("OpQuery",
257 34af39e8 Jose A. Lopes
     [t| QueryResponse |],
258 34af39e8 Jose A. Lopes
     OpDoc.opQuery,
259 c66f09f5 Iustin Pop
     [ pQueryWhat
260 c66f09f5 Iustin Pop
     , pUseLocking
261 c66f09f5 Iustin Pop
     , pQueryFields
262 c66f09f5 Iustin Pop
     , pQueryFilter
263 34af39e8 Jose A. Lopes
     ],
264 34af39e8 Jose A. Lopes
     "what")
265 c66f09f5 Iustin Pop
  , ("OpQueryFields",
266 34af39e8 Jose A. Lopes
     [t| QueryFieldsResponse |],
267 34af39e8 Jose A. Lopes
     OpDoc.opQueryFields,
268 c66f09f5 Iustin Pop
     [ pQueryWhat
269 34af39e8 Jose A. Lopes
     , pQueryFieldsFields
270 34af39e8 Jose A. Lopes
     ],
271 34af39e8 Jose A. Lopes
     "what")
272 c66f09f5 Iustin Pop
  , ("OpOobCommand",
273 34af39e8 Jose A. Lopes
     [t| [[(QueryResultCode, JSValue)]] |],
274 34af39e8 Jose A. Lopes
     OpDoc.opOobCommand,
275 c66f09f5 Iustin Pop
     [ pNodeNames
276 34af39e8 Jose A. Lopes
     , withDoc "List of node UUIDs to run the OOB command against" pNodeUuids
277 c66f09f5 Iustin Pop
     , pOobCommand
278 c66f09f5 Iustin Pop
     , pOobTimeout
279 c66f09f5 Iustin Pop
     , pIgnoreStatus
280 c66f09f5 Iustin Pop
     , pPowerDelay
281 34af39e8 Jose A. Lopes
     ],
282 34af39e8 Jose A. Lopes
     [])
283 34af39e8 Jose A. Lopes
  , ("OpRestrictedCommand",
284 34af39e8 Jose A. Lopes
     [t| [(Bool, String)] |],
285 34af39e8 Jose A. Lopes
     OpDoc.opRestrictedCommand,
286 34af39e8 Jose A. Lopes
     [ pUseLocking
287 34af39e8 Jose A. Lopes
     , withDoc
288 34af39e8 Jose A. Lopes
       "Nodes on which the command should be run (at least one)"
289 34af39e8 Jose A. Lopes
       pRequiredNodes
290 34af39e8 Jose A. Lopes
     , withDoc
291 34af39e8 Jose A. Lopes
       "Node UUIDs on which the command should be run (at least one)"
292 34af39e8 Jose A. Lopes
       pRequiredNodeUuids
293 34af39e8 Jose A. Lopes
     , pRestrictedCommand
294 34af39e8 Jose A. Lopes
     ],
295 34af39e8 Jose A. Lopes
     [])
296 1c3231aa Thomas Thrainer
  , ("OpNodeRemove",
297 34af39e8 Jose A. Lopes
     [t| () |],
298 34af39e8 Jose A. Lopes
      OpDoc.opNodeRemove,
299 1c3231aa Thomas Thrainer
     [ pNodeName
300 1c3231aa Thomas Thrainer
     , pNodeUuid
301 34af39e8 Jose A. Lopes
     ],
302 34af39e8 Jose A. Lopes
     "node_name")
303 c66f09f5 Iustin Pop
  , ("OpNodeAdd",
304 34af39e8 Jose A. Lopes
     [t| () |],
305 34af39e8 Jose A. Lopes
      OpDoc.opNodeAdd,
306 c66f09f5 Iustin Pop
     [ pNodeName
307 c66f09f5 Iustin Pop
     , pHvState
308 c66f09f5 Iustin Pop
     , pDiskState
309 c66f09f5 Iustin Pop
     , pPrimaryIp
310 c66f09f5 Iustin Pop
     , pSecondaryIp
311 c66f09f5 Iustin Pop
     , pReadd
312 c66f09f5 Iustin Pop
     , pNodeGroup
313 c66f09f5 Iustin Pop
     , pMasterCapable
314 c66f09f5 Iustin Pop
     , pVmCapable
315 c66f09f5 Iustin Pop
     , pNdParams
316 34af39e8 Jose A. Lopes
     ],
317 34af39e8 Jose A. Lopes
     "node_name")
318 c66f09f5 Iustin Pop
  , ("OpNodeQueryvols",
319 34af39e8 Jose A. Lopes
     [t| [JSValue] |],
320 34af39e8 Jose A. Lopes
     OpDoc.opNodeQueryvols,
321 c66f09f5 Iustin Pop
     [ pOutputFields
322 34af39e8 Jose A. Lopes
     , withDoc "Empty list to query all nodes, node names otherwise" pNodes
323 34af39e8 Jose A. Lopes
     ],
324 34af39e8 Jose A. Lopes
     [])
325 c66f09f5 Iustin Pop
  , ("OpNodeQueryStorage",
326 34af39e8 Jose A. Lopes
     [t| [[JSValue]] |],
327 34af39e8 Jose A. Lopes
     OpDoc.opNodeQueryStorage,
328 c66f09f5 Iustin Pop
     [ pOutputFields
329 4f90370c Helga Velroyen
     , pStorageTypeOptional
330 34af39e8 Jose A. Lopes
     , withDoc
331 34af39e8 Jose A. Lopes
       "Empty list to query all, list of names to query otherwise"
332 34af39e8 Jose A. Lopes
       pNodes
333 c66f09f5 Iustin Pop
     , pStorageName
334 34af39e8 Jose A. Lopes
     ],
335 34af39e8 Jose A. Lopes
     [])
336 c66f09f5 Iustin Pop
  , ("OpNodeModifyStorage",
337 34af39e8 Jose A. Lopes
     [t| () |],
338 34af39e8 Jose A. Lopes
     OpDoc.opNodeModifyStorage,
339 c66f09f5 Iustin Pop
     [ pNodeName
340 1c3231aa Thomas Thrainer
     , pNodeUuid
341 c66f09f5 Iustin Pop
     , pStorageType
342 c66f09f5 Iustin Pop
     , pStorageName
343 c66f09f5 Iustin Pop
     , pStorageChanges
344 34af39e8 Jose A. Lopes
     ],
345 34af39e8 Jose A. Lopes
     "node_name")
346 c66f09f5 Iustin Pop
  , ("OpRepairNodeStorage",
347 34af39e8 Jose A. Lopes
      [t| () |],
348 34af39e8 Jose A. Lopes
      OpDoc.opRepairNodeStorage,
349 c66f09f5 Iustin Pop
     [ pNodeName
350 1c3231aa Thomas Thrainer
     , pNodeUuid
351 c66f09f5 Iustin Pop
     , pStorageType
352 c66f09f5 Iustin Pop
     , pStorageName
353 c66f09f5 Iustin Pop
     , pIgnoreConsistency
354 34af39e8 Jose A. Lopes
     ],
355 34af39e8 Jose A. Lopes
     "node_name")
356 c66f09f5 Iustin Pop
  , ("OpNodeSetParams",
357 34af39e8 Jose A. Lopes
     [t| [(NonEmptyString, JSValue)] |],
358 34af39e8 Jose A. Lopes
     OpDoc.opNodeSetParams,
359 c66f09f5 Iustin Pop
     [ pNodeName
360 1c3231aa Thomas Thrainer
     , pNodeUuid
361 c66f09f5 Iustin Pop
     , pForce
362 c66f09f5 Iustin Pop
     , pHvState
363 c66f09f5 Iustin Pop
     , pDiskState
364 c66f09f5 Iustin Pop
     , pMasterCandidate
365 34af39e8 Jose A. Lopes
     , withDoc "Whether to mark the node offline" pOffline
366 c66f09f5 Iustin Pop
     , pDrained
367 c66f09f5 Iustin Pop
     , pAutoPromote
368 c66f09f5 Iustin Pop
     , pMasterCapable
369 c66f09f5 Iustin Pop
     , pVmCapable
370 c66f09f5 Iustin Pop
     , pSecondaryIp
371 c66f09f5 Iustin Pop
     , pNdParams
372 67fc4de7 Iustin Pop
     , pPowered
373 34af39e8 Jose A. Lopes
     ],
374 34af39e8 Jose A. Lopes
     "node_name")
375 c66f09f5 Iustin Pop
  , ("OpNodePowercycle",
376 34af39e8 Jose A. Lopes
     [t| Maybe NonEmptyString |],
377 34af39e8 Jose A. Lopes
     OpDoc.opNodePowercycle,
378 c66f09f5 Iustin Pop
     [ pNodeName
379 1c3231aa Thomas Thrainer
     , pNodeUuid
380 c66f09f5 Iustin Pop
     , pForce
381 34af39e8 Jose A. Lopes
     ],
382 34af39e8 Jose A. Lopes
     "node_name")
383 c66f09f5 Iustin Pop
  , ("OpNodeMigrate",
384 34af39e8 Jose A. Lopes
     [t| JobIdListOnly |],
385 34af39e8 Jose A. Lopes
     OpDoc.opNodeMigrate,
386 c66f09f5 Iustin Pop
     [ pNodeName
387 1c3231aa Thomas Thrainer
     , pNodeUuid
388 c66f09f5 Iustin Pop
     , pMigrationMode
389 c66f09f5 Iustin Pop
     , pMigrationLive
390 c66f09f5 Iustin Pop
     , pMigrationTargetNode
391 1c3231aa Thomas Thrainer
     , pMigrationTargetNodeUuid
392 c66f09f5 Iustin Pop
     , pAllowRuntimeChgs
393 c66f09f5 Iustin Pop
     , pIgnoreIpolicy
394 c66f09f5 Iustin Pop
     , pIallocator
395 34af39e8 Jose A. Lopes
     ],
396 34af39e8 Jose A. Lopes
     "node_name")
397 c66f09f5 Iustin Pop
  , ("OpNodeEvacuate",
398 34af39e8 Jose A. Lopes
     [t| JobIdListOnly |],
399 34af39e8 Jose A. Lopes
     OpDoc.opNodeEvacuate,
400 c66f09f5 Iustin Pop
     [ pEarlyRelease
401 c66f09f5 Iustin Pop
     , pNodeName
402 1c3231aa Thomas Thrainer
     , pNodeUuid
403 c66f09f5 Iustin Pop
     , pRemoteNode
404 1c3231aa Thomas Thrainer
     , pRemoteNodeUuid
405 c66f09f5 Iustin Pop
     , pIallocator
406 c66f09f5 Iustin Pop
     , pEvacMode
407 34af39e8 Jose A. Lopes
     ],
408 34af39e8 Jose A. Lopes
     "node_name")
409 6d558717 Iustin Pop
  , ("OpInstanceCreate",
410 34af39e8 Jose A. Lopes
     [t| [NonEmptyString] |],
411 34af39e8 Jose A. Lopes
     OpDoc.opInstanceCreate,
412 6d558717 Iustin Pop
     [ pInstanceName
413 6d558717 Iustin Pop
     , pForceVariant
414 6d558717 Iustin Pop
     , pWaitForSync
415 6d558717 Iustin Pop
     , pNameCheck
416 6d558717 Iustin Pop
     , pIgnoreIpolicy
417 34af39e8 Jose A. Lopes
     , pOpportunisticLocking
418 6d558717 Iustin Pop
     , pInstBeParams
419 6d558717 Iustin Pop
     , pInstDisks
420 7b6996a8 Thomas Thrainer
     , pOptDiskTemplate
421 6d558717 Iustin Pop
     , pFileDriver
422 6d558717 Iustin Pop
     , pFileStorageDir
423 6d558717 Iustin Pop
     , pInstHvParams
424 6d558717 Iustin Pop
     , pHypervisor
425 6d558717 Iustin Pop
     , pIallocator
426 6d558717 Iustin Pop
     , pResetDefaults
427 6d558717 Iustin Pop
     , pIpCheck
428 6d558717 Iustin Pop
     , pIpConflictsCheck
429 6d558717 Iustin Pop
     , pInstCreateMode
430 6d558717 Iustin Pop
     , pInstNics
431 6d558717 Iustin Pop
     , pNoInstall
432 6d558717 Iustin Pop
     , pInstOsParams
433 6d558717 Iustin Pop
     , pInstOs
434 6d558717 Iustin Pop
     , pPrimaryNode
435 1c3231aa Thomas Thrainer
     , pPrimaryNodeUuid
436 6d558717 Iustin Pop
     , pSecondaryNode
437 1c3231aa Thomas Thrainer
     , pSecondaryNodeUuid
438 6d558717 Iustin Pop
     , pSourceHandshake
439 6d558717 Iustin Pop
     , pSourceInstance
440 6d558717 Iustin Pop
     , pSourceShutdownTimeout
441 6d558717 Iustin Pop
     , pSourceX509Ca
442 6d558717 Iustin Pop
     , pSrcNode
443 1c3231aa Thomas Thrainer
     , pSrcNodeUuid
444 6d558717 Iustin Pop
     , pSrcPath
445 51d7ac96 Thomas Thrainer
     , pBackupCompress
446 6d558717 Iustin Pop
     , pStartInstance
447 6d558717 Iustin Pop
     , pInstTags
448 34af39e8 Jose A. Lopes
     ],
449 34af39e8 Jose A. Lopes
     "instance_name")
450 c2d3219b Iustin Pop
  , ("OpInstanceMultiAlloc",
451 34af39e8 Jose A. Lopes
     [t| InstanceMultiAllocResponse |],
452 34af39e8 Jose A. Lopes
     OpDoc.opInstanceMultiAlloc,
453 34af39e8 Jose A. Lopes
     [ pOpportunisticLocking
454 34af39e8 Jose A. Lopes
     , pIallocator
455 c2d3219b Iustin Pop
     , pMultiAllocInstances
456 34af39e8 Jose A. Lopes
     ],
457 34af39e8 Jose A. Lopes
     [])
458 c2d3219b Iustin Pop
  , ("OpInstanceReinstall",
459 34af39e8 Jose A. Lopes
     [t| () |],
460 34af39e8 Jose A. Lopes
     OpDoc.opInstanceReinstall,
461 c2d3219b Iustin Pop
     [ pInstanceName
462 da4a52a3 Thomas Thrainer
     , pInstanceUuid
463 c2d3219b Iustin Pop
     , pForceVariant
464 c2d3219b Iustin Pop
     , pInstOs
465 c2d3219b Iustin Pop
     , pTempOsParams
466 34af39e8 Jose A. Lopes
     ],
467 34af39e8 Jose A. Lopes
     "instance_name")
468 c2d3219b Iustin Pop
  , ("OpInstanceRemove",
469 34af39e8 Jose A. Lopes
     [t| () |],
470 34af39e8 Jose A. Lopes
     OpDoc.opInstanceRemove,
471 c2d3219b Iustin Pop
     [ pInstanceName
472 da4a52a3 Thomas Thrainer
     , pInstanceUuid
473 c2d3219b Iustin Pop
     , pShutdownTimeout
474 c2d3219b Iustin Pop
     , pIgnoreFailures
475 34af39e8 Jose A. Lopes
     ],
476 34af39e8 Jose A. Lopes
     "instance_name")
477 c2d3219b Iustin Pop
  , ("OpInstanceRename",
478 34af39e8 Jose A. Lopes
     [t| NonEmptyString |],
479 34af39e8 Jose A. Lopes
     OpDoc.opInstanceRename,
480 c2d3219b Iustin Pop
     [ pInstanceName
481 da4a52a3 Thomas Thrainer
     , pInstanceUuid
482 34af39e8 Jose A. Lopes
     , withDoc "New instance name" pNewName
483 c2d3219b Iustin Pop
     , pNameCheck
484 c2d3219b Iustin Pop
     , pIpCheck
485 34af39e8 Jose A. Lopes
     ],
486 34af39e8 Jose A. Lopes
     [])
487 c2d3219b Iustin Pop
  , ("OpInstanceStartup",
488 34af39e8 Jose A. Lopes
     [t| () |],
489 34af39e8 Jose A. Lopes
     OpDoc.opInstanceStartup,
490 c2d3219b Iustin Pop
     [ pInstanceName
491 da4a52a3 Thomas Thrainer
     , pInstanceUuid
492 c2d3219b Iustin Pop
     , pForce
493 c2d3219b Iustin Pop
     , pIgnoreOfflineNodes
494 c2d3219b Iustin Pop
     , pTempHvParams
495 c2d3219b Iustin Pop
     , pTempBeParams
496 c2d3219b Iustin Pop
     , pNoRemember
497 c2d3219b Iustin Pop
     , pStartupPaused
498 34af39e8 Jose A. Lopes
     ],
499 34af39e8 Jose A. Lopes
     "instance_name")
500 c2d3219b Iustin Pop
  , ("OpInstanceShutdown",
501 34af39e8 Jose A. Lopes
     [t| () |],
502 34af39e8 Jose A. Lopes
     OpDoc.opInstanceShutdown,
503 c2d3219b Iustin Pop
     [ pInstanceName
504 da4a52a3 Thomas Thrainer
     , pInstanceUuid
505 0d57ce24 Guido Trotter
     , pForce
506 c2d3219b Iustin Pop
     , pIgnoreOfflineNodes
507 5cbf7832 Jose A. Lopes
     , pShutdownTimeout'
508 c2d3219b Iustin Pop
     , pNoRemember
509 34af39e8 Jose A. Lopes
     ],
510 34af39e8 Jose A. Lopes
     "instance_name")
511 c2d3219b Iustin Pop
  , ("OpInstanceReboot",
512 34af39e8 Jose A. Lopes
     [t| () |],
513 34af39e8 Jose A. Lopes
     OpDoc.opInstanceReboot,
514 c2d3219b Iustin Pop
     [ pInstanceName
515 da4a52a3 Thomas Thrainer
     , pInstanceUuid
516 c2d3219b Iustin Pop
     , pShutdownTimeout
517 c2d3219b Iustin Pop
     , pIgnoreSecondaries
518 c2d3219b Iustin Pop
     , pRebootType
519 34af39e8 Jose A. Lopes
     ],
520 34af39e8 Jose A. Lopes
     "instance_name")
521 34af39e8 Jose A. Lopes
  , ("OpInstanceReplaceDisks",
522 34af39e8 Jose A. Lopes
     [t| () |],
523 34af39e8 Jose A. Lopes
     OpDoc.opInstanceReplaceDisks,
524 34af39e8 Jose A. Lopes
     [ pInstanceName
525 34af39e8 Jose A. Lopes
     , pInstanceUuid
526 34af39e8 Jose A. Lopes
     , pEarlyRelease
527 34af39e8 Jose A. Lopes
     , pIgnoreIpolicy
528 34af39e8 Jose A. Lopes
     , pReplaceDisksMode
529 34af39e8 Jose A. Lopes
     , pReplaceDisksList
530 34af39e8 Jose A. Lopes
     , pRemoteNode
531 34af39e8 Jose A. Lopes
     , pRemoteNodeUuid
532 34af39e8 Jose A. Lopes
     , pIallocator
533 34af39e8 Jose A. Lopes
     ],
534 34af39e8 Jose A. Lopes
     "instance_name")
535 34af39e8 Jose A. Lopes
  , ("OpInstanceFailover",
536 34af39e8 Jose A. Lopes
     [t| () |],
537 34af39e8 Jose A. Lopes
     OpDoc.opInstanceFailover,
538 34af39e8 Jose A. Lopes
     [ pInstanceName
539 34af39e8 Jose A. Lopes
     , pInstanceUuid
540 34af39e8 Jose A. Lopes
     , pShutdownTimeout
541 34af39e8 Jose A. Lopes
     , pIgnoreConsistency
542 34af39e8 Jose A. Lopes
     , pMigrationTargetNode
543 34af39e8 Jose A. Lopes
     , pMigrationTargetNodeUuid
544 34af39e8 Jose A. Lopes
     , pIgnoreIpolicy
545 1ca326c8 Thomas Thrainer
     , pMigrationCleanup
546 34af39e8 Jose A. Lopes
     , pIallocator
547 34af39e8 Jose A. Lopes
     ],
548 34af39e8 Jose A. Lopes
     "instance_name")
549 34af39e8 Jose A. Lopes
  , ("OpInstanceMigrate",
550 34af39e8 Jose A. Lopes
     [t| () |],
551 34af39e8 Jose A. Lopes
     OpDoc.opInstanceMigrate,
552 34af39e8 Jose A. Lopes
     [ pInstanceName
553 34af39e8 Jose A. Lopes
     , pInstanceUuid
554 34af39e8 Jose A. Lopes
     , pMigrationMode
555 34af39e8 Jose A. Lopes
     , pMigrationLive
556 34af39e8 Jose A. Lopes
     , pMigrationTargetNode
557 34af39e8 Jose A. Lopes
     , pMigrationTargetNodeUuid
558 34af39e8 Jose A. Lopes
     , pAllowRuntimeChgs
559 34af39e8 Jose A. Lopes
     , pIgnoreIpolicy
560 34af39e8 Jose A. Lopes
     , pMigrationCleanup
561 34af39e8 Jose A. Lopes
     , pIallocator
562 34af39e8 Jose A. Lopes
     , pAllowFailover
563 34af39e8 Jose A. Lopes
     ],
564 34af39e8 Jose A. Lopes
     "instance_name")
565 c2d3219b Iustin Pop
  , ("OpInstanceMove",
566 34af39e8 Jose A. Lopes
     [t| () |],
567 34af39e8 Jose A. Lopes
     OpDoc.opInstanceMove,
568 c2d3219b Iustin Pop
     [ pInstanceName
569 da4a52a3 Thomas Thrainer
     , pInstanceUuid
570 c2d3219b Iustin Pop
     , pShutdownTimeout
571 c2d3219b Iustin Pop
     , pIgnoreIpolicy
572 c2d3219b Iustin Pop
     , pMoveTargetNode
573 1c3231aa Thomas Thrainer
     , pMoveTargetNodeUuid
574 f198cf91 Thomas Thrainer
     , pMoveCompress
575 c2d3219b Iustin Pop
     , pIgnoreConsistency
576 34af39e8 Jose A. Lopes
     ],
577 34af39e8 Jose A. Lopes
     "instance_name")
578 c2d3219b Iustin Pop
  , ("OpInstanceConsole",
579 34af39e8 Jose A. Lopes
     [t| JSObject JSValue |],
580 34af39e8 Jose A. Lopes
     OpDoc.opInstanceConsole,
581 da4a52a3 Thomas Thrainer
     [ pInstanceName
582 da4a52a3 Thomas Thrainer
     , pInstanceUuid
583 34af39e8 Jose A. Lopes
     ],
584 34af39e8 Jose A. Lopes
     "instance_name")
585 c2d3219b Iustin Pop
  , ("OpInstanceActivateDisks",
586 34af39e8 Jose A. Lopes
     [t| [(NonEmptyString, NonEmptyString, NonEmptyString)] |],
587 34af39e8 Jose A. Lopes
     OpDoc.opInstanceActivateDisks,
588 c2d3219b Iustin Pop
     [ pInstanceName
589 da4a52a3 Thomas Thrainer
     , pInstanceUuid
590 c2d3219b Iustin Pop
     , pIgnoreDiskSize
591 c2d3219b Iustin Pop
     , pWaitForSyncFalse
592 34af39e8 Jose A. Lopes
     ],
593 34af39e8 Jose A. Lopes
     "instance_name")
594 c2d3219b Iustin Pop
  , ("OpInstanceDeactivateDisks",
595 34af39e8 Jose A. Lopes
     [t| () |],
596 34af39e8 Jose A. Lopes
     OpDoc.opInstanceDeactivateDisks,
597 c2d3219b Iustin Pop
     [ pInstanceName
598 da4a52a3 Thomas Thrainer
     , pInstanceUuid
599 c2d3219b Iustin Pop
     , pForce
600 34af39e8 Jose A. Lopes
     ],
601 34af39e8 Jose A. Lopes
     "instance_name")
602 c2d3219b Iustin Pop
  , ("OpInstanceRecreateDisks",
603 34af39e8 Jose A. Lopes
     [t| () |],
604 34af39e8 Jose A. Lopes
     OpDoc.opInstanceRecreateDisks,
605 c2d3219b Iustin Pop
     [ pInstanceName
606 da4a52a3 Thomas Thrainer
     , pInstanceUuid
607 c2d3219b Iustin Pop
     , pRecreateDisksInfo
608 34af39e8 Jose A. Lopes
     , withDoc "New instance nodes, if relocation is desired" pNodes
609 34af39e8 Jose A. Lopes
     , withDoc "New instance node UUIDs, if relocation is desired" pNodeUuids
610 c2d3219b Iustin Pop
     , pIallocator
611 34af39e8 Jose A. Lopes
     ],
612 34af39e8 Jose A. Lopes
     "instance_name")
613 c2d3219b Iustin Pop
  , ("OpInstanceQueryData",
614 34af39e8 Jose A. Lopes
     [t| JSObject (JSObject JSValue) |],
615 34af39e8 Jose A. Lopes
     OpDoc.opInstanceQueryData,
616 c2d3219b Iustin Pop
     [ pUseLocking
617 c2d3219b Iustin Pop
     , pInstances
618 c2d3219b Iustin Pop
     , pStatic
619 34af39e8 Jose A. Lopes
     ],
620 34af39e8 Jose A. Lopes
     [])
621 c2d3219b Iustin Pop
  , ("OpInstanceSetParams",
622 34af39e8 Jose A. Lopes
      [t| [(NonEmptyString, JSValue)] |],
623 34af39e8 Jose A. Lopes
      OpDoc.opInstanceSetParams,
624 c2d3219b Iustin Pop
     [ pInstanceName
625 da4a52a3 Thomas Thrainer
     , pInstanceUuid
626 c2d3219b Iustin Pop
     , pForce
627 c2d3219b Iustin Pop
     , pForceVariant
628 c2d3219b Iustin Pop
     , pIgnoreIpolicy
629 c2d3219b Iustin Pop
     , pInstParamsNicChanges
630 c2d3219b Iustin Pop
     , pInstParamsDiskChanges
631 c2d3219b Iustin Pop
     , pInstBeParams
632 c2d3219b Iustin Pop
     , pRuntimeMem
633 c2d3219b Iustin Pop
     , pInstHvParams
634 88127c47 Iustin Pop
     , pOptDiskTemplate
635 d2204b1a Klaus Aehlig
     , pPrimaryNode
636 1c3231aa Thomas Thrainer
     , pPrimaryNodeUuid
637 34af39e8 Jose A. Lopes
     , withDoc "Secondary node (used when changing disk template)" pRemoteNode
638 34af39e8 Jose A. Lopes
     , withDoc
639 34af39e8 Jose A. Lopes
       "Secondary node UUID (used when changing disk template)"
640 34af39e8 Jose A. Lopes
       pRemoteNodeUuid
641 c2d3219b Iustin Pop
     , pOsNameChange
642 c2d3219b Iustin Pop
     , pInstOsParams
643 c2d3219b Iustin Pop
     , pWaitForSync
644 34af39e8 Jose A. Lopes
     , withDoc "Whether to mark the instance as offline" pOffline
645 c2d3219b Iustin Pop
     , pIpConflictsCheck
646 df58ca1c Dimitris Aragiorgis
     , pHotplug
647 34af39e8 Jose A. Lopes
     ],
648 34af39e8 Jose A. Lopes
     "instance_name")
649 c2d3219b Iustin Pop
  , ("OpInstanceGrowDisk",
650 34af39e8 Jose A. Lopes
     [t| () |],
651 34af39e8 Jose A. Lopes
     OpDoc.opInstanceGrowDisk,
652 c2d3219b Iustin Pop
     [ pInstanceName
653 da4a52a3 Thomas Thrainer
     , pInstanceUuid
654 c2d3219b Iustin Pop
     , pWaitForSync
655 c2d3219b Iustin Pop
     , pDiskIndex
656 c2d3219b Iustin Pop
     , pDiskChgAmount
657 c2d3219b Iustin Pop
     , pDiskChgAbsolute
658 34af39e8 Jose A. Lopes
     ],
659 34af39e8 Jose A. Lopes
     "instance_name")
660 c2d3219b Iustin Pop
  , ("OpInstanceChangeGroup",
661 34af39e8 Jose A. Lopes
     [t| JobIdListOnly |],
662 34af39e8 Jose A. Lopes
     OpDoc.opInstanceChangeGroup,
663 c2d3219b Iustin Pop
     [ pInstanceName
664 da4a52a3 Thomas Thrainer
     , pInstanceUuid
665 c2d3219b Iustin Pop
     , pEarlyRelease
666 c2d3219b Iustin Pop
     , pIallocator
667 c2d3219b Iustin Pop
     , pTargetGroups
668 34af39e8 Jose A. Lopes
     ],
669 34af39e8 Jose A. Lopes
     "instance_name")
670 398e9066 Iustin Pop
  , ("OpGroupAdd",
671 34af39e8 Jose A. Lopes
     [t| () |],
672 34af39e8 Jose A. Lopes
     OpDoc.opGroupAdd,
673 398e9066 Iustin Pop
     [ pGroupName
674 398e9066 Iustin Pop
     , pNodeGroupAllocPolicy
675 398e9066 Iustin Pop
     , pGroupNodeParams
676 398e9066 Iustin Pop
     , pDiskParams
677 398e9066 Iustin Pop
     , pHvState
678 398e9066 Iustin Pop
     , pDiskState
679 34af39e8 Jose A. Lopes
     , withDoc "Group-wide ipolicy specs" pIpolicy
680 34af39e8 Jose A. Lopes
     ],
681 34af39e8 Jose A. Lopes
     "group_name")
682 398e9066 Iustin Pop
  , ("OpGroupAssignNodes",
683 34af39e8 Jose A. Lopes
     [t| () |],
684 34af39e8 Jose A. Lopes
     OpDoc.opGroupAssignNodes,
685 398e9066 Iustin Pop
     [ pGroupName
686 398e9066 Iustin Pop
     , pForce
687 34af39e8 Jose A. Lopes
     , withDoc "List of nodes to assign" pRequiredNodes
688 34af39e8 Jose A. Lopes
     , withDoc "List of node UUIDs to assign" pRequiredNodeUuids
689 34af39e8 Jose A. Lopes
     ],
690 34af39e8 Jose A. Lopes
     "group_name")
691 398e9066 Iustin Pop
  , ("OpGroupSetParams",
692 34af39e8 Jose A. Lopes
     [t| [(NonEmptyString, JSValue)] |],
693 34af39e8 Jose A. Lopes
     OpDoc.opGroupSetParams,
694 398e9066 Iustin Pop
     [ pGroupName
695 398e9066 Iustin Pop
     , pNodeGroupAllocPolicy
696 398e9066 Iustin Pop
     , pGroupNodeParams
697 398e9066 Iustin Pop
     , pDiskParams
698 398e9066 Iustin Pop
     , pHvState
699 398e9066 Iustin Pop
     , pDiskState
700 34af39e8 Jose A. Lopes
     , withDoc "Group-wide ipolicy specs" pIpolicy
701 34af39e8 Jose A. Lopes
     ],
702 34af39e8 Jose A. Lopes
     "group_name")
703 398e9066 Iustin Pop
  , ("OpGroupRemove",
704 34af39e8 Jose A. Lopes
     [t| () |],
705 34af39e8 Jose A. Lopes
     OpDoc.opGroupRemove,
706 34af39e8 Jose A. Lopes
     [ pGroupName
707 34af39e8 Jose A. Lopes
     ],
708 34af39e8 Jose A. Lopes
     "group_name")
709 398e9066 Iustin Pop
  , ("OpGroupRename",
710 34af39e8 Jose A. Lopes
     [t| NonEmptyString |],
711 34af39e8 Jose A. Lopes
     OpDoc.opGroupRename,
712 398e9066 Iustin Pop
     [ pGroupName
713 34af39e8 Jose A. Lopes
     , withDoc "New group name" pNewName
714 34af39e8 Jose A. Lopes
     ],
715 34af39e8 Jose A. Lopes
     [])
716 398e9066 Iustin Pop
  , ("OpGroupEvacuate",
717 34af39e8 Jose A. Lopes
     [t| JobIdListOnly |],
718 34af39e8 Jose A. Lopes
     OpDoc.opGroupEvacuate,
719 398e9066 Iustin Pop
     [ pGroupName
720 398e9066 Iustin Pop
     , pEarlyRelease
721 398e9066 Iustin Pop
     , pIallocator
722 398e9066 Iustin Pop
     , pTargetGroups
723 34af39e8 Jose A. Lopes
     ],
724 34af39e8 Jose A. Lopes
     "group_name")
725 398e9066 Iustin Pop
  , ("OpOsDiagnose",
726 34af39e8 Jose A. Lopes
     [t| [[JSValue]] |],
727 34af39e8 Jose A. Lopes
     OpDoc.opOsDiagnose,
728 398e9066 Iustin Pop
     [ pOutputFields
729 34af39e8 Jose A. Lopes
     , withDoc "Which operating systems to diagnose" pNames
730 34af39e8 Jose A. Lopes
     ],
731 34af39e8 Jose A. Lopes
     [])
732 b954f097 Constantinos Venetsanopoulos
  , ("OpExtStorageDiagnose",
733 34af39e8 Jose A. Lopes
     [t| [[JSValue]] |],
734 34af39e8 Jose A. Lopes
     OpDoc.opExtStorageDiagnose,
735 b954f097 Constantinos Venetsanopoulos
     [ pOutputFields
736 34af39e8 Jose A. Lopes
     , withDoc "Which ExtStorage Provider to diagnose" pNames
737 34af39e8 Jose A. Lopes
     ],
738 34af39e8 Jose A. Lopes
     [])
739 398e9066 Iustin Pop
  , ("OpBackupPrepare",
740 34af39e8 Jose A. Lopes
     [t| Maybe (JSObject JSValue) |],
741 34af39e8 Jose A. Lopes
     OpDoc.opBackupPrepare,
742 398e9066 Iustin Pop
     [ pInstanceName
743 da4a52a3 Thomas Thrainer
     , pInstanceUuid
744 398e9066 Iustin Pop
     , pExportMode
745 34af39e8 Jose A. Lopes
     ],
746 34af39e8 Jose A. Lopes
     "instance_name")
747 398e9066 Iustin Pop
  , ("OpBackupExport",
748 34af39e8 Jose A. Lopes
     [t| (Bool, [Bool]) |],
749 34af39e8 Jose A. Lopes
     OpDoc.opBackupExport,
750 398e9066 Iustin Pop
     [ pInstanceName
751 da4a52a3 Thomas Thrainer
     , pInstanceUuid
752 896cc964 Thomas Thrainer
     , pBackupCompress
753 398e9066 Iustin Pop
     , pShutdownTimeout
754 398e9066 Iustin Pop
     , pExportTargetNode
755 1c3231aa Thomas Thrainer
     , pExportTargetNodeUuid
756 67fc4de7 Iustin Pop
     , pShutdownInstance
757 398e9066 Iustin Pop
     , pRemoveInstance
758 398e9066 Iustin Pop
     , pIgnoreRemoveFailures
759 34af39e8 Jose A. Lopes
     , defaultField [| ExportModeLocal |] pExportMode
760 398e9066 Iustin Pop
     , pX509KeyName
761 398e9066 Iustin Pop
     , pX509DestCA
762 34af39e8 Jose A. Lopes
     ],
763 34af39e8 Jose A. Lopes
     "instance_name")
764 398e9066 Iustin Pop
  , ("OpBackupRemove",
765 34af39e8 Jose A. Lopes
     [t| () |],
766 34af39e8 Jose A. Lopes
     OpDoc.opBackupRemove,
767 da4a52a3 Thomas Thrainer
     [ pInstanceName
768 da4a52a3 Thomas Thrainer
     , pInstanceUuid
769 34af39e8 Jose A. Lopes
     ],
770 34af39e8 Jose A. Lopes
     "instance_name")
771 34af39e8 Jose A. Lopes
  , ("OpTagsGet",
772 34af39e8 Jose A. Lopes
     [t| [NonEmptyString] |],
773 34af39e8 Jose A. Lopes
     OpDoc.opTagsGet,
774 34af39e8 Jose A. Lopes
     [ pTagsObject
775 34af39e8 Jose A. Lopes
     , pUseLocking
776 34af39e8 Jose A. Lopes
     , withDoc "Name of object to retrieve tags from" pTagsName
777 34af39e8 Jose A. Lopes
     ],
778 34af39e8 Jose A. Lopes
     "name")
779 34af39e8 Jose A. Lopes
  , ("OpTagsSearch",
780 34af39e8 Jose A. Lopes
     [t| [(NonEmptyString, NonEmptyString)] |],
781 34af39e8 Jose A. Lopes
     OpDoc.opTagsSearch,
782 34af39e8 Jose A. Lopes
     [ pTagSearchPattern
783 34af39e8 Jose A. Lopes
     ],
784 34af39e8 Jose A. Lopes
     "pattern")
785 34af39e8 Jose A. Lopes
  , ("OpTagsSet",
786 34af39e8 Jose A. Lopes
     [t| () |],
787 34af39e8 Jose A. Lopes
     OpDoc.opTagsSet,
788 34af39e8 Jose A. Lopes
     [ pTagsObject
789 34af39e8 Jose A. Lopes
     , pTagsList
790 34af39e8 Jose A. Lopes
     , withDoc "Name of object where tag(s) should be added" pTagsName
791 34af39e8 Jose A. Lopes
     ],
792 34af39e8 Jose A. Lopes
     [])
793 34af39e8 Jose A. Lopes
  , ("OpTagsDel",
794 34af39e8 Jose A. Lopes
     [t| () |],
795 34af39e8 Jose A. Lopes
     OpDoc.opTagsDel,
796 34af39e8 Jose A. Lopes
     [ pTagsObject
797 34af39e8 Jose A. Lopes
     , pTagsList
798 34af39e8 Jose A. Lopes
     , withDoc "Name of object where tag(s) should be deleted" pTagsName
799 34af39e8 Jose A. Lopes
     ],
800 34af39e8 Jose A. Lopes
     [])
801 34af39e8 Jose A. Lopes
  , ("OpTestDelay",
802 34af39e8 Jose A. Lopes
     [t| () |],
803 34af39e8 Jose A. Lopes
     OpDoc.opTestDelay,
804 34af39e8 Jose A. Lopes
     [ pDelayDuration
805 34af39e8 Jose A. Lopes
     , pDelayOnMaster
806 34af39e8 Jose A. Lopes
     , pDelayOnNodes
807 34af39e8 Jose A. Lopes
     , pDelayOnNodeUuids
808 34af39e8 Jose A. Lopes
     , pDelayRepeat
809 34af39e8 Jose A. Lopes
     ],
810 34af39e8 Jose A. Lopes
     "duration")
811 a3f02317 Iustin Pop
  , ("OpTestAllocator",
812 5cbf7832 Jose A. Lopes
     [t| String |],
813 34af39e8 Jose A. Lopes
     OpDoc.opTestAllocator,
814 a3f02317 Iustin Pop
     [ pIAllocatorDirection
815 a3f02317 Iustin Pop
     , pIAllocatorMode
816 a3f02317 Iustin Pop
     , pIAllocatorReqName
817 a3f02317 Iustin Pop
     , pIAllocatorNics
818 a3f02317 Iustin Pop
     , pIAllocatorDisks
819 a3f02317 Iustin Pop
     , pHypervisor
820 a3f02317 Iustin Pop
     , pIallocator
821 a3f02317 Iustin Pop
     , pInstTags
822 a3f02317 Iustin Pop
     , pIAllocatorMemory
823 a3f02317 Iustin Pop
     , pIAllocatorVCpus
824 a3f02317 Iustin Pop
     , pIAllocatorOs
825 a3f02317 Iustin Pop
     , pDiskTemplate
826 a3f02317 Iustin Pop
     , pIAllocatorInstances
827 a3f02317 Iustin Pop
     , pIAllocatorEvacMode
828 a3f02317 Iustin Pop
     , pTargetGroups
829 a3f02317 Iustin Pop
     , pIAllocatorSpindleUse
830 a3f02317 Iustin Pop
     , pIAllocatorCount
831 34af39e8 Jose A. Lopes
     ],
832 34af39e8 Jose A. Lopes
     "iallocator")
833 a3f02317 Iustin Pop
  , ("OpTestJqueue",
834 5cbf7832 Jose A. Lopes
     [t| Bool |],
835 34af39e8 Jose A. Lopes
     OpDoc.opTestJqueue,
836 a3f02317 Iustin Pop
     [ pJQueueNotifyWaitLock
837 a3f02317 Iustin Pop
     , pJQueueNotifyExec
838 a3f02317 Iustin Pop
     , pJQueueLogMessages
839 a3f02317 Iustin Pop
     , pJQueueFail
840 34af39e8 Jose A. Lopes
     ],
841 34af39e8 Jose A. Lopes
     [])
842 a3f02317 Iustin Pop
  , ("OpTestDummy",
843 34af39e8 Jose A. Lopes
     [t| () |],
844 34af39e8 Jose A. Lopes
     OpDoc.opTestDummy,
845 a3f02317 Iustin Pop
     [ pTestDummyResult
846 a3f02317 Iustin Pop
     , pTestDummyMessages
847 a3f02317 Iustin Pop
     , pTestDummyFail
848 a3f02317 Iustin Pop
     , pTestDummySubmitJobs
849 34af39e8 Jose A. Lopes
     ],
850 34af39e8 Jose A. Lopes
     [])
851 8d239fa4 Iustin Pop
  , ("OpNetworkAdd",
852 34af39e8 Jose A. Lopes
     [t| () |],
853 34af39e8 Jose A. Lopes
     OpDoc.opNetworkAdd,
854 8d239fa4 Iustin Pop
     [ pNetworkName
855 8d239fa4 Iustin Pop
     , pNetworkAddress4
856 8d239fa4 Iustin Pop
     , pNetworkGateway4
857 8d239fa4 Iustin Pop
     , pNetworkAddress6
858 8d239fa4 Iustin Pop
     , pNetworkGateway6
859 8d239fa4 Iustin Pop
     , pNetworkMacPrefix
860 8d239fa4 Iustin Pop
     , pNetworkAddRsvdIps
861 1dbceab9 Iustin Pop
     , pIpConflictsCheck
862 34af39e8 Jose A. Lopes
     , withDoc "Network tags" pInstTags
863 34af39e8 Jose A. Lopes
     ],
864 34af39e8 Jose A. Lopes
     "network_name")
865 8d239fa4 Iustin Pop
  , ("OpNetworkRemove",
866 34af39e8 Jose A. Lopes
     [t| () |],
867 34af39e8 Jose A. Lopes
     OpDoc.opNetworkRemove,
868 8d239fa4 Iustin Pop
     [ pNetworkName
869 8d239fa4 Iustin Pop
     , pForce
870 34af39e8 Jose A. Lopes
     ],
871 34af39e8 Jose A. Lopes
     "network_name")
872 8d239fa4 Iustin Pop
  , ("OpNetworkSetParams",
873 34af39e8 Jose A. Lopes
     [t| () |],
874 34af39e8 Jose A. Lopes
     OpDoc.opNetworkSetParams,
875 8d239fa4 Iustin Pop
     [ pNetworkName
876 8d239fa4 Iustin Pop
     , pNetworkGateway4
877 8d239fa4 Iustin Pop
     , pNetworkAddress6
878 8d239fa4 Iustin Pop
     , pNetworkGateway6
879 8d239fa4 Iustin Pop
     , pNetworkMacPrefix
880 34af39e8 Jose A. Lopes
     , withDoc "Which external IP addresses to reserve" pNetworkAddRsvdIps
881 8d239fa4 Iustin Pop
     , pNetworkRemoveRsvdIps
882 34af39e8 Jose A. Lopes
     ],
883 34af39e8 Jose A. Lopes
     "network_name")
884 8d239fa4 Iustin Pop
  , ("OpNetworkConnect",
885 34af39e8 Jose A. Lopes
     [t| () |],
886 34af39e8 Jose A. Lopes
     OpDoc.opNetworkConnect,
887 8d239fa4 Iustin Pop
     [ pGroupName
888 8d239fa4 Iustin Pop
     , pNetworkName
889 8d239fa4 Iustin Pop
     , pNetworkMode
890 8d239fa4 Iustin Pop
     , pNetworkLink
891 8d239fa4 Iustin Pop
     , pIpConflictsCheck
892 34af39e8 Jose A. Lopes
     ],
893 34af39e8 Jose A. Lopes
     "network_name")
894 8d239fa4 Iustin Pop
  , ("OpNetworkDisconnect",
895 34af39e8 Jose A. Lopes
     [t| () |],
896 34af39e8 Jose A. Lopes
     OpDoc.opNetworkDisconnect,
897 8d239fa4 Iustin Pop
     [ pGroupName
898 8d239fa4 Iustin Pop
     , pNetworkName
899 34af39e8 Jose A. Lopes
     ],
900 34af39e8 Jose A. Lopes
     "network_name")
901 ebf38064 Iustin Pop
  ])
902 12c19659 Iustin Pop
903 a583ec5d Iustin Pop
-- | Returns the OP_ID for a given opcode value.
904 12c19659 Iustin Pop
$(genOpID ''OpCode "opID")
905 702a4ee0 Iustin Pop
906 a583ec5d Iustin Pop
-- | A list of all defined/supported opcode IDs.
907 a583ec5d Iustin Pop
$(genAllOpIDs ''OpCode "allOpIDs")
908 a583ec5d Iustin Pop
909 702a4ee0 Iustin Pop
instance JSON OpCode where
910 ebf38064 Iustin Pop
  readJSON = loadOpCode
911 ebf38064 Iustin Pop
  showJSON = saveOpCode
912 4a826364 Iustin Pop
913 ad1c1e41 Iustin Pop
-- | Generates the summary value for an opcode.
914 ad1c1e41 Iustin Pop
opSummaryVal :: OpCode -> Maybe String
915 ad1c1e41 Iustin Pop
opSummaryVal OpClusterVerifyGroup { opGroupName = s } = Just (fromNonEmpty s)
916 ad1c1e41 Iustin Pop
opSummaryVal OpGroupVerifyDisks { opGroupName = s } = Just (fromNonEmpty s)
917 ad1c1e41 Iustin Pop
opSummaryVal OpClusterRename { opName = s } = Just (fromNonEmpty s)
918 ad1c1e41 Iustin Pop
opSummaryVal OpQuery { opWhat = s } = Just (queryTypeOpToRaw s)
919 ad1c1e41 Iustin Pop
opSummaryVal OpQueryFields { opWhat = s } = Just (queryTypeOpToRaw s)
920 ad1c1e41 Iustin Pop
opSummaryVal OpNodeRemove { opNodeName = s } = Just (fromNonEmpty s)
921 ad1c1e41 Iustin Pop
opSummaryVal OpNodeAdd { opNodeName = s } = Just (fromNonEmpty s)
922 ad1c1e41 Iustin Pop
opSummaryVal OpNodeModifyStorage { opNodeName = s } = Just (fromNonEmpty s)
923 ad1c1e41 Iustin Pop
opSummaryVal OpRepairNodeStorage  { opNodeName = s } = Just (fromNonEmpty s)
924 ad1c1e41 Iustin Pop
opSummaryVal OpNodeSetParams { opNodeName = s } = Just (fromNonEmpty s)
925 ad1c1e41 Iustin Pop
opSummaryVal OpNodePowercycle { opNodeName = s } = Just (fromNonEmpty s)
926 ad1c1e41 Iustin Pop
opSummaryVal OpNodeMigrate { opNodeName = s } = Just (fromNonEmpty s)
927 ad1c1e41 Iustin Pop
opSummaryVal OpNodeEvacuate { opNodeName = s } = Just (fromNonEmpty s)
928 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceCreate { opInstanceName = s } = Just s
929 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceReinstall { opInstanceName = s } = Just s
930 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceRemove { opInstanceName = s } = Just s
931 ad1c1e41 Iustin Pop
-- FIXME: instance rename should show both names; currently it shows none
932 ad1c1e41 Iustin Pop
-- opSummaryVal OpInstanceRename { opInstanceName = s } = Just s
933 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceStartup { opInstanceName = s } = Just s
934 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceShutdown { opInstanceName = s } = Just s
935 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceReboot { opInstanceName = s } = Just s
936 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceReplaceDisks { opInstanceName = s } = Just s
937 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceFailover { opInstanceName = s } = Just s
938 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceMigrate { opInstanceName = s } = Just s
939 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceMove { opInstanceName = s } = Just s
940 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceConsole { opInstanceName = s } = Just s
941 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceActivateDisks { opInstanceName = s } = Just s
942 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceDeactivateDisks { opInstanceName = s } = Just s
943 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceRecreateDisks { opInstanceName = s } = Just s
944 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceSetParams { opInstanceName = s } = Just s
945 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceGrowDisk { opInstanceName = s } = Just s
946 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceChangeGroup { opInstanceName = s } = Just s
947 ad1c1e41 Iustin Pop
opSummaryVal OpGroupAdd { opGroupName = s } = Just (fromNonEmpty s)
948 ad1c1e41 Iustin Pop
opSummaryVal OpGroupAssignNodes { opGroupName = s } = Just (fromNonEmpty s)
949 ad1c1e41 Iustin Pop
opSummaryVal OpGroupSetParams { opGroupName = s } = Just (fromNonEmpty s)
950 ad1c1e41 Iustin Pop
opSummaryVal OpGroupRemove { opGroupName = s } = Just (fromNonEmpty s)
951 ad1c1e41 Iustin Pop
opSummaryVal OpGroupEvacuate { opGroupName = s } = Just (fromNonEmpty s)
952 ad1c1e41 Iustin Pop
opSummaryVal OpBackupPrepare { opInstanceName = s } = Just s
953 ad1c1e41 Iustin Pop
opSummaryVal OpBackupExport { opInstanceName = s } = Just s
954 ad1c1e41 Iustin Pop
opSummaryVal OpBackupRemove { opInstanceName = s } = Just s
955 34af39e8 Jose A. Lopes
opSummaryVal OpTagsGet { opKind = s } = Just (show s)
956 ad1c1e41 Iustin Pop
opSummaryVal OpTagsSearch { opTagSearchPattern = s } = Just (fromNonEmpty s)
957 ad1c1e41 Iustin Pop
opSummaryVal OpTestDelay { opDelayDuration = d } = Just (show d)
958 ad1c1e41 Iustin Pop
opSummaryVal OpTestAllocator { opIallocator = s } =
959 ad1c1e41 Iustin Pop
  -- FIXME: Python doesn't handle None fields well, so we have behave the same
960 ad1c1e41 Iustin Pop
  Just $ maybe "None" fromNonEmpty s
961 ad1c1e41 Iustin Pop
opSummaryVal OpNetworkAdd { opNetworkName = s} = Just (fromNonEmpty s)
962 ad1c1e41 Iustin Pop
opSummaryVal OpNetworkRemove { opNetworkName = s} = Just (fromNonEmpty s)
963 ad1c1e41 Iustin Pop
opSummaryVal OpNetworkSetParams { opNetworkName = s} = Just (fromNonEmpty s)
964 ad1c1e41 Iustin Pop
opSummaryVal OpNetworkConnect { opNetworkName = s} = Just (fromNonEmpty s)
965 ad1c1e41 Iustin Pop
opSummaryVal OpNetworkDisconnect { opNetworkName = s} = Just (fromNonEmpty s)
966 ad1c1e41 Iustin Pop
opSummaryVal _ = Nothing
967 ad1c1e41 Iustin Pop
968 ad1c1e41 Iustin Pop
-- | Computes the summary of the opcode.
969 ad1c1e41 Iustin Pop
opSummary :: OpCode -> String
970 ad1c1e41 Iustin Pop
opSummary op =
971 ad1c1e41 Iustin Pop
  case opSummaryVal op of
972 ad1c1e41 Iustin Pop
    Nothing -> op_suffix
973 ad1c1e41 Iustin Pop
    Just s -> op_suffix ++ "(" ++ s ++ ")"
974 ad1c1e41 Iustin Pop
  where op_suffix = drop 3 $ opID op
975 ad1c1e41 Iustin Pop
976 4a826364 Iustin Pop
-- | Generic\/common opcode parameters.
977 4a826364 Iustin Pop
$(buildObject "CommonOpParams" "op"
978 4a826364 Iustin Pop
  [ pDryRun
979 4a826364 Iustin Pop
  , pDebugLevel
980 4a826364 Iustin Pop
  , pOpPriority
981 4a826364 Iustin Pop
  , pDependencies
982 4a826364 Iustin Pop
  , pComment
983 516a0e94 Michele Tartara
  , pReason
984 4a826364 Iustin Pop
  ])
985 4a826364 Iustin Pop
986 4a826364 Iustin Pop
-- | Default common parameter values.
987 4a826364 Iustin Pop
defOpParams :: CommonOpParams
988 4a826364 Iustin Pop
defOpParams =
989 4a826364 Iustin Pop
  CommonOpParams { opDryRun     = Nothing
990 4a826364 Iustin Pop
                 , opDebugLevel = Nothing
991 4a826364 Iustin Pop
                 , opPriority   = OpPrioNormal
992 4a826364 Iustin Pop
                 , opDepends    = Nothing
993 4a826364 Iustin Pop
                 , opComment    = Nothing
994 516a0e94 Michele Tartara
                 , opReason     = []
995 4a826364 Iustin Pop
                 }
996 4a826364 Iustin Pop
997 62933497 Klaus Aehlig
-- | Resolve relative dependencies to absolute ones, given the job ID.
998 62933497 Klaus Aehlig
resolveDependsCommon :: (Monad m) => CommonOpParams -> JobId -> m CommonOpParams
999 62933497 Klaus Aehlig
resolveDependsCommon p@(CommonOpParams { opDepends = Just deps}) jid = do
1000 62933497 Klaus Aehlig
  deps' <- mapM (`absoluteJobDependency` jid) deps
1001 62933497 Klaus Aehlig
  return p { opDepends = Just deps' }
1002 62933497 Klaus Aehlig
resolveDependsCommon p _ = return p
1003 62933497 Klaus Aehlig
1004 4a826364 Iustin Pop
-- | The top-level opcode type.
1005 ad1c1e41 Iustin Pop
data MetaOpCode = MetaOpCode { metaParams :: CommonOpParams
1006 ad1c1e41 Iustin Pop
                             , metaOpCode :: OpCode
1007 ad1c1e41 Iustin Pop
                             } deriving (Show, Eq)
1008 4a826364 Iustin Pop
1009 62933497 Klaus Aehlig
-- | Resolve relative dependencies to absolute ones, given the job Id.
1010 62933497 Klaus Aehlig
resolveDependencies :: (Monad m) => MetaOpCode -> JobId -> m MetaOpCode
1011 62933497 Klaus Aehlig
resolveDependencies mopc jid = do
1012 62933497 Klaus Aehlig
  mpar <- resolveDependsCommon (metaParams mopc) jid
1013 62933497 Klaus Aehlig
  return (mopc { metaParams = mpar })
1014 62933497 Klaus Aehlig
1015 4a826364 Iustin Pop
-- | JSON serialisation for 'MetaOpCode'.
1016 4a826364 Iustin Pop
showMeta :: MetaOpCode -> JSValue
1017 4a826364 Iustin Pop
showMeta (MetaOpCode params op) =
1018 4a826364 Iustin Pop
  let objparams = toDictCommonOpParams params
1019 4a826364 Iustin Pop
      objop = toDictOpCode op
1020 4a826364 Iustin Pop
  in makeObj (objparams ++ objop)
1021 4a826364 Iustin Pop
1022 4a826364 Iustin Pop
-- | JSON deserialisation for 'MetaOpCode'
1023 4a826364 Iustin Pop
readMeta :: JSValue -> Text.JSON.Result MetaOpCode
1024 4a826364 Iustin Pop
readMeta v = do
1025 4a826364 Iustin Pop
  meta <- readJSON v
1026 4a826364 Iustin Pop
  op <- readJSON v
1027 4a826364 Iustin Pop
  return $ MetaOpCode meta op
1028 4a826364 Iustin Pop
1029 4a826364 Iustin Pop
instance JSON MetaOpCode where
1030 4a826364 Iustin Pop
  showJSON = showMeta
1031 4a826364 Iustin Pop
  readJSON = readMeta
1032 4a826364 Iustin Pop
1033 4a826364 Iustin Pop
-- | Wraps an 'OpCode' with the default parameters to build a
1034 4a826364 Iustin Pop
-- 'MetaOpCode'.
1035 4a826364 Iustin Pop
wrapOpCode :: OpCode -> MetaOpCode
1036 4a826364 Iustin Pop
wrapOpCode = MetaOpCode defOpParams
1037 4a826364 Iustin Pop
1038 4a826364 Iustin Pop
-- | Sets the comment on a meta opcode.
1039 4a826364 Iustin Pop
setOpComment :: String -> MetaOpCode -> MetaOpCode
1040 4a826364 Iustin Pop
setOpComment comment (MetaOpCode common op) =
1041 4a826364 Iustin Pop
  MetaOpCode (common { opComment = Just comment}) op
1042 551b44e2 Iustin Pop
1043 551b44e2 Iustin Pop
-- | Sets the priority on a meta opcode.
1044 551b44e2 Iustin Pop
setOpPriority :: OpSubmitPriority -> MetaOpCode -> MetaOpCode
1045 551b44e2 Iustin Pop
setOpPriority prio (MetaOpCode common op) =
1046 551b44e2 Iustin Pop
  MetaOpCode (common { opPriority = prio }) op