X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/80d7d8a118334e7ea8dde7910eb8b0e003c0c907..01e524934eae5ae964c51a19ff2a1a1011f5e51a:/htools/Ganeti/HTools/Types.hs diff --git a/htools/Ganeti/HTools/Types.hs b/htools/Ganeti/HTools/Types.hs index 2c83291..b625cef 100644 --- a/htools/Ganeti/HTools/Types.hs +++ b/htools/Ganeti/HTools/Types.hs @@ -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 = "" -- | 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