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