Revision 8397ffde src/Ganeti/HTools/Types.hs
b/src/Ganeti/HTools/Types.hs | ||
---|---|---|
70 | 70 |
, OpResult |
71 | 71 |
, opToResult |
72 | 72 |
, ISpec(..) |
73 |
, defMinISpec |
|
74 |
, defStdISpec |
|
75 |
, maxDisks |
|
76 |
, maxNics |
|
77 |
, defMaxISpec |
|
73 | 78 |
, MinMaxISpecs(..) |
74 | 79 |
, IPolicy(..) |
75 | 80 |
, defIPolicy |
... | ... | |
89 | 94 |
import qualified Data.Map as M |
90 | 95 |
import System.Time (ClockTime) |
91 | 96 |
|
92 |
import qualified Ganeti.Constants as C
|
|
97 |
import qualified Ganeti.ConstantUtils as ConstantUtils
|
|
93 | 98 |
import qualified Ganeti.THH as THH |
94 | 99 |
import Ganeti.BasicTypes |
95 | 100 |
import Ganeti.Types |
... | ... | |
165 | 170 |
|
166 | 171 |
-- | Instance specification type. |
167 | 172 |
$(THH.buildObject "ISpec" "iSpec" |
168 |
[ THH.renameField "MemorySize" $ THH.simpleField C.ispecMemSize [t| Int |] |
|
169 |
, THH.renameField "CpuCount" $ THH.simpleField C.ispecCpuCount [t| Int |] |
|
170 |
, THH.renameField "DiskSize" $ THH.simpleField C.ispecDiskSize [t| Int |] |
|
171 |
, THH.renameField "DiskCount" $ THH.simpleField C.ispecDiskCount [t| Int |] |
|
172 |
, THH.renameField "NicCount" $ THH.simpleField C.ispecNicCount [t| Int |] |
|
173 |
, THH.renameField "SpindleUse" $ THH.simpleField C.ispecSpindleUse [t| Int |] |
|
173 |
[ THH.renameField "MemorySize" $ |
|
174 |
THH.simpleField ConstantUtils.ispecMemSize [t| Int |] |
|
175 |
, THH.renameField "CpuCount" $ |
|
176 |
THH.simpleField ConstantUtils.ispecCpuCount [t| Int |] |
|
177 |
, THH.renameField "DiskSize" $ |
|
178 |
THH.simpleField ConstantUtils.ispecDiskSize [t| Int |] |
|
179 |
, THH.renameField "DiskCount" $ |
|
180 |
THH.simpleField ConstantUtils.ispecDiskCount [t| Int |] |
|
181 |
, THH.renameField "NicCount" $ |
|
182 |
THH.simpleField ConstantUtils.ispecNicCount [t| Int |] |
|
183 |
, THH.renameField "SpindleUse" $ |
|
184 |
THH.simpleField ConstantUtils.ispecSpindleUse [t| Int |] |
|
174 | 185 |
]) |
175 | 186 |
|
176 | 187 |
-- | The default minimum ispec. |
177 | 188 |
defMinISpec :: ISpec |
178 |
defMinISpec = ISpec { iSpecMemorySize = C.ispecsMinmaxDefaultsMinMemorySize
|
|
179 |
, iSpecCpuCount = C.ispecsMinmaxDefaultsMinCpuCount
|
|
180 |
, iSpecDiskSize = C.ispecsMinmaxDefaultsMinDiskSize
|
|
181 |
, iSpecDiskCount = C.ispecsMinmaxDefaultsMinDiskCount
|
|
182 |
, iSpecNicCount = C.ispecsMinmaxDefaultsMinNicCount
|
|
183 |
, iSpecSpindleUse = C.ispecsMinmaxDefaultsMinSpindleUse
|
|
189 |
defMinISpec = ISpec { iSpecMemorySize = 128
|
|
190 |
, iSpecCpuCount = 1
|
|
191 |
, iSpecDiskCount = 1
|
|
192 |
, iSpecDiskSize = 1024
|
|
193 |
, iSpecNicCount = 1
|
|
194 |
, iSpecSpindleUse = 1
|
|
184 | 195 |
} |
185 | 196 |
|
186 | 197 |
-- | The default standard ispec. |
187 | 198 |
defStdISpec :: ISpec |
188 |
defStdISpec = ISpec { iSpecMemorySize = C.ipolicyDefaultsStdMemorySize
|
|
189 |
, iSpecCpuCount = C.ipolicyDefaultsStdCpuCount
|
|
190 |
, iSpecDiskSize = C.ipolicyDefaultsStdDiskSize
|
|
191 |
, iSpecDiskCount = C.ipolicyDefaultsStdDiskCount
|
|
192 |
, iSpecNicCount = C.ipolicyDefaultsStdNicCount
|
|
193 |
, iSpecSpindleUse = C.ipolicyDefaultsStdSpindleUse
|
|
199 |
defStdISpec = ISpec { iSpecMemorySize = 128
|
|
200 |
, iSpecCpuCount = 1
|
|
201 |
, iSpecDiskCount = 1
|
|
202 |
, iSpecDiskSize = 1024
|
|
203 |
, iSpecNicCount = 1
|
|
204 |
, iSpecSpindleUse = 1
|
|
194 | 205 |
} |
195 | 206 |
|
207 |
maxDisks :: Int |
|
208 |
maxDisks = 16 |
|
209 |
|
|
210 |
maxNics :: Int |
|
211 |
maxNics = 8 |
|
212 |
|
|
196 | 213 |
-- | The default max ispec. |
197 | 214 |
defMaxISpec :: ISpec |
198 |
defMaxISpec = ISpec { iSpecMemorySize = C.ispecsMinmaxDefaultsMaxMemorySize
|
|
199 |
, iSpecCpuCount = C.ispecsMinmaxDefaultsMaxCpuCount
|
|
200 |
, iSpecDiskSize = C.ispecsMinmaxDefaultsMaxDiskSize
|
|
201 |
, iSpecDiskCount = C.ispecsMinmaxDefaultsMaxDiskCount
|
|
202 |
, iSpecNicCount = C.ispecsMinmaxDefaultsMaxNicCount
|
|
203 |
, iSpecSpindleUse = C.ispecsMinmaxDefaultsMaxSpindleUse
|
|
215 |
defMaxISpec = ISpec { iSpecMemorySize = 32768
|
|
216 |
, iSpecCpuCount = 8
|
|
217 |
, iSpecDiskCount = maxDisks
|
|
218 |
, iSpecDiskSize = 1024 * 1024
|
|
219 |
, iSpecNicCount = maxNics
|
|
220 |
, iSpecSpindleUse = 12
|
|
204 | 221 |
} |
205 | 222 |
|
206 | 223 |
-- | Minimum and maximum instance specs type. |
... | ... | |
218 | 235 |
-- | Instance policy type. |
219 | 236 |
$(THH.buildObject "IPolicy" "iPolicy" |
220 | 237 |
[ THH.renameField "MinMaxISpecs" $ |
221 |
THH.simpleField C.ispecsMinmax [t| [MinMaxISpecs] |] |
|
222 |
, THH.renameField "StdSpec" $ THH.simpleField C.ispecsStd [t| ISpec |] |
|
238 |
THH.simpleField ConstantUtils.ispecsMinmax [t| [MinMaxISpecs] |] |
|
239 |
, THH.renameField "StdSpec" $ |
|
240 |
THH.simpleField ConstantUtils.ispecsStd [t| ISpec |] |
|
223 | 241 |
, THH.renameField "DiskTemplates" $ |
224 |
THH.simpleField C.ipolicyDts [t| [DiskTemplate] |] |
|
242 |
THH.simpleField ConstantUtils.ipolicyDts [t| [DiskTemplate] |]
|
|
225 | 243 |
, THH.renameField "VcpuRatio" $ |
226 |
THH.simpleField C.ipolicyVcpuRatio [t| Double |] |
|
244 |
THH.simpleField ConstantUtils.ipolicyVcpuRatio [t| Double |]
|
|
227 | 245 |
, THH.renameField "SpindleRatio" $ |
228 |
THH.simpleField C.ipolicySpindleRatio [t| Double |] |
|
246 |
THH.simpleField ConstantUtils.ipolicySpindleRatio [t| Double |]
|
|
229 | 247 |
]) |
230 | 248 |
|
231 | 249 |
-- | Converts an ISpec type to a RSpec one. |
... | ... | |
238 | 256 |
|
239 | 257 |
-- | The default instance policy. |
240 | 258 |
defIPolicy :: IPolicy |
241 |
defIPolicy = IPolicy { iPolicyMinMaxISpecs = defMinMaxISpecs |
|
242 |
, iPolicyStdSpec = defStdISpec |
|
243 |
-- hardcoding here since Constants.hs exports the |
|
244 |
-- string values, not the actual type; and in |
|
245 |
-- htools, we are mostly looking at DRBD |
|
246 |
, iPolicyDiskTemplates = [minBound..maxBound] |
|
247 |
, iPolicyVcpuRatio = C.ipolicyDefaultsVcpuRatio |
|
248 |
, iPolicySpindleRatio = C.ipolicyDefaultsSpindleRatio |
|
249 |
} |
|
259 |
defIPolicy = |
|
260 |
IPolicy { iPolicyMinMaxISpecs = defMinMaxISpecs |
|
261 |
, iPolicyStdSpec = defStdISpec |
|
262 |
-- hardcoding here since Constants.hs exports the |
|
263 |
-- string values, not the actual type; and in |
|
264 |
-- htools, we are mostly looking at DRBD |
|
265 |
, iPolicyDiskTemplates = [minBound..maxBound] |
|
266 |
, iPolicyVcpuRatio = ConstantUtils.ipolicyDefaultsVcpuRatio |
|
267 |
, iPolicySpindleRatio = ConstantUtils.ipolicyDefaultsSpindleRatio |
|
268 |
} |
|
250 | 269 |
|
251 | 270 |
-- | The dynamic resource specs of a machine (i.e. load or load |
252 | 271 |
-- capacity, as opposed to size). |
... | ... | |
378 | 397 |
setIdx :: a -> Int -> a |
379 | 398 |
|
380 | 399 |
-- | The repair modes for the auto-repair tool. |
381 |
$(THH.declareSADT "AutoRepairType"
|
|
382 |
-- Order is important here: from least destructive to most.
|
|
383 |
[ ("ArFixStorage", 'C.autoRepairFixStorage)
|
|
384 |
, ("ArMigrate", 'C.autoRepairMigrate)
|
|
385 |
, ("ArFailover", 'C.autoRepairFailover)
|
|
386 |
, ("ArReinstall", 'C.autoRepairReinstall)
|
|
387 |
])
|
|
400 |
$(THH.declareLADT ''String "AutoRepairType"
|
|
401 |
-- Order is important here: from least destructive to most. |
|
402 |
[ ("ArFixStorage", "fix-storage")
|
|
403 |
, ("ArMigrate", "migrate")
|
|
404 |
, ("ArFailover", "failover")
|
|
405 |
, ("ArReinstall", "reinstall")
|
|
406 |
]) |
|
388 | 407 |
|
389 | 408 |
-- | The possible auto-repair results. |
390 |
$(THH.declareSADT "AutoRepairResult"
|
|
391 |
-- Order is important here: higher results take precedence when an object
|
|
392 |
-- has several result annotations attached.
|
|
393 |
[ ("ArEnoperm", 'C.autoRepairEnoperm)
|
|
394 |
, ("ArSuccess", 'C.autoRepairSuccess)
|
|
395 |
, ("ArFailure", 'C.autoRepairFailure)
|
|
396 |
])
|
|
409 |
$(THH.declareLADT ''String "AutoRepairResult"
|
|
410 |
-- Order is important here: higher results take precedence when an object |
|
411 |
-- has several result annotations attached. |
|
412 |
[ ("ArEnoperm", "enoperm")
|
|
413 |
, ("ArSuccess", "success")
|
|
414 |
, ("ArFailure", "failure")
|
|
415 |
]) |
|
397 | 416 |
|
398 | 417 |
-- | The possible auto-repair policy for a given instance. |
399 | 418 |
data AutoRepairPolicy |
Also available in: Unified diff