Revision ad1c1e41 htools/Ganeti/OpCodes.hs

b/htools/Ganeti/OpCodes.hs
38 38
  , opID
39 39
  , allOpIDs
40 40
  , allOpFields
41
  , opSummary
41 42
  , CommonOpParams(..)
42 43
  , defOpParams
43 44
  , MetaOpCode(..)
......
45 46
  , setOpComment
46 47
  ) where
47 48

  
49
import Data.Maybe (fromMaybe)
48 50
import Text.JSON (readJSON, showJSON, JSON, JSValue, makeObj)
49 51
import qualified Text.JSON
50 52

  
51 53
import Ganeti.THH
52 54

  
53 55
import Ganeti.OpParams
54
import Ganeti.Types (OpSubmitPriority(..))
56
import Ganeti.Types (OpSubmitPriority(..), fromNonEmpty)
57
import Ganeti.Query.Language (queryTypeOpToRaw)
55 58

  
56 59
-- | OpCode representation.
57 60
--
......
548 551
  readJSON = loadOpCode
549 552
  showJSON = saveOpCode
550 553

  
554
-- | Generates the summary value for an opcode.
555
opSummaryVal :: OpCode -> Maybe String
556
opSummaryVal OpClusterVerifyGroup { opGroupName = s } = Just (fromNonEmpty s)
557
opSummaryVal OpGroupVerifyDisks { opGroupName = s } = Just (fromNonEmpty s)
558
opSummaryVal OpClusterRename { opName = s } = Just (fromNonEmpty s)
559
opSummaryVal OpQuery { opWhat = s } = Just (queryTypeOpToRaw s)
560
opSummaryVal OpQueryFields { opWhat = s } = Just (queryTypeOpToRaw s)
561
opSummaryVal OpNodeRemove { opNodeName = s } = Just (fromNonEmpty s)
562
opSummaryVal OpNodeAdd { opNodeName = s } = Just (fromNonEmpty s)
563
opSummaryVal OpNodeModifyStorage { opNodeName = s } = Just (fromNonEmpty s)
564
opSummaryVal OpRepairNodeStorage  { opNodeName = s } = Just (fromNonEmpty s)
565
opSummaryVal OpNodeSetParams { opNodeName = s } = Just (fromNonEmpty s)
566
opSummaryVal OpNodePowercycle { opNodeName = s } = Just (fromNonEmpty s)
567
opSummaryVal OpNodeMigrate { opNodeName = s } = Just (fromNonEmpty s)
568
opSummaryVal OpNodeEvacuate { opNodeName = s } = Just (fromNonEmpty s)
569
opSummaryVal OpInstanceCreate { opInstanceName = s } = Just s
570
opSummaryVal OpInstanceReinstall { opInstanceName = s } = Just s
571
opSummaryVal OpInstanceRemove { opInstanceName = s } = Just s
572
-- FIXME: instance rename should show both names; currently it shows none
573
-- opSummaryVal OpInstanceRename { opInstanceName = s } = Just s
574
opSummaryVal OpInstanceStartup { opInstanceName = s } = Just s
575
opSummaryVal OpInstanceShutdown { opInstanceName = s } = Just s
576
opSummaryVal OpInstanceReboot { opInstanceName = s } = Just s
577
opSummaryVal OpInstanceReplaceDisks { opInstanceName = s } = Just s
578
opSummaryVal OpInstanceFailover { opInstanceName = s } = Just s
579
opSummaryVal OpInstanceMigrate { opInstanceName = s } = Just s
580
opSummaryVal OpInstanceMove { opInstanceName = s } = Just s
581
opSummaryVal OpInstanceConsole { opInstanceName = s } = Just s
582
opSummaryVal OpInstanceActivateDisks { opInstanceName = s } = Just s
583
opSummaryVal OpInstanceDeactivateDisks { opInstanceName = s } = Just s
584
opSummaryVal OpInstanceRecreateDisks { opInstanceName = s } = Just s
585
opSummaryVal OpInstanceSetParams { opInstanceName = s } = Just s
586
opSummaryVal OpInstanceGrowDisk { opInstanceName = s } = Just s
587
opSummaryVal OpInstanceChangeGroup { opInstanceName = s } = Just s
588
opSummaryVal OpGroupAdd { opGroupName = s } = Just (fromNonEmpty s)
589
opSummaryVal OpGroupAssignNodes { opGroupName = s } = Just (fromNonEmpty s)
590
opSummaryVal OpGroupSetParams { opGroupName = s } = Just (fromNonEmpty s)
591
opSummaryVal OpGroupRemove { opGroupName = s } = Just (fromNonEmpty s)
592
opSummaryVal OpGroupEvacuate { opGroupName = s } = Just (fromNonEmpty s)
593
opSummaryVal OpBackupPrepare { opInstanceName = s } = Just s
594
opSummaryVal OpBackupExport { opInstanceName = s } = Just s
595
opSummaryVal OpBackupRemove { opInstanceName = s } = Just s
596
opSummaryVal OpTagsGet { opKind = k } =
597
  Just . fromMaybe "None" $ tagNameOf k
598
opSummaryVal OpTagsSearch { opTagSearchPattern = s } = Just (fromNonEmpty s)
599
opSummaryVal OpTestDelay { opDelayDuration = d } = Just (show d)
600
opSummaryVal OpTestAllocator { opIallocator = s } =
601
  -- FIXME: Python doesn't handle None fields well, so we have behave the same
602
  Just $ maybe "None" fromNonEmpty s
603
opSummaryVal OpNetworkAdd { opNetworkName = s} = Just (fromNonEmpty s)
604
opSummaryVal OpNetworkRemove { opNetworkName = s} = Just (fromNonEmpty s)
605
opSummaryVal OpNetworkSetParams { opNetworkName = s} = Just (fromNonEmpty s)
606
opSummaryVal OpNetworkConnect { opNetworkName = s} = Just (fromNonEmpty s)
607
opSummaryVal OpNetworkDisconnect { opNetworkName = s} = Just (fromNonEmpty s)
608
opSummaryVal _ = Nothing
609

  
610
-- | Computes the summary of the opcode.
611
opSummary :: OpCode -> String
612
opSummary op =
613
  case opSummaryVal op of
614
    Nothing -> op_suffix
615
    Just s -> op_suffix ++ "(" ++ s ++ ")"
616
  where op_suffix = drop 3 $ opID op
617

  
551 618
-- | Generic\/common opcode parameters.
552 619
$(buildObject "CommonOpParams" "op"
553 620
  [ pDryRun
......
568 635
                 }
569 636

  
570 637
-- | The top-level opcode type.
571
data MetaOpCode = MetaOpCode CommonOpParams OpCode
572
                  deriving (Show, Eq)
638
data MetaOpCode = MetaOpCode { metaParams :: CommonOpParams
639
                             , metaOpCode :: OpCode
640
                             } deriving (Show, Eq)
573 641

  
574 642
-- | JSON serialisation for 'MetaOpCode'.
575 643
showMeta :: MetaOpCode -> JSValue

Also available in: Unified diff