Revision 0f511c8a 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
  , MinMaxISpecs(..)
72 70
  , FilledIPolicy(..)
73 71
  , PartialIPolicy(..)
74 72
  , fillIPolicy
......
505 503
  , simpleField C.ispecSpindleUse  [t| Int |]
506 504
  ])
507 505

  
508
-- | Partial min-max instance specs. These is not built via buildParam since
509
-- it has a special 2-level inheritance mode.
510
$(buildObject "PartialMinMaxISpecs" "mmis"
511
  [ renameField "MinSpecP" $ simpleField "min" [t| PartialISpecParams |]
512
  , renameField "MaxSpecP" $ simpleField "max" [t| PartialISpecParams |]
513
  ])
514

  
515
-- | Filled min-max instance specs. This is not built via buildParam since
516
-- it has a special 2-level inheritance mode.
517
$(buildObject "FilledMinMaxISpecs" "mmis"
506
$(buildObject "MinMaxISpecs" "mmis"
518 507
  [ renameField "MinSpec" $ simpleField "min" [t| FilledISpecParams |]
519 508
  , renameField "MaxSpec" $ simpleField "max" [t| FilledISpecParams |]
520 509
  ])
......
523 512
-- has a special 2-level inheritance mode.
524 513
$(buildObject "PartialIPolicy" "ipolicy"
525 514
  [ optionalField . renameField "MinMaxISpecsP"
526
                    $ simpleField C.ispecsMinmax [t| PartialMinMaxISpecs |]
527
  , renameField "StdSpecP" $ simpleField "std" [t| PartialISpecParams |]
515
                    $ simpleField C.ispecsMinmax   [t| MinMaxISpecs |]
516
  , optionalField . renameField "StdSpecP"
517
                    $ simpleField "std"            [t| PartialISpecParams |]
528 518
  , optionalField . renameField "SpindleRatioP"
529 519
                    $ simpleField "spindle-ratio"  [t| Double |]
530 520
  , optionalField . renameField "VcpuRatioP"
......
537 527
-- has a special 2-level inheritance mode.
538 528
$(buildObject "FilledIPolicy" "ipolicy"
539 529
  [ renameField "MinMaxISpecs"
540
    $ simpleField C.ispecsMinmax [t| FilledMinMaxISpecs |]
530
    $ simpleField C.ispecsMinmax [t| MinMaxISpecs |]
541 531
  , renameField "StdSpec" $ simpleField "std" [t| FilledISpecParams |]
542 532
  , simpleField "spindle-ratio"  [t| Double |]
543 533
  , simpleField "vcpu-ratio"     [t| Double |]
544 534
  , simpleField "disk-templates" [t| [DiskTemplate] |]
545 535
  ])
546 536

  
547
-- | Custom filler for the min-max instance specs.
548
fillMinMaxISpecs :: FilledMinMaxISpecs -> Maybe PartialMinMaxISpecs ->
549
                    FilledMinMaxISpecs
550
fillMinMaxISpecs fminmax Nothing = fminmax
551
fillMinMaxISpecs (FilledMinMaxISpecs { mmisMinSpec = fmin
552
                                     , mmisMaxSpec = fmax })
553
                 (Just PartialMinMaxISpecs { mmisMinSpecP = pmin
554
                                           , mmisMaxSpecP = pmax }) =
555
  FilledMinMaxISpecs { mmisMinSpec = fillISpecParams fmin pmin
556
                     , mmisMaxSpec = fillISpecParams fmax pmax }
557

  
558 537
-- | Custom filler for the ipolicy types.
559 538
fillIPolicy :: FilledIPolicy -> PartialIPolicy -> FilledIPolicy
560 539
fillIPolicy (FilledIPolicy { ipolicyMinMaxISpecs  = fminmax
......
567 546
                            , ipolicySpindleRatioP  = pspindleRatio
568 547
                            , ipolicyVcpuRatioP     = pvcpuRatio
569 548
                            , ipolicyDiskTemplatesP = pdiskTemplates}) =
570
  FilledIPolicy { ipolicyMinMaxISpecs  = fillMinMaxISpecs fminmax pminmax
571
                , ipolicyStdSpec       = fillISpecParams fstd pstd
549
  FilledIPolicy { ipolicyMinMaxISpecs  = fromMaybe fminmax pminmax
550
                , ipolicyStdSpec       = case pstd of
551
                                         Nothing -> fstd
552
                                         Just p -> fillISpecParams fstd p
572 553
                , ipolicySpindleRatio  = fromMaybe fspindleRatio pspindleRatio
573 554
                , ipolicyVcpuRatio     = fromMaybe fvcpuRatio pvcpuRatio
574 555
                , ipolicyDiskTemplates = fromMaybe fdiskTemplates

Also available in: Unified diff