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
|