Statistics
| Branch: | Tag: | Revision:

root / htools / Ganeti / OpCodes.hs @ d45a824b

History | View | Annotate | Download (16.4 kB)

1 e9aaa3c6 Iustin Pop
{-# LANGUAGE TemplateHaskell #-}
2 e9aaa3c6 Iustin Pop
3 702a4ee0 Iustin Pop
{-| Implementation of the opcodes.
4 702a4ee0 Iustin Pop
5 702a4ee0 Iustin Pop
-}
6 702a4ee0 Iustin Pop
7 702a4ee0 Iustin Pop
{-
8 702a4ee0 Iustin Pop
9 a583ec5d Iustin Pop
Copyright (C) 2009, 2010, 2011, 2012 Google Inc.
10 702a4ee0 Iustin Pop
11 702a4ee0 Iustin Pop
This program is free software; you can redistribute it and/or modify
12 702a4ee0 Iustin Pop
it under the terms of the GNU General Public License as published by
13 702a4ee0 Iustin Pop
the Free Software Foundation; either version 2 of the License, or
14 702a4ee0 Iustin Pop
(at your option) any later version.
15 702a4ee0 Iustin Pop
16 702a4ee0 Iustin Pop
This program is distributed in the hope that it will be useful, but
17 702a4ee0 Iustin Pop
WITHOUT ANY WARRANTY; without even the implied warranty of
18 702a4ee0 Iustin Pop
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19 702a4ee0 Iustin Pop
General Public License for more details.
20 702a4ee0 Iustin Pop
21 702a4ee0 Iustin Pop
You should have received a copy of the GNU General Public License
22 702a4ee0 Iustin Pop
along with this program; if not, write to the Free Software
23 702a4ee0 Iustin Pop
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
24 702a4ee0 Iustin Pop
02110-1301, USA.
25 702a4ee0 Iustin Pop
26 702a4ee0 Iustin Pop
-}
27 702a4ee0 Iustin Pop
28 702a4ee0 Iustin Pop
module Ganeti.OpCodes
29 ebf38064 Iustin Pop
  ( OpCode(..)
30 367c4241 Dato Simó
  , TagObject(..)
31 d8e7c45e Iustin Pop
  , tagObjectFrom
32 d8e7c45e Iustin Pop
  , encodeTagObject
33 d8e7c45e Iustin Pop
  , decodeTagObject
34 ebf38064 Iustin Pop
  , ReplaceDisksMode(..)
35 4a1dc2bf Iustin Pop
  , DiskIndex
36 4a1dc2bf Iustin Pop
  , mkDiskIndex
37 4a1dc2bf Iustin Pop
  , unDiskIndex
38 ebf38064 Iustin Pop
  , opID
39 a583ec5d Iustin Pop
  , allOpIDs
40 3929e782 Iustin Pop
  , allOpFields
41 ad1c1e41 Iustin Pop
  , opSummary
42 4a826364 Iustin Pop
  , CommonOpParams(..)
43 4a826364 Iustin Pop
  , defOpParams
44 4a826364 Iustin Pop
  , MetaOpCode(..)
45 4a826364 Iustin Pop
  , wrapOpCode
46 4a826364 Iustin Pop
  , setOpComment
47 ebf38064 Iustin Pop
  ) where
48 702a4ee0 Iustin Pop
49 ad1c1e41 Iustin Pop
import Data.Maybe (fromMaybe)
50 4a826364 Iustin Pop
import Text.JSON (readJSON, showJSON, JSON, JSValue, makeObj)
51 4a826364 Iustin Pop
import qualified Text.JSON
52 702a4ee0 Iustin Pop
53 12c19659 Iustin Pop
import Ganeti.THH
54 e9aaa3c6 Iustin Pop
55 92f51573 Iustin Pop
import Ganeti.OpParams
56 ad1c1e41 Iustin Pop
import Ganeti.Types (OpSubmitPriority(..), fromNonEmpty)
57 ad1c1e41 Iustin Pop
import Ganeti.Query.Language (queryTypeOpToRaw)
58 4a1dc2bf Iustin Pop
59 525bfb36 Iustin Pop
-- | OpCode representation.
60 525bfb36 Iustin Pop
--
61 3bebda52 Dato Simó
-- We only implement a subset of Ganeti opcodes: those which are actually used
62 3bebda52 Dato Simó
-- in the htools codebase.
63 12c19659 Iustin Pop
$(genOpCode "OpCode"
64 ebf38064 Iustin Pop
  [ ("OpTestDelay",
65 7d421386 Iustin Pop
     [ pDelayDuration
66 7d421386 Iustin Pop
     , pDelayOnMaster
67 7d421386 Iustin Pop
     , pDelayOnNodes
68 a451dae2 Iustin Pop
     , pDelayRepeat
69 ebf38064 Iustin Pop
     ])
70 ebf38064 Iustin Pop
  , ("OpInstanceReplaceDisks",
71 92f51573 Iustin Pop
     [ pInstanceName
72 3d7e87b8 Iustin Pop
     , pEarlyRelease
73 3d7e87b8 Iustin Pop
     , pIgnoreIpolicy
74 7d421386 Iustin Pop
     , pReplaceDisksMode
75 7d421386 Iustin Pop
     , pReplaceDisksList
76 3d7e87b8 Iustin Pop
     , pRemoteNode
77 c7d249d0 Iustin Pop
     , pIallocator
78 ebf38064 Iustin Pop
     ])
79 ebf38064 Iustin Pop
  , ("OpInstanceFailover",
80 92f51573 Iustin Pop
     [ pInstanceName
81 3d7e87b8 Iustin Pop
     , pShutdownTimeout
82 7d421386 Iustin Pop
     , pIgnoreConsistency
83 c7d249d0 Iustin Pop
     , pMigrationTargetNode
84 3d7e87b8 Iustin Pop
     , pIgnoreIpolicy
85 3d7e87b8 Iustin Pop
     , pIallocator
86 ebf38064 Iustin Pop
     ])
87 ebf38064 Iustin Pop
  , ("OpInstanceMigrate",
88 92f51573 Iustin Pop
     [ pInstanceName
89 3d7e87b8 Iustin Pop
     , pMigrationMode
90 f9556d33 Iustin Pop
     , pMigrationLive
91 3d7e87b8 Iustin Pop
     , pMigrationTargetNode
92 3d7e87b8 Iustin Pop
     , pAllowRuntimeChgs
93 3d7e87b8 Iustin Pop
     , pIgnoreIpolicy
94 7d421386 Iustin Pop
     , pMigrationCleanup
95 3d7e87b8 Iustin Pop
     , pIallocator
96 7d421386 Iustin Pop
     , pAllowFailover
97 ebf38064 Iustin Pop
     ])
98 a451dae2 Iustin Pop
  , ("OpTagsGet",
99 a451dae2 Iustin Pop
     [ pTagsObject
100 a451dae2 Iustin Pop
     , pUseLocking
101 a451dae2 Iustin Pop
     ])
102 a451dae2 Iustin Pop
  , ("OpTagsSearch",
103 a451dae2 Iustin Pop
     [ pTagSearchPattern ])
104 3bebda52 Dato Simó
  , ("OpTagsSet",
105 92f51573 Iustin Pop
     [ pTagsObject
106 92f51573 Iustin Pop
     , pTagsList
107 3bebda52 Dato Simó
     ])
108 3bebda52 Dato Simó
  , ("OpTagsDel",
109 92f51573 Iustin Pop
     [ pTagsObject
110 92f51573 Iustin Pop
     , pTagsList
111 3bebda52 Dato Simó
     ])
112 c66f09f5 Iustin Pop
  , ("OpClusterPostInit", [])
113 c66f09f5 Iustin Pop
  , ("OpClusterDestroy", [])
114 c66f09f5 Iustin Pop
  , ("OpClusterQuery", [])
115 c66f09f5 Iustin Pop
  , ("OpClusterVerify",
116 c66f09f5 Iustin Pop
     [ pDebugSimulateErrors
117 c66f09f5 Iustin Pop
     , pErrorCodes
118 c66f09f5 Iustin Pop
     , pSkipChecks
119 c66f09f5 Iustin Pop
     , pIgnoreErrors
120 c66f09f5 Iustin Pop
     , pVerbose
121 c66f09f5 Iustin Pop
     , pOptGroupName
122 c66f09f5 Iustin Pop
     ])
123 c66f09f5 Iustin Pop
  , ("OpClusterVerifyConfig",
124 c66f09f5 Iustin Pop
     [ pDebugSimulateErrors
125 c66f09f5 Iustin Pop
     , pErrorCodes
126 c66f09f5 Iustin Pop
     , pIgnoreErrors
127 c66f09f5 Iustin Pop
     , pVerbose
128 c66f09f5 Iustin Pop
     ])
129 c66f09f5 Iustin Pop
  , ("OpClusterVerifyGroup",
130 c66f09f5 Iustin Pop
     [ pGroupName
131 c66f09f5 Iustin Pop
     , pDebugSimulateErrors
132 c66f09f5 Iustin Pop
     , pErrorCodes
133 c66f09f5 Iustin Pop
     , pSkipChecks
134 c66f09f5 Iustin Pop
     , pIgnoreErrors
135 c66f09f5 Iustin Pop
     , pVerbose
136 c66f09f5 Iustin Pop
     ])
137 c66f09f5 Iustin Pop
  , ("OpClusterVerifyDisks", [])
138 c66f09f5 Iustin Pop
  , ("OpGroupVerifyDisks",
139 c66f09f5 Iustin Pop
     [ pGroupName
140 c66f09f5 Iustin Pop
     ])
141 c66f09f5 Iustin Pop
  , ("OpClusterRepairDiskSizes",
142 c66f09f5 Iustin Pop
     [ pInstances
143 c66f09f5 Iustin Pop
     ])
144 c66f09f5 Iustin Pop
  , ("OpClusterConfigQuery",
145 c66f09f5 Iustin Pop
     [ pOutputFields
146 c66f09f5 Iustin Pop
     ])
147 c66f09f5 Iustin Pop
  , ("OpClusterRename",
148 c66f09f5 Iustin Pop
     [ pName
149 c66f09f5 Iustin Pop
     ])
150 c66f09f5 Iustin Pop
  , ("OpClusterSetParams",
151 c66f09f5 Iustin Pop
     [ pHvState
152 c66f09f5 Iustin Pop
     , pDiskState
153 c66f09f5 Iustin Pop
     , pVgName
154 c66f09f5 Iustin Pop
     , pEnabledHypervisors
155 c66f09f5 Iustin Pop
     , pClusterHvParams
156 c66f09f5 Iustin Pop
     , pClusterBeParams
157 c66f09f5 Iustin Pop
     , pOsHvp
158 6d558717 Iustin Pop
     , pClusterOsParams
159 c66f09f5 Iustin Pop
     , pDiskParams
160 c66f09f5 Iustin Pop
     , pCandidatePoolSize
161 c66f09f5 Iustin Pop
     , pUidPool
162 c66f09f5 Iustin Pop
     , pAddUids
163 c66f09f5 Iustin Pop
     , pRemoveUids
164 c66f09f5 Iustin Pop
     , pMaintainNodeHealth
165 c66f09f5 Iustin Pop
     , pPreallocWipeDisks
166 c66f09f5 Iustin Pop
     , pNicParams
167 c66f09f5 Iustin Pop
     , pNdParams
168 c66f09f5 Iustin Pop
     , pIpolicy
169 c66f09f5 Iustin Pop
     , pDrbdHelper
170 c66f09f5 Iustin Pop
     , pDefaultIAllocator
171 c66f09f5 Iustin Pop
     , pMasterNetdev
172 67fc4de7 Iustin Pop
     , pMasterNetmask
173 c66f09f5 Iustin Pop
     , pReservedLvs
174 c66f09f5 Iustin Pop
     , pHiddenOs
175 c66f09f5 Iustin Pop
     , pBlacklistedOs
176 c66f09f5 Iustin Pop
     , pUseExternalMipScript
177 c66f09f5 Iustin Pop
     ])
178 c66f09f5 Iustin Pop
  , ("OpClusterRedistConf", [])
179 c66f09f5 Iustin Pop
  , ("OpClusterActivateMasterIp", [])
180 c66f09f5 Iustin Pop
  , ("OpClusterDeactivateMasterIp", [])
181 c66f09f5 Iustin Pop
  , ("OpQuery",
182 c66f09f5 Iustin Pop
     [ pQueryWhat
183 c66f09f5 Iustin Pop
     , pUseLocking
184 c66f09f5 Iustin Pop
     , pQueryFields
185 c66f09f5 Iustin Pop
     , pQueryFilter
186 c66f09f5 Iustin Pop
     ])
187 c66f09f5 Iustin Pop
  , ("OpQueryFields",
188 c66f09f5 Iustin Pop
     [ pQueryWhat
189 c66f09f5 Iustin Pop
     , pQueryFields
190 c66f09f5 Iustin Pop
     ])
191 c66f09f5 Iustin Pop
  , ("OpOobCommand",
192 c66f09f5 Iustin Pop
     [ pNodeNames
193 c66f09f5 Iustin Pop
     , pOobCommand
194 c66f09f5 Iustin Pop
     , pOobTimeout
195 c66f09f5 Iustin Pop
     , pIgnoreStatus
196 c66f09f5 Iustin Pop
     , pPowerDelay
197 c66f09f5 Iustin Pop
     ])
198 c66f09f5 Iustin Pop
  , ("OpNodeRemove", [ pNodeName ])
199 c66f09f5 Iustin Pop
  , ("OpNodeAdd",
200 c66f09f5 Iustin Pop
     [ pNodeName
201 c66f09f5 Iustin Pop
     , pHvState
202 c66f09f5 Iustin Pop
     , pDiskState
203 c66f09f5 Iustin Pop
     , pPrimaryIp
204 c66f09f5 Iustin Pop
     , pSecondaryIp
205 c66f09f5 Iustin Pop
     , pReadd
206 c66f09f5 Iustin Pop
     , pNodeGroup
207 c66f09f5 Iustin Pop
     , pMasterCapable
208 c66f09f5 Iustin Pop
     , pVmCapable
209 c66f09f5 Iustin Pop
     , pNdParams
210 c66f09f5 Iustin Pop
    ])
211 3131adc7 Iustin Pop
  , ("OpNodeQuery", dOldQuery)
212 c66f09f5 Iustin Pop
  , ("OpNodeQueryvols",
213 c66f09f5 Iustin Pop
     [ pOutputFields
214 c66f09f5 Iustin Pop
     , pNodes
215 c66f09f5 Iustin Pop
     ])
216 c66f09f5 Iustin Pop
  , ("OpNodeQueryStorage",
217 c66f09f5 Iustin Pop
     [ pOutputFields
218 c66f09f5 Iustin Pop
     , pStorageType
219 c66f09f5 Iustin Pop
     , pNodes
220 c66f09f5 Iustin Pop
     , pStorageName
221 c66f09f5 Iustin Pop
     ])
222 c66f09f5 Iustin Pop
  , ("OpNodeModifyStorage",
223 c66f09f5 Iustin Pop
     [ pNodeName
224 c66f09f5 Iustin Pop
     , pStorageType
225 c66f09f5 Iustin Pop
     , pStorageName
226 c66f09f5 Iustin Pop
     , pStorageChanges
227 c66f09f5 Iustin Pop
     ])
228 c66f09f5 Iustin Pop
  , ("OpRepairNodeStorage",
229 c66f09f5 Iustin Pop
     [ pNodeName
230 c66f09f5 Iustin Pop
     , pStorageType
231 c66f09f5 Iustin Pop
     , pStorageName
232 c66f09f5 Iustin Pop
     , pIgnoreConsistency
233 c66f09f5 Iustin Pop
     ])
234 c66f09f5 Iustin Pop
  , ("OpNodeSetParams",
235 c66f09f5 Iustin Pop
     [ pNodeName
236 c66f09f5 Iustin Pop
     , pForce
237 c66f09f5 Iustin Pop
     , pHvState
238 c66f09f5 Iustin Pop
     , pDiskState
239 c66f09f5 Iustin Pop
     , pMasterCandidate
240 c66f09f5 Iustin Pop
     , pOffline
241 c66f09f5 Iustin Pop
     , pDrained
242 c66f09f5 Iustin Pop
     , pAutoPromote
243 c66f09f5 Iustin Pop
     , pMasterCapable
244 c66f09f5 Iustin Pop
     , pVmCapable
245 c66f09f5 Iustin Pop
     , pSecondaryIp
246 c66f09f5 Iustin Pop
     , pNdParams
247 67fc4de7 Iustin Pop
     , pPowered
248 c66f09f5 Iustin Pop
     ])
249 c66f09f5 Iustin Pop
  , ("OpNodePowercycle",
250 c66f09f5 Iustin Pop
     [ pNodeName
251 c66f09f5 Iustin Pop
     , pForce
252 c66f09f5 Iustin Pop
     ])
253 c66f09f5 Iustin Pop
  , ("OpNodeMigrate",
254 c66f09f5 Iustin Pop
     [ pNodeName
255 c66f09f5 Iustin Pop
     , pMigrationMode
256 c66f09f5 Iustin Pop
     , pMigrationLive
257 c66f09f5 Iustin Pop
     , pMigrationTargetNode
258 c66f09f5 Iustin Pop
     , pAllowRuntimeChgs
259 c66f09f5 Iustin Pop
     , pIgnoreIpolicy
260 c66f09f5 Iustin Pop
     , pIallocator
261 c66f09f5 Iustin Pop
     ])
262 c66f09f5 Iustin Pop
  , ("OpNodeEvacuate",
263 c66f09f5 Iustin Pop
     [ pEarlyRelease
264 c66f09f5 Iustin Pop
     , pNodeName
265 c66f09f5 Iustin Pop
     , pRemoteNode
266 c66f09f5 Iustin Pop
     , pIallocator
267 c66f09f5 Iustin Pop
     , pEvacMode
268 c66f09f5 Iustin Pop
     ])
269 6d558717 Iustin Pop
  , ("OpInstanceCreate",
270 6d558717 Iustin Pop
     [ pInstanceName
271 6d558717 Iustin Pop
     , pForceVariant
272 6d558717 Iustin Pop
     , pWaitForSync
273 6d558717 Iustin Pop
     , pNameCheck
274 6d558717 Iustin Pop
     , pIgnoreIpolicy
275 6d558717 Iustin Pop
     , pInstBeParams
276 6d558717 Iustin Pop
     , pInstDisks
277 6d558717 Iustin Pop
     , pDiskTemplate
278 6d558717 Iustin Pop
     , pFileDriver
279 6d558717 Iustin Pop
     , pFileStorageDir
280 6d558717 Iustin Pop
     , pInstHvParams
281 6d558717 Iustin Pop
     , pHypervisor
282 6d558717 Iustin Pop
     , pIallocator
283 6d558717 Iustin Pop
     , pResetDefaults
284 6d558717 Iustin Pop
     , pIpCheck
285 6d558717 Iustin Pop
     , pIpConflictsCheck
286 6d558717 Iustin Pop
     , pInstCreateMode
287 6d558717 Iustin Pop
     , pInstNics
288 6d558717 Iustin Pop
     , pNoInstall
289 6d558717 Iustin Pop
     , pInstOsParams
290 6d558717 Iustin Pop
     , pInstOs
291 6d558717 Iustin Pop
     , pPrimaryNode
292 6d558717 Iustin Pop
     , pSecondaryNode
293 6d558717 Iustin Pop
     , pSourceHandshake
294 6d558717 Iustin Pop
     , pSourceInstance
295 6d558717 Iustin Pop
     , pSourceShutdownTimeout
296 6d558717 Iustin Pop
     , pSourceX509Ca
297 6d558717 Iustin Pop
     , pSrcNode
298 6d558717 Iustin Pop
     , pSrcPath
299 6d558717 Iustin Pop
     , pStartInstance
300 1f1188c3 Michael Hanselmann
     , pOpportunisticLocking
301 6d558717 Iustin Pop
     , pInstTags
302 6d558717 Iustin Pop
     ])
303 c2d3219b Iustin Pop
  , ("OpInstanceMultiAlloc",
304 c2d3219b Iustin Pop
     [ pIallocator
305 c2d3219b Iustin Pop
     , pMultiAllocInstances
306 c298ed02 Michael Hanselmann
     , pOpportunisticLocking
307 c2d3219b Iustin Pop
     ])
308 c2d3219b Iustin Pop
  , ("OpInstanceReinstall",
309 c2d3219b Iustin Pop
     [ pInstanceName
310 c2d3219b Iustin Pop
     , pForceVariant
311 c2d3219b Iustin Pop
     , pInstOs
312 c2d3219b Iustin Pop
     , pTempOsParams
313 c2d3219b Iustin Pop
     ])
314 c2d3219b Iustin Pop
  , ("OpInstanceRemove",
315 c2d3219b Iustin Pop
     [ pInstanceName
316 c2d3219b Iustin Pop
     , pShutdownTimeout
317 c2d3219b Iustin Pop
     , pIgnoreFailures
318 c2d3219b Iustin Pop
     ])
319 c2d3219b Iustin Pop
  , ("OpInstanceRename",
320 c2d3219b Iustin Pop
     [ pInstanceName
321 c2d3219b Iustin Pop
     , pNewName
322 c2d3219b Iustin Pop
     , pNameCheck
323 c2d3219b Iustin Pop
     , pIpCheck
324 c2d3219b Iustin Pop
     ])
325 c2d3219b Iustin Pop
  , ("OpInstanceStartup",
326 c2d3219b Iustin Pop
     [ pInstanceName
327 c2d3219b Iustin Pop
     , pForce
328 c2d3219b Iustin Pop
     , pIgnoreOfflineNodes
329 c2d3219b Iustin Pop
     , pTempHvParams
330 c2d3219b Iustin Pop
     , pTempBeParams
331 c2d3219b Iustin Pop
     , pNoRemember
332 c2d3219b Iustin Pop
     , pStartupPaused
333 c2d3219b Iustin Pop
     ])
334 c2d3219b Iustin Pop
  , ("OpInstanceShutdown",
335 c2d3219b Iustin Pop
     [ pInstanceName
336 0d57ce24 Guido Trotter
     , pForce
337 c2d3219b Iustin Pop
     , pIgnoreOfflineNodes
338 c2d3219b Iustin Pop
     , pShutdownTimeout'
339 c2d3219b Iustin Pop
     , pNoRemember
340 c2d3219b Iustin Pop
     ])
341 c2d3219b Iustin Pop
  , ("OpInstanceReboot",
342 c2d3219b Iustin Pop
     [ pInstanceName
343 c2d3219b Iustin Pop
     , pShutdownTimeout
344 c2d3219b Iustin Pop
     , pIgnoreSecondaries
345 c2d3219b Iustin Pop
     , pRebootType
346 c2d3219b Iustin Pop
     ])
347 c2d3219b Iustin Pop
  , ("OpInstanceMove",
348 c2d3219b Iustin Pop
     [ pInstanceName
349 c2d3219b Iustin Pop
     , pShutdownTimeout
350 c2d3219b Iustin Pop
     , pIgnoreIpolicy
351 c2d3219b Iustin Pop
     , pMoveTargetNode
352 c2d3219b Iustin Pop
     , pIgnoreConsistency
353 c2d3219b Iustin Pop
     ])
354 c2d3219b Iustin Pop
  , ("OpInstanceConsole",
355 c2d3219b Iustin Pop
     [ pInstanceName ])
356 c2d3219b Iustin Pop
  , ("OpInstanceActivateDisks",
357 c2d3219b Iustin Pop
     [ pInstanceName
358 c2d3219b Iustin Pop
     , pIgnoreDiskSize
359 c2d3219b Iustin Pop
     , pWaitForSyncFalse
360 c2d3219b Iustin Pop
     ])
361 c2d3219b Iustin Pop
  , ("OpInstanceDeactivateDisks",
362 c2d3219b Iustin Pop
     [ pInstanceName
363 c2d3219b Iustin Pop
     , pForce
364 c2d3219b Iustin Pop
     ])
365 c2d3219b Iustin Pop
  , ("OpInstanceRecreateDisks",
366 c2d3219b Iustin Pop
     [ pInstanceName
367 c2d3219b Iustin Pop
     , pRecreateDisksInfo
368 c2d3219b Iustin Pop
     , pNodes
369 c2d3219b Iustin Pop
     , pIallocator
370 c2d3219b Iustin Pop
     ])
371 3131adc7 Iustin Pop
  , ("OpInstanceQuery", dOldQuery)
372 c2d3219b Iustin Pop
  , ("OpInstanceQueryData",
373 c2d3219b Iustin Pop
     [ pUseLocking
374 c2d3219b Iustin Pop
     , pInstances
375 c2d3219b Iustin Pop
     , pStatic
376 c2d3219b Iustin Pop
     ])
377 c2d3219b Iustin Pop
  , ("OpInstanceSetParams",
378 c2d3219b Iustin Pop
     [ pInstanceName
379 c2d3219b Iustin Pop
     , pForce
380 c2d3219b Iustin Pop
     , pForceVariant
381 c2d3219b Iustin Pop
     , pIgnoreIpolicy
382 c2d3219b Iustin Pop
     , pInstParamsNicChanges
383 c2d3219b Iustin Pop
     , pInstParamsDiskChanges
384 c2d3219b Iustin Pop
     , pInstBeParams
385 c2d3219b Iustin Pop
     , pRuntimeMem
386 c2d3219b Iustin Pop
     , pInstHvParams
387 88127c47 Iustin Pop
     , pOptDiskTemplate
388 c2d3219b Iustin Pop
     , pRemoteNode
389 c2d3219b Iustin Pop
     , pOsNameChange
390 c2d3219b Iustin Pop
     , pInstOsParams
391 c2d3219b Iustin Pop
     , pWaitForSync
392 c2d3219b Iustin Pop
     , pOffline
393 c2d3219b Iustin Pop
     , pIpConflictsCheck
394 c2d3219b Iustin Pop
     ])
395 c2d3219b Iustin Pop
  , ("OpInstanceGrowDisk",
396 c2d3219b Iustin Pop
     [ pInstanceName
397 c2d3219b Iustin Pop
     , pWaitForSync
398 c2d3219b Iustin Pop
     , pDiskIndex
399 c2d3219b Iustin Pop
     , pDiskChgAmount
400 c2d3219b Iustin Pop
     , pDiskChgAbsolute
401 c2d3219b Iustin Pop
     ])
402 c2d3219b Iustin Pop
  , ("OpInstanceChangeGroup",
403 c2d3219b Iustin Pop
     [ pInstanceName
404 c2d3219b Iustin Pop
     , pEarlyRelease
405 c2d3219b Iustin Pop
     , pIallocator
406 c2d3219b Iustin Pop
     , pTargetGroups
407 c2d3219b Iustin Pop
     ])
408 398e9066 Iustin Pop
  , ("OpGroupAdd",
409 398e9066 Iustin Pop
     [ pGroupName
410 398e9066 Iustin Pop
     , pNodeGroupAllocPolicy
411 398e9066 Iustin Pop
     , pGroupNodeParams
412 398e9066 Iustin Pop
     , pDiskParams
413 398e9066 Iustin Pop
     , pHvState
414 398e9066 Iustin Pop
     , pDiskState
415 398e9066 Iustin Pop
     , pIpolicy
416 398e9066 Iustin Pop
     ])
417 398e9066 Iustin Pop
  , ("OpGroupAssignNodes",
418 398e9066 Iustin Pop
     [ pGroupName
419 398e9066 Iustin Pop
     , pForce
420 398e9066 Iustin Pop
     , pRequiredNodes
421 398e9066 Iustin Pop
     ])
422 3131adc7 Iustin Pop
  , ("OpGroupQuery", dOldQueryNoLocking)
423 398e9066 Iustin Pop
  , ("OpGroupSetParams",
424 398e9066 Iustin Pop
     [ pGroupName
425 398e9066 Iustin Pop
     , pNodeGroupAllocPolicy
426 398e9066 Iustin Pop
     , pGroupNodeParams
427 398e9066 Iustin Pop
     , pDiskParams
428 398e9066 Iustin Pop
     , pHvState
429 398e9066 Iustin Pop
     , pDiskState
430 398e9066 Iustin Pop
     , pIpolicy
431 398e9066 Iustin Pop
     ])
432 398e9066 Iustin Pop
  , ("OpGroupRemove",
433 398e9066 Iustin Pop
     [ pGroupName ])
434 398e9066 Iustin Pop
  , ("OpGroupRename",
435 398e9066 Iustin Pop
     [ pGroupName
436 398e9066 Iustin Pop
     , pNewName
437 398e9066 Iustin Pop
     ])
438 398e9066 Iustin Pop
  , ("OpGroupEvacuate",
439 398e9066 Iustin Pop
     [ pGroupName
440 398e9066 Iustin Pop
     , pEarlyRelease
441 398e9066 Iustin Pop
     , pIallocator
442 398e9066 Iustin Pop
     , pTargetGroups
443 398e9066 Iustin Pop
     ])
444 398e9066 Iustin Pop
  , ("OpOsDiagnose",
445 398e9066 Iustin Pop
     [ pOutputFields
446 398e9066 Iustin Pop
     , pNames ])
447 398e9066 Iustin Pop
  , ("OpBackupQuery",
448 398e9066 Iustin Pop
     [ pUseLocking
449 398e9066 Iustin Pop
     , pNodes
450 398e9066 Iustin Pop
     ])
451 398e9066 Iustin Pop
  , ("OpBackupPrepare",
452 398e9066 Iustin Pop
     [ pInstanceName
453 398e9066 Iustin Pop
     , pExportMode
454 398e9066 Iustin Pop
     ])
455 398e9066 Iustin Pop
  , ("OpBackupExport",
456 398e9066 Iustin Pop
     [ pInstanceName
457 398e9066 Iustin Pop
     , pShutdownTimeout
458 398e9066 Iustin Pop
     , pExportTargetNode
459 67fc4de7 Iustin Pop
     , pShutdownInstance
460 398e9066 Iustin Pop
     , pRemoveInstance
461 398e9066 Iustin Pop
     , pIgnoreRemoveFailures
462 398e9066 Iustin Pop
     , pExportMode
463 398e9066 Iustin Pop
     , pX509KeyName
464 398e9066 Iustin Pop
     , pX509DestCA
465 398e9066 Iustin Pop
     ])
466 398e9066 Iustin Pop
  , ("OpBackupRemove",
467 398e9066 Iustin Pop
     [ pInstanceName ])
468 a3f02317 Iustin Pop
  , ("OpTestAllocator",
469 a3f02317 Iustin Pop
     [ pIAllocatorDirection
470 a3f02317 Iustin Pop
     , pIAllocatorMode
471 a3f02317 Iustin Pop
     , pIAllocatorReqName
472 a3f02317 Iustin Pop
     , pIAllocatorNics
473 a3f02317 Iustin Pop
     , pIAllocatorDisks
474 a3f02317 Iustin Pop
     , pHypervisor
475 a3f02317 Iustin Pop
     , pIallocator
476 a3f02317 Iustin Pop
     , pInstTags
477 a3f02317 Iustin Pop
     , pIAllocatorMemory
478 a3f02317 Iustin Pop
     , pIAllocatorVCpus
479 a3f02317 Iustin Pop
     , pIAllocatorOs
480 a3f02317 Iustin Pop
     , pDiskTemplate
481 a3f02317 Iustin Pop
     , pIAllocatorInstances
482 a3f02317 Iustin Pop
     , pIAllocatorEvacMode
483 a3f02317 Iustin Pop
     , pTargetGroups
484 a3f02317 Iustin Pop
     , pIAllocatorSpindleUse
485 a3f02317 Iustin Pop
     , pIAllocatorCount
486 a3f02317 Iustin Pop
     ])
487 a3f02317 Iustin Pop
  , ("OpTestJqueue",
488 a3f02317 Iustin Pop
     [ pJQueueNotifyWaitLock
489 a3f02317 Iustin Pop
     , pJQueueNotifyExec
490 a3f02317 Iustin Pop
     , pJQueueLogMessages
491 a3f02317 Iustin Pop
     , pJQueueFail
492 a3f02317 Iustin Pop
     ])
493 a3f02317 Iustin Pop
  , ("OpTestDummy",
494 a3f02317 Iustin Pop
     [ pTestDummyResult
495 a3f02317 Iustin Pop
     , pTestDummyMessages
496 a3f02317 Iustin Pop
     , pTestDummyFail
497 a3f02317 Iustin Pop
     , pTestDummySubmitJobs
498 a3f02317 Iustin Pop
     ])
499 8d239fa4 Iustin Pop
  , ("OpNetworkAdd",
500 8d239fa4 Iustin Pop
     [ pNetworkName
501 8d239fa4 Iustin Pop
     , pNetworkType
502 8d239fa4 Iustin Pop
     , pNetworkAddress4
503 8d239fa4 Iustin Pop
     , pNetworkGateway4
504 8d239fa4 Iustin Pop
     , pNetworkAddress6
505 8d239fa4 Iustin Pop
     , pNetworkGateway6
506 8d239fa4 Iustin Pop
     , pNetworkMacPrefix
507 8d239fa4 Iustin Pop
     , pNetworkAddRsvdIps
508 1dbceab9 Iustin Pop
     , pIpConflictsCheck
509 8d239fa4 Iustin Pop
     , pInstTags
510 8d239fa4 Iustin Pop
     ])
511 8d239fa4 Iustin Pop
  , ("OpNetworkRemove",
512 8d239fa4 Iustin Pop
     [ pNetworkName
513 8d239fa4 Iustin Pop
     , pForce
514 8d239fa4 Iustin Pop
     ])
515 8d239fa4 Iustin Pop
  , ("OpNetworkSetParams",
516 8d239fa4 Iustin Pop
     [ pNetworkName
517 8d239fa4 Iustin Pop
     , pNetworkType
518 8d239fa4 Iustin Pop
     , pNetworkGateway4
519 8d239fa4 Iustin Pop
     , pNetworkAddress6
520 8d239fa4 Iustin Pop
     , pNetworkGateway6
521 8d239fa4 Iustin Pop
     , pNetworkMacPrefix
522 8d239fa4 Iustin Pop
     , pNetworkAddRsvdIps
523 8d239fa4 Iustin Pop
     , pNetworkRemoveRsvdIps
524 8d239fa4 Iustin Pop
     ])
525 8d239fa4 Iustin Pop
  , ("OpNetworkConnect",
526 8d239fa4 Iustin Pop
     [ pGroupName
527 8d239fa4 Iustin Pop
     , pNetworkName
528 8d239fa4 Iustin Pop
     , pNetworkMode
529 8d239fa4 Iustin Pop
     , pNetworkLink
530 8d239fa4 Iustin Pop
     , pIpConflictsCheck
531 8d239fa4 Iustin Pop
     ])
532 8d239fa4 Iustin Pop
  , ("OpNetworkDisconnect",
533 8d239fa4 Iustin Pop
     [ pGroupName
534 8d239fa4 Iustin Pop
     , pNetworkName
535 8d239fa4 Iustin Pop
     , pIpConflictsCheck
536 8d239fa4 Iustin Pop
     ])
537 3131adc7 Iustin Pop
  , ("OpNetworkQuery", dOldQueryNoLocking)
538 1cd563e2 Iustin Pop
  , ("OpRestrictedCommand",
539 1cd563e2 Iustin Pop
     [ pUseLocking
540 1cd563e2 Iustin Pop
     , pRequiredNodes
541 1cd563e2 Iustin Pop
     , pRestrictedCommand
542 1cd563e2 Iustin Pop
     ])
543 ebf38064 Iustin Pop
  ])
544 12c19659 Iustin Pop
545 a583ec5d Iustin Pop
-- | Returns the OP_ID for a given opcode value.
546 12c19659 Iustin Pop
$(genOpID ''OpCode "opID")
547 702a4ee0 Iustin Pop
548 a583ec5d Iustin Pop
-- | A list of all defined/supported opcode IDs.
549 a583ec5d Iustin Pop
$(genAllOpIDs ''OpCode "allOpIDs")
550 a583ec5d Iustin Pop
551 702a4ee0 Iustin Pop
instance JSON OpCode where
552 ebf38064 Iustin Pop
  readJSON = loadOpCode
553 ebf38064 Iustin Pop
  showJSON = saveOpCode
554 4a826364 Iustin Pop
555 ad1c1e41 Iustin Pop
-- | Generates the summary value for an opcode.
556 ad1c1e41 Iustin Pop
opSummaryVal :: OpCode -> Maybe String
557 ad1c1e41 Iustin Pop
opSummaryVal OpClusterVerifyGroup { opGroupName = s } = Just (fromNonEmpty s)
558 ad1c1e41 Iustin Pop
opSummaryVal OpGroupVerifyDisks { opGroupName = s } = Just (fromNonEmpty s)
559 ad1c1e41 Iustin Pop
opSummaryVal OpClusterRename { opName = s } = Just (fromNonEmpty s)
560 ad1c1e41 Iustin Pop
opSummaryVal OpQuery { opWhat = s } = Just (queryTypeOpToRaw s)
561 ad1c1e41 Iustin Pop
opSummaryVal OpQueryFields { opWhat = s } = Just (queryTypeOpToRaw s)
562 ad1c1e41 Iustin Pop
opSummaryVal OpNodeRemove { opNodeName = s } = Just (fromNonEmpty s)
563 ad1c1e41 Iustin Pop
opSummaryVal OpNodeAdd { opNodeName = s } = Just (fromNonEmpty s)
564 ad1c1e41 Iustin Pop
opSummaryVal OpNodeModifyStorage { opNodeName = s } = Just (fromNonEmpty s)
565 ad1c1e41 Iustin Pop
opSummaryVal OpRepairNodeStorage  { opNodeName = s } = Just (fromNonEmpty s)
566 ad1c1e41 Iustin Pop
opSummaryVal OpNodeSetParams { opNodeName = s } = Just (fromNonEmpty s)
567 ad1c1e41 Iustin Pop
opSummaryVal OpNodePowercycle { opNodeName = s } = Just (fromNonEmpty s)
568 ad1c1e41 Iustin Pop
opSummaryVal OpNodeMigrate { opNodeName = s } = Just (fromNonEmpty s)
569 ad1c1e41 Iustin Pop
opSummaryVal OpNodeEvacuate { opNodeName = s } = Just (fromNonEmpty s)
570 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceCreate { opInstanceName = s } = Just s
571 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceReinstall { opInstanceName = s } = Just s
572 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceRemove { opInstanceName = s } = Just s
573 ad1c1e41 Iustin Pop
-- FIXME: instance rename should show both names; currently it shows none
574 ad1c1e41 Iustin Pop
-- opSummaryVal OpInstanceRename { opInstanceName = s } = Just s
575 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceStartup { opInstanceName = s } = Just s
576 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceShutdown { opInstanceName = s } = Just s
577 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceReboot { opInstanceName = s } = Just s
578 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceReplaceDisks { opInstanceName = s } = Just s
579 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceFailover { opInstanceName = s } = Just s
580 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceMigrate { opInstanceName = s } = Just s
581 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceMove { opInstanceName = s } = Just s
582 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceConsole { opInstanceName = s } = Just s
583 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceActivateDisks { opInstanceName = s } = Just s
584 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceDeactivateDisks { opInstanceName = s } = Just s
585 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceRecreateDisks { opInstanceName = s } = Just s
586 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceSetParams { opInstanceName = s } = Just s
587 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceGrowDisk { opInstanceName = s } = Just s
588 ad1c1e41 Iustin Pop
opSummaryVal OpInstanceChangeGroup { opInstanceName = s } = Just s
589 ad1c1e41 Iustin Pop
opSummaryVal OpGroupAdd { opGroupName = s } = Just (fromNonEmpty s)
590 ad1c1e41 Iustin Pop
opSummaryVal OpGroupAssignNodes { opGroupName = s } = Just (fromNonEmpty s)
591 ad1c1e41 Iustin Pop
opSummaryVal OpGroupSetParams { opGroupName = s } = Just (fromNonEmpty s)
592 ad1c1e41 Iustin Pop
opSummaryVal OpGroupRemove { opGroupName = s } = Just (fromNonEmpty s)
593 ad1c1e41 Iustin Pop
opSummaryVal OpGroupEvacuate { opGroupName = s } = Just (fromNonEmpty s)
594 ad1c1e41 Iustin Pop
opSummaryVal OpBackupPrepare { opInstanceName = s } = Just s
595 ad1c1e41 Iustin Pop
opSummaryVal OpBackupExport { opInstanceName = s } = Just s
596 ad1c1e41 Iustin Pop
opSummaryVal OpBackupRemove { opInstanceName = s } = Just s
597 ad1c1e41 Iustin Pop
opSummaryVal OpTagsGet { opKind = k } =
598 ad1c1e41 Iustin Pop
  Just . fromMaybe "None" $ tagNameOf k
599 ad1c1e41 Iustin Pop
opSummaryVal OpTagsSearch { opTagSearchPattern = s } = Just (fromNonEmpty s)
600 ad1c1e41 Iustin Pop
opSummaryVal OpTestDelay { opDelayDuration = d } = Just (show d)
601 ad1c1e41 Iustin Pop
opSummaryVal OpTestAllocator { opIallocator = s } =
602 ad1c1e41 Iustin Pop
  -- FIXME: Python doesn't handle None fields well, so we have behave the same
603 ad1c1e41 Iustin Pop
  Just $ maybe "None" fromNonEmpty s
604 ad1c1e41 Iustin Pop
opSummaryVal OpNetworkAdd { opNetworkName = s} = Just (fromNonEmpty s)
605 ad1c1e41 Iustin Pop
opSummaryVal OpNetworkRemove { opNetworkName = s} = Just (fromNonEmpty s)
606 ad1c1e41 Iustin Pop
opSummaryVal OpNetworkSetParams { opNetworkName = s} = Just (fromNonEmpty s)
607 ad1c1e41 Iustin Pop
opSummaryVal OpNetworkConnect { opNetworkName = s} = Just (fromNonEmpty s)
608 ad1c1e41 Iustin Pop
opSummaryVal OpNetworkDisconnect { opNetworkName = s} = Just (fromNonEmpty s)
609 ad1c1e41 Iustin Pop
opSummaryVal _ = Nothing
610 ad1c1e41 Iustin Pop
611 ad1c1e41 Iustin Pop
-- | Computes the summary of the opcode.
612 ad1c1e41 Iustin Pop
opSummary :: OpCode -> String
613 ad1c1e41 Iustin Pop
opSummary op =
614 ad1c1e41 Iustin Pop
  case opSummaryVal op of
615 ad1c1e41 Iustin Pop
    Nothing -> op_suffix
616 ad1c1e41 Iustin Pop
    Just s -> op_suffix ++ "(" ++ s ++ ")"
617 ad1c1e41 Iustin Pop
  where op_suffix = drop 3 $ opID op
618 ad1c1e41 Iustin Pop
619 4a826364 Iustin Pop
-- | Generic\/common opcode parameters.
620 4a826364 Iustin Pop
$(buildObject "CommonOpParams" "op"
621 4a826364 Iustin Pop
  [ pDryRun
622 4a826364 Iustin Pop
  , pDebugLevel
623 4a826364 Iustin Pop
  , pOpPriority
624 4a826364 Iustin Pop
  , pDependencies
625 4a826364 Iustin Pop
  , pComment
626 4a826364 Iustin Pop
  ])
627 4a826364 Iustin Pop
628 4a826364 Iustin Pop
-- | Default common parameter values.
629 4a826364 Iustin Pop
defOpParams :: CommonOpParams
630 4a826364 Iustin Pop
defOpParams =
631 4a826364 Iustin Pop
  CommonOpParams { opDryRun     = Nothing
632 4a826364 Iustin Pop
                 , opDebugLevel = Nothing
633 4a826364 Iustin Pop
                 , opPriority   = OpPrioNormal
634 4a826364 Iustin Pop
                 , opDepends    = Nothing
635 4a826364 Iustin Pop
                 , opComment    = Nothing
636 4a826364 Iustin Pop
                 }
637 4a826364 Iustin Pop
638 4a826364 Iustin Pop
-- | The top-level opcode type.
639 ad1c1e41 Iustin Pop
data MetaOpCode = MetaOpCode { metaParams :: CommonOpParams
640 ad1c1e41 Iustin Pop
                             , metaOpCode :: OpCode
641 ad1c1e41 Iustin Pop
                             } deriving (Show, Eq)
642 4a826364 Iustin Pop
643 4a826364 Iustin Pop
-- | JSON serialisation for 'MetaOpCode'.
644 4a826364 Iustin Pop
showMeta :: MetaOpCode -> JSValue
645 4a826364 Iustin Pop
showMeta (MetaOpCode params op) =
646 4a826364 Iustin Pop
  let objparams = toDictCommonOpParams params
647 4a826364 Iustin Pop
      objop = toDictOpCode op
648 4a826364 Iustin Pop
  in makeObj (objparams ++ objop)
649 4a826364 Iustin Pop
650 4a826364 Iustin Pop
-- | JSON deserialisation for 'MetaOpCode'
651 4a826364 Iustin Pop
readMeta :: JSValue -> Text.JSON.Result MetaOpCode
652 4a826364 Iustin Pop
readMeta v = do
653 4a826364 Iustin Pop
  meta <- readJSON v
654 4a826364 Iustin Pop
  op <- readJSON v
655 4a826364 Iustin Pop
  return $ MetaOpCode meta op
656 4a826364 Iustin Pop
657 4a826364 Iustin Pop
instance JSON MetaOpCode where
658 4a826364 Iustin Pop
  showJSON = showMeta
659 4a826364 Iustin Pop
  readJSON = readMeta
660 4a826364 Iustin Pop
661 4a826364 Iustin Pop
-- | Wraps an 'OpCode' with the default parameters to build a
662 4a826364 Iustin Pop
-- 'MetaOpCode'.
663 4a826364 Iustin Pop
wrapOpCode :: OpCode -> MetaOpCode
664 4a826364 Iustin Pop
wrapOpCode = MetaOpCode defOpParams
665 4a826364 Iustin Pop
666 4a826364 Iustin Pop
-- | Sets the comment on a meta opcode.
667 4a826364 Iustin Pop
setOpComment :: String -> MetaOpCode -> MetaOpCode
668 4a826364 Iustin Pop
setOpComment comment (MetaOpCode common op) =
669 4a826364 Iustin Pop
  MetaOpCode (common { opComment = Just comment}) op