Revision da5f09ef src/Ganeti/Objects.hs

b/src/Ganeti/Objects.hs
66 66
  , PartialISpecParams(..)
67 67
  , fillISpecParams
68 68
  , allISpecParamFields
69
  , FilledMinMaxISpecs(..)
70
  , PartialMinMaxISpecs(..)
71
  , fillMinMaxISpecs
69 72
  , FilledIPolicy(..)
70 73
  , PartialIPolicy(..)
71 74
  , fillIPolicy
......
491 494
  , simpleField C.ispecSpindleUse  [t| Int |]
492 495
  ])
493 496

  
497
-- | Partial min-max instance specs. These is not built via buildParam since
498
-- it has a special 2-level inheritance mode.
499
$(buildObject "PartialMinMaxISpecs" "mmis"
500
  [ renameField "MinSpecP" $ simpleField "min" [t| PartialISpecParams |]
501
  , renameField "MaxSpecP" $ simpleField "max" [t| PartialISpecParams |]
502
  ])
503

  
504
-- | Filled min-max instance specs. This is not built via buildParam since
505
-- it has a special 2-level inheritance mode.
506
$(buildObject "FilledMinMaxISpecs" "mmis"
507
  [ renameField "MinSpec" $ simpleField "min" [t| FilledISpecParams |]
508
  , renameField "MaxSpec" $ simpleField "max" [t| FilledISpecParams |]
509
  ])
510

  
494 511
-- | Custom partial ipolicy. This is not built via buildParam since it
495 512
-- has a special 2-level inheritance mode.
496 513
$(buildObject "PartialIPolicy" "ipolicy"
497
  [ renameField "MinSpecP" $ simpleField "min" [t| PartialISpecParams |]
498
  , renameField "MaxSpecP" $ simpleField "max" [t| PartialISpecParams |]
514
  [ optionalField . renameField "MinMaxISpecsP"
515
                    $ simpleField C.ispecsMinmax [t| PartialMinMaxISpecs |]
499 516
  , renameField "StdSpecP" $ simpleField "std" [t| PartialISpecParams |]
500 517
  , optionalField . renameField "SpindleRatioP"
501 518
                    $ simpleField "spindle-ratio"  [t| Double |]
......
508 525
-- | Custom filled ipolicy. This is not built via buildParam since it
509 526
-- has a special 2-level inheritance mode.
510 527
$(buildObject "FilledIPolicy" "ipolicy"
511
  [ renameField "MinSpec" $ simpleField "min" [t| FilledISpecParams |]
512
  , renameField "MaxSpec" $ simpleField "max" [t| FilledISpecParams |]
528
  [ renameField "MinMaxISpecs"
529
    $ simpleField C.ispecsMinmax [t| FilledMinMaxISpecs |]
513 530
  , renameField "StdSpec" $ simpleField "std" [t| FilledISpecParams |]
514 531
  , simpleField "spindle-ratio"  [t| Double |]
515 532
  , simpleField "vcpu-ratio"     [t| Double |]
516 533
  , simpleField "disk-templates" [t| [DiskTemplate] |]
517 534
  ])
518 535

  
536
-- | Custom filler for the min-max instance specs.
537
fillMinMaxISpecs :: FilledMinMaxISpecs -> Maybe PartialMinMaxISpecs ->
538
                    FilledMinMaxISpecs
539
fillMinMaxISpecs fminmax Nothing = fminmax
540
fillMinMaxISpecs (FilledMinMaxISpecs { mmisMinSpec = fmin
541
                                     , mmisMaxSpec = fmax })
542
                 (Just PartialMinMaxISpecs { mmisMinSpecP = pmin
543
                                           , mmisMaxSpecP = pmax }) =
544
  FilledMinMaxISpecs { mmisMinSpec = fillISpecParams fmin pmin
545
                     , mmisMaxSpec = fillISpecParams fmax pmax }
546

  
519 547
-- | Custom filler for the ipolicy types.
520 548
fillIPolicy :: FilledIPolicy -> PartialIPolicy -> FilledIPolicy
521
fillIPolicy (FilledIPolicy { ipolicyMinSpec       = fmin
522
                           , ipolicyMaxSpec       = fmax
549
fillIPolicy (FilledIPolicy { ipolicyMinMaxISpecs  = fminmax
523 550
                           , ipolicyStdSpec       = fstd
524 551
                           , ipolicySpindleRatio  = fspindleRatio
525 552
                           , ipolicyVcpuRatio     = fvcpuRatio
526 553
                           , ipolicyDiskTemplates = fdiskTemplates})
527
            (PartialIPolicy { ipolicyMinSpecP       = pmin
528
                            , ipolicyMaxSpecP       = pmax
554
            (PartialIPolicy { ipolicyMinMaxISpecsP  = pminmax
529 555
                            , ipolicyStdSpecP       = pstd
530 556
                            , ipolicySpindleRatioP  = pspindleRatio
531 557
                            , ipolicyVcpuRatioP     = pvcpuRatio
532 558
                            , ipolicyDiskTemplatesP = pdiskTemplates}) =
533
  FilledIPolicy { ipolicyMinSpec       = fillISpecParams fmin pmin
534
                , ipolicyMaxSpec       = fillISpecParams fmax pmax
559
  FilledIPolicy { ipolicyMinMaxISpecs  = fillMinMaxISpecs fminmax pminmax
535 560
                , ipolicyStdSpec       = fillISpecParams fstd pstd
536 561
                , ipolicySpindleRatio  = fromMaybe fspindleRatio pspindleRatio
537 562
                , ipolicyVcpuRatio     = fromMaybe fvcpuRatio pvcpuRatio

Also available in: Unified diff