Commit 6c7448bb authored by Iustin Pop's avatar Iustin Pop

Simulation backend: read the allocation policy too

This patch moves the allocation policy from hardcoded to be read from
the given specification, and extends the error message for invalid
specifications.
Signed-off-by: default avatarIustin Pop <iustin@google.com>
Reviewed-by: default avatarBalazs Lecz <leczb@google.com>
parent 9983063b
...@@ -41,23 +41,27 @@ import qualified Ganeti.HTools.Node as Node ...@@ -41,23 +41,27 @@ import qualified Ganeti.HTools.Node as Node
import qualified Ganeti.HTools.Instance as Instance import qualified Ganeti.HTools.Instance as Instance
-- | Parse the string description into nodes. -- | Parse the string description into nodes.
parseDesc :: String -> Result (Int, Int, Int, Int) parseDesc :: String -> Result (AllocPolicy, Int, Int, Int, Int)
parseDesc desc = parseDesc desc =
case sepSplit ',' desc of case sepSplit ',' desc of
[n, d, m, c] -> do [a, n, d, m, c] -> do
apol <- apolFromString a
ncount <- tryRead "node count" n ncount <- tryRead "node count" n
disk <- tryRead "disk size" d disk <- tryRead "disk size" d
mem <- tryRead "memory size" m mem <- tryRead "memory size" m
cpu <- tryRead "cpu count" c cpu <- tryRead "cpu count" c
return (ncount, disk, mem, cpu) return (apol, ncount, disk, mem, cpu)
_ -> fail "Invalid cluster specification" es -> fail $ printf
"Invalid cluster specification, expected 5 comma-separated\
\ sections (allocation policy, node count, disk size,\
\ memory size, number of CPUs) but got %d: '%s'" (length es) desc
-- | Creates a node group with the given specifications. -- | Creates a node group with the given specifications.
createGroup :: Int -- ^ The group index createGroup :: Int -- ^ The group index
-> String -- ^ The group specification -> String -- ^ The group specification
-> Result (Group.Group, [Node.Node]) -> Result (Group.Group, [Node.Node])
createGroup grpIndex spec = do createGroup grpIndex spec = do
(ncount, disk, mem, cpu) <- parseDesc spec (apol, ncount, disk, mem, cpu) <- parseDesc spec
let nodes = map (\idx -> let nodes = map (\idx ->
Node.create (printf "node-%02d-%03d" grpIndex idx) Node.create (printf "node-%02d-%03d" grpIndex idx)
(fromIntegral mem) 0 mem (fromIntegral mem) 0 mem
...@@ -65,7 +69,7 @@ createGroup grpIndex spec = do ...@@ -65,7 +69,7 @@ createGroup grpIndex spec = do
(fromIntegral cpu) False grpIndex (fromIntegral cpu) False grpIndex
) [1..ncount] ) [1..ncount]
grp = Group.create (printf "group-%02d" grpIndex) grp = Group.create (printf "group-%02d" grpIndex)
(printf "fake-uuid-%02d" grpIndex) AllocPreferred (printf "fake-uuid-%02d" grpIndex) apol
return (grp, nodes) return (grp, nodes)
-- | Builds the cluster data from node\/instance files. -- | Builds the cluster data from node\/instance files.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment