Cleanup HTools.Types/BasicTypes imports
[ganeti-local] / htools / Ganeti / HTools / Types.hs
index 2c83291..b625cef 100644 (file)
@@ -58,20 +58,15 @@ module Ganeti.HTools.Types
   , DiskTemplate(..)
   , diskTemplateToRaw
   , diskTemplateFromRaw
+  , MirrorType(..)
+  , templateMirrorType
   , MoveJob
   , JobSet
-  , Result(..)
-  , isOk
-  , isBad
-  , eitherToResult
-  , annotateResult
   , Element(..)
   , FailMode(..)
   , FailStats
   , OpResult(..)
   , opToResult
-  , connTimeout
-  , queryTimeout
   , EvacMode(..)
   , ISpec(..)
   , IPolicy(..)
@@ -85,7 +80,7 @@ import Text.JSON (makeObj, readJSON, showJSON)
 import qualified Ganeti.Constants as C
 import qualified Ganeti.THH as THH
 import Ganeti.BasicTypes
-import Ganeti.HTools.JSON
+import Ganeti.JSON
 
 -- | The instance index type.
 type Idx = Int
@@ -120,9 +115,26 @@ $(THH.declareSADT "DiskTemplate"
        , ("DTPlain",      'C.dtPlain)
        , ("DTBlock",      'C.dtBlock)
        , ("DTDrbd8",      'C.dtDrbd8)
+       , ("DTRbd",        'C.dtRbd)
        ])
 $(THH.makeJSONInstance ''DiskTemplate)
 
+-- | Mirroring type.
+data MirrorType = MirrorNone     -- ^ No mirroring/movability
+                | MirrorInternal -- ^ DRBD-type mirroring
+                | MirrorExternal -- ^ Shared-storage type mirroring
+                  deriving (Eq, Show, Read)
+
+-- | Correspondence between disk template and mirror type.
+templateMirrorType :: DiskTemplate -> MirrorType
+templateMirrorType DTDiskless   = MirrorExternal
+templateMirrorType DTFile       = MirrorNone
+templateMirrorType DTSharedFile = MirrorExternal
+templateMirrorType DTPlain      = MirrorNone
+templateMirrorType DTBlock      = MirrorExternal
+templateMirrorType DTDrbd8      = MirrorInternal
+templateMirrorType DTRbd        = MirrorExternal
+
 -- | The Group allocation policy type.
 --
 -- Note that the order of constructors is important as the automatic
@@ -173,11 +185,12 @@ type AllocStats = (AllocInfo, AllocInfo, AllocInfo)
 
 -- | Instance specification type.
 $(THH.buildObject "ISpec" "iSpec"
-  [ THH.renameField "MemorySize" $ THH.simpleField "memory-size" [t| Int |]
-  , THH.renameField "CpuCount"   $ THH.simpleField "cpu-count"   [t| Int |]
-  , THH.renameField "DiskSize"   $ THH.simpleField "disk-size"   [t| Int |]
-  , THH.renameField "DiskCount"  $ THH.simpleField "disk-count"  [t| Int |]
-  , THH.renameField "NicCount"   $ THH.simpleField "nic-count"   [t| Int |]
+  [ THH.renameField "MemorySize"   $ THH.simpleField C.ispecMemSize      [t| Int |]
+  , THH.renameField "CpuCount"     $ THH.simpleField C.ispecCpuCount     [t| Int |]
+  , THH.renameField "DiskSize"     $ THH.simpleField C.ispecDiskSize     [t| Int |]
+  , THH.renameField "DiskCount"    $ THH.simpleField C.ispecDiskCount    [t| Int |]
+  , THH.renameField "NicCount"     $ THH.simpleField C.ispecNicCount     [t| Int |]
+  , THH.renameField "SpindleUse"   $ THH.simpleField C.ispecSpindleUse   [t| Int |]
   ])
 
 -- | The default minimum ispec.
@@ -187,6 +200,7 @@ defMinISpec = ISpec { iSpecMemorySize = C.ipolicyDefaultsMinMemorySize
                     , iSpecDiskSize   = C.ipolicyDefaultsMinDiskSize
                     , iSpecDiskCount  = C.ipolicyDefaultsMinDiskCount
                     , iSpecNicCount   = C.ipolicyDefaultsMinNicCount
+                    , iSpecSpindleUse = C.ipolicyDefaultsMinSpindleUse
                     }
 
 -- | The default standard ispec.
@@ -196,6 +210,7 @@ defStdISpec = ISpec { iSpecMemorySize = C.ipolicyDefaultsStdMemorySize
                     , iSpecDiskSize   = C.ipolicyDefaultsStdDiskSize
                     , iSpecDiskCount  = C.ipolicyDefaultsStdDiskCount
                     , iSpecNicCount   = C.ipolicyDefaultsStdNicCount
+                    , iSpecSpindleUse = C.ipolicyDefaultsStdSpindleUse
                     }
 
 -- | The default max ispec.
@@ -205,17 +220,20 @@ defMaxISpec = ISpec { iSpecMemorySize = C.ipolicyDefaultsMaxMemorySize
                     , iSpecDiskSize   = C.ipolicyDefaultsMaxDiskSize
                     , iSpecDiskCount  = C.ipolicyDefaultsMaxDiskCount
                     , iSpecNicCount   = C.ipolicyDefaultsMaxNicCount
+                    , iSpecSpindleUse = C.ipolicyDefaultsMaxSpindleUse
                     }
 
 -- | Instance policy type.
 $(THH.buildObject "IPolicy" "iPolicy"
-  [ THH.renameField "StdSpec" $ THH.simpleField "std" [t| ISpec |]
-  , THH.renameField "MinSpec" $ THH.simpleField "min" [t| ISpec |]
-  , THH.renameField "MaxSpec" $ THH.simpleField "max" [t| ISpec |]
+  [ THH.renameField "StdSpec" $ THH.simpleField C.ispecsStd [t| ISpec |]
+  , THH.renameField "MinSpec" $ THH.simpleField C.ispecsMin [t| ISpec |]
+  , THH.renameField "MaxSpec" $ THH.simpleField C.ispecsMax [t| ISpec |]
   , THH.renameField "DiskTemplates" $
-      THH.simpleField "disk_templates" [t| [DiskTemplate] |]
+      THH.simpleField C.ipolicyDts [t| [DiskTemplate] |]
   , THH.renameField "VcpuRatio" $
-      THH.simpleField "vcpu_ratio" [t| Double |]
+      THH.simpleField C.ipolicyVcpuRatio [t| Double |]
+  , THH.renameField "SpindleRatio" $
+      THH.simpleField C.ipolicySpindleRatio [t| Double |]
   ])
 
 -- | Converts an ISpec type to a RSpec one.
@@ -233,8 +251,9 @@ defIPolicy = IPolicy { iPolicyStdSpec = defStdISpec
                      -- hardcoding here since Constants.hs exports the
                      -- string values, not the actual type; and in
                      -- htools, we are mostly looking at DRBD
-                     , iPolicyDiskTemplates = [DTDrbd8, DTPlain]
+                     , iPolicyDiskTemplates = [minBound..maxBound]
                      , iPolicyVcpuRatio = C.ipolicyDefaultsVcpuRatio
+                     , iPolicySpindleRatio = C.ipolicyDefaultsSpindleRatio
                      }
 
 -- | The dynamic resource specs of a machine (i.e. load or load
@@ -274,6 +293,8 @@ type Placement = (Idx, Ndx, Ndx, IMove, Score)
 
 -- | An instance move definition.
 data IMove = Failover                -- ^ Failover the instance (f)
+           | FailoverToAny Ndx       -- ^ Failover to a random node
+                                     -- (fa:np), for shared storage
            | ReplacePrimary Ndx      -- ^ Replace primary (f, r:np, f)
            | ReplaceSecondary Ndx    -- ^ Replace secondary (r:ns)
            | ReplaceAndFailover Ndx  -- ^ Replace secondary, failover (r:np, f)
@@ -291,14 +312,6 @@ unknownField = "<unknown field>"
 -- | A list of command elements.
 type JobSet = [MoveJob]
 
--- | Connection timeout (when using non-file methods).
-connTimeout :: Int
-connTimeout = 15
-
--- | The default timeout for queries (when using non-file methods).
-queryTimeout :: Int
-queryTimeout = 60
-
 -- | Default max disk usage ratio.
 defReservedDiskRatio :: Double
 defReservedDiskRatio = 0