Revision 7514fe92

b/htools/Ganeti/HTools/QC.hs
540 540
  arbitrary = elements [minBound..maxBound]
541 541

  
542 542
instance Arbitrary Objects.PartialNDParams where
543
  arbitrary = Objects.PartialNDParams <$> arbitrary
543
  arbitrary = Objects.PartialNDParams <$> arbitrary <*> arbitrary
544 544

  
545 545
instance Arbitrary Objects.Node where
546 546
  arbitrary = Objects.Node <$> getFQDN <*> getFQDN <*> getFQDN
b/htools/Ganeti/Objects.hs
52 52
  , fillNDParams
53 53
  , Node(..)
54 54
  , AllocPolicy(..)
55
  , FilledISpecParams(..)
56
  , PartialISpecParams(..)
57
  , fillISpecParams
58
  , FilledIPolicy(..)
59
  , PartialIPolicy(..)
60
  , fillIPolicy
55 61
  , NodeGroup(..)
56 62
  , IpFamily(..)
57 63
  , ipFamilyToVersion
......
289 295
  ++ uuidFields
290 296
  ++ serialFields)
291 297

  
298
-- * IPolicy definitions
299

  
300
$(buildParam "ISpec" "ispec" $
301
  [ simpleField C.ispecMemSize     [t| Int |]
302
  , simpleField C.ispecDiskSize    [t| Int |]
303
  , simpleField C.ispecDiskCount   [t| Int |]
304
  , simpleField C.ispecCpuCount    [t| Int |]
305
  , simpleField C.ispecSpindleUse  [t| Int |]
306
  ])
307

  
308
-- | Custom partial ipolicy. This is not built via buildParam since it
309
-- has a special 2-level inheritance mode.
310
$(buildObject "PartialIPolicy" "ipolicy" $
311
  [ renameField "MinSpecP" $ simpleField "min" [t| PartialISpecParams |]
312
  , renameField "MaxSpecP" $ simpleField "max" [t| PartialISpecParams |]
313
  , renameField "StdSpecP" $ simpleField "std" [t| PartialISpecParams |]
314
  , optionalField . renameField "SpindleRatioP"
315
                    $ simpleField "spindle-ratio"  [t| Double |]
316
  , optionalField . renameField "VcpuRatioP"
317
                    $ simpleField "vcpu-ratio"     [t| Double |]
318
  , optionalField . renameField "DiskTemplatesP"
319
                    $ simpleField "disk-templates" [t| [DiskTemplate] |]
320
  ])
321

  
322
-- | Custom filled ipolicy. This is not built via buildParam since it
323
-- has a special 2-level inheritance mode.
324
$(buildObject "FilledIPolicy" "ipolicy" $
325
  [ renameField "MinSpec" $ simpleField "min" [t| FilledISpecParams |]
326
  , renameField "MaxSpec" $ simpleField "max" [t| FilledISpecParams |]
327
  , renameField "StdSpec" $ simpleField "std" [t| FilledISpecParams |]
328
  , simpleField "spindle-ratio"  [t| Double |]
329
  , simpleField "vcpu-ratio"     [t| Double |]
330
  , simpleField "disk-templates" [t| [DiskTemplate] |]
331
  ])
332

  
333
-- | Custom filler for the ipolicy types.
334
fillIPolicy :: FilledIPolicy -> PartialIPolicy -> FilledIPolicy
335
fillIPolicy (FilledIPolicy { ipolicyMinSpec       = fmin
336
                           , ipolicyMaxSpec       = fmax
337
                           , ipolicyStdSpec       = fstd
338
                           , ipolicySpindleRatio  = fspindleRatio
339
                           , ipolicyVcpuRatio     = fvcpuRatio
340
                           , ipolicyDiskTemplates = fdiskTemplates})
341
            (PartialIPolicy { ipolicyMinSpecP       = pmin
342
                            , ipolicyMaxSpecP       = pmax
343
                            , ipolicyStdSpecP       = pstd
344
                            , ipolicySpindleRatioP  = pspindleRatio
345
                            , ipolicyVcpuRatioP     = pvcpuRatio
346
                            , ipolicyDiskTemplatesP = pdiskTemplates}) =
347
  FilledIPolicy { ipolicyMinSpec       = fillISpecParams fmin pmin
348
                , ipolicyMaxSpec       = fillISpecParams fmax pmax
349
                , ipolicyStdSpec       = fillISpecParams fstd pstd
350
                , ipolicySpindleRatio  = fromMaybe fspindleRatio pspindleRatio
351
                , ipolicyVcpuRatio     = fromMaybe fvcpuRatio pvcpuRatio
352
                , ipolicyDiskTemplates = fromMaybe fdiskTemplates
353
                                         pdiskTemplates
354
                }
292 355
-- * Node definitions
293 356

  
294 357
$(buildParam "ND" "ndp" $
295
  [ simpleField "oob_program" [t| String |]
358
  [ simpleField "oob_program"   [t| String |]
359
  , simpleField "spindle_count" [t| Int    |]
296 360
  ])
297 361

  
298 362
$(buildObject "Node" "node" $
......
333 397
  [ simpleField "name"         [t| String |]
334 398
  , defaultField  [| [] |] $ simpleField "members" [t| [String] |]
335 399
  , simpleField "ndparams"     [t| PartialNDParams |]
336
  , simpleField "alloc_policy" [t| AllocPolicy |]
400
  , simpleField "alloc_policy" [t| AllocPolicy     |]
401
  , simpleField "ipolicy"      [t| PartialIPolicy  |]
337 402
  ]
338 403
  ++ timeStampFields
339 404
  ++ uuidFields
......
388 453
  , simpleField "blacklisted_os"            [t| [String]           |]
389 454
  , simpleField "primary_ip_family"         [t| IpFamily           |]
390 455
  , simpleField "prealloc_wipe_disks"       [t| Bool               |]
456
  , simpleField "ipolicy"                   [t| FilledIPolicy      |]
391 457
 ]
392 458
 ++ serialFields
393 459
 ++ timeStampFields

Also available in: Unified diff