diff --git a/htools/Ganeti/HTools/QC.hs b/htools/Ganeti/HTools/QC.hs index 31b745bf8847b4b3ef5eb025147b3eabfe1f4ed4..74ab160d1a74f1aa5f39f5340a406adb139e2ae8 100644 --- a/htools/Ganeti/HTools/QC.hs +++ b/htools/Ganeti/HTools/QC.hs @@ -116,18 +116,21 @@ nullIPolicy = Types.IPolicy , Types.iSpecDiskSize = 0 , Types.iSpecDiskCount = 0 , Types.iSpecNicCount = 0 + , Types.iSpecSpindleUse = 0 } , Types.iPolicyMaxSpec = Types.ISpec { Types.iSpecMemorySize = maxBound , Types.iSpecCpuCount = maxBound , Types.iSpecDiskSize = maxBound , Types.iSpecDiskCount = C.maxDisks , Types.iSpecNicCount = C.maxNics + , Types.iSpecSpindleUse = maxBound } , Types.iPolicyStdSpec = Types.ISpec { Types.iSpecMemorySize = Types.unitMem , Types.iSpecCpuCount = Types.unitCpu , Types.iSpecDiskSize = Types.unitDsk , Types.iSpecDiskCount = 1 , Types.iSpecNicCount = 1 + , Types.iSpecSpindleUse = 1 } , Types.iPolicyDiskTemplates = [Types.DTDrbd8, Types.DTPlain] , Types.iPolicyVcpuRatio = maxVcpuRatio -- somewhat random value, high @@ -432,11 +435,13 @@ instance Arbitrary Types.ISpec where dsk_s <- arbitrary::Gen (NonNegative Int) cpu_c <- arbitrary::Gen (NonNegative Int) nic_c <- arbitrary::Gen (NonNegative Int) + su <- arbitrary::Gen (NonNegative Int) return Types.ISpec { Types.iSpecMemorySize = fromIntegral mem_s , Types.iSpecCpuCount = fromIntegral cpu_c , Types.iSpecDiskSize = fromIntegral dsk_s , Types.iSpecDiskCount = fromIntegral dsk_c , Types.iSpecNicCount = fromIntegral nic_c + , Types.iSpecSpindleUse = fromIntegral su } -- | Generates an ispec bigger than the given one. @@ -447,11 +452,13 @@ genBiggerISpec imin = do dsk_s <- choose (Types.iSpecDiskSize imin, maxBound) cpu_c <- choose (Types.iSpecCpuCount imin, maxBound) nic_c <- choose (Types.iSpecNicCount imin, maxBound) + su <- choose (Types.iSpecSpindleUse imin, maxBound) return Types.ISpec { Types.iSpecMemorySize = fromIntegral mem_s , Types.iSpecCpuCount = fromIntegral cpu_c , Types.iSpecDiskSize = fromIntegral dsk_s , Types.iSpecDiskCount = fromIntegral dsk_c , Types.iSpecNicCount = fromIntegral nic_c + , Types.iSpecSpindleUse = fromIntegral su } instance Arbitrary Types.IPolicy where diff --git a/htools/Ganeti/HTools/Text.hs b/htools/Ganeti/HTools/Text.hs index 957758cb4352d83d9941ab7876c34f21665744d8..b4971ebdc9558e1948fba9e20ad0be9a639cfb23 100644 --- a/htools/Ganeti/HTools/Text.hs +++ b/htools/Ganeti/HTools/Text.hs @@ -118,8 +118,9 @@ serializeInstances nl = serializeISpec :: ISpec -> String serializeISpec ispec = -- this needs to be kept in sync with the object definition - let ISpec mem_s cpu_c disk_s disk_c nic_c = ispec - strings = [show mem_s, show cpu_c, show disk_s, show disk_c, show nic_c] + let ISpec mem_s cpu_c disk_s disk_c nic_c su = ispec + strings = [show mem_s, show cpu_c, show disk_s, show disk_c, show nic_c, + show su] in intercalate "," strings -- | Generate disk template data. @@ -238,13 +239,14 @@ loadInst _ s = fail $ "Invalid/incomplete instance data: '" ++ show s ++ "'" -- | Loads a spec from a field list. loadISpec :: String -> [String] -> Result ISpec -loadISpec owner [mem_s, cpu_c, dsk_s, dsk_c, nic_c] = do +loadISpec owner [mem_s, cpu_c, dsk_s, dsk_c, nic_c, su] = do xmem_s <- tryRead (owner ++ "/memsize") mem_s xcpu_c <- tryRead (owner ++ "/cpucount") cpu_c xdsk_s <- tryRead (owner ++ "/disksize") dsk_s xdsk_c <- tryRead (owner ++ "/diskcount") dsk_c xnic_c <- tryRead (owner ++ "/niccount") nic_c - return $ ISpec xmem_s xcpu_c xdsk_s xdsk_c xnic_c + xsu <- tryRead (owner ++ "/spindleuse") su + return $ ISpec xmem_s xcpu_c xdsk_s xdsk_c xnic_c xsu loadISpec owner s = fail $ "Invalid ispec data for " ++ owner ++ ": " ++ show s -- | Loads an ipolicy from a field list. diff --git a/htools/Ganeti/HTools/Types.hs b/htools/Ganeti/HTools/Types.hs index b2d2082d99b13fc1a7c51d5c490f4cbf3eb2d846..3bc5794db1e8317ffb2aeba8190d0c306d54e685 100644 --- a/htools/Ganeti/HTools/Types.hs +++ b/htools/Ganeti/HTools/Types.hs @@ -192,11 +192,12 @@ type AllocStats = (AllocInfo, AllocInfo, AllocInfo) -- | Instance specification type. $(THH.buildObject "ISpec" "iSpec" - [ 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 "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. @@ -206,6 +207,7 @@ defMinISpec = ISpec { iSpecMemorySize = C.ipolicyDefaultsMinMemorySize , iSpecDiskSize = C.ipolicyDefaultsMinDiskSize , iSpecDiskCount = C.ipolicyDefaultsMinDiskCount , iSpecNicCount = C.ipolicyDefaultsMinNicCount + , iSpecSpindleUse = C.ipolicyDefaultsMinSpindleUse } -- | The default standard ispec. @@ -215,6 +217,7 @@ defStdISpec = ISpec { iSpecMemorySize = C.ipolicyDefaultsStdMemorySize , iSpecDiskSize = C.ipolicyDefaultsStdDiskSize , iSpecDiskCount = C.ipolicyDefaultsStdDiskCount , iSpecNicCount = C.ipolicyDefaultsStdNicCount + , iSpecSpindleUse = C.ipolicyDefaultsStdSpindleUse } -- | The default max ispec. @@ -224,6 +227,7 @@ defMaxISpec = ISpec { iSpecMemorySize = C.ipolicyDefaultsMaxMemorySize , iSpecDiskSize = C.ipolicyDefaultsMaxDiskSize , iSpecDiskCount = C.ipolicyDefaultsMaxDiskCount , iSpecNicCount = C.ipolicyDefaultsMaxNicCount + , iSpecSpindleUse = C.ipolicyDefaultsMaxSpindleUse } -- | Instance policy type.