Statistics
| Branch: | Tag: | Revision:

root / Ganeti / HTools / Simu.hs @ 94e05c32

History | View | Annotate | Download (2.2 kB)

1
{-| Parsing data from a simulated description of the cluster
2

    
3
This module holds the code for parsing a cluster description.
4

    
5
-}
6

    
7
{-
8

    
9
Copyright (C) 2009 Google Inc.
10

    
11
This program is free software; you can redistribute it and/or modify
12
it under the terms of the GNU General Public License as published by
13
the Free Software Foundation; either version 2 of the License, or
14
(at your option) any later version.
15

    
16
This program is distributed in the hope that it will be useful, but
17
WITHOUT ANY WARRANTY; without even the implied warranty of
18
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19
General Public License for more details.
20

    
21
You should have received a copy of the GNU General Public License
22
along with this program; if not, write to the Free Software
23
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
24
02110-1301, USA.
25

    
26
-}
27

    
28
module Ganeti.HTools.Simu
29
    (
30
      loadData
31
    ) where
32

    
33
import Control.Monad
34
import Text.Printf (printf)
35

    
36
import Ganeti.HTools.Utils
37
import Ganeti.HTools.Types
38
import qualified Ganeti.HTools.Node as Node
39
import qualified Ganeti.HTools.Instance as Instance
40

    
41
-- | Parse the string description into nodes
42
parseDesc :: String -> Result (Int, Int, Int, Int)
43
parseDesc desc =
44
    case sepSplit ',' desc of
45
      [n, d, m, c] -> do
46
        ncount <- tryRead "node count" n
47
        disk <- tryRead "disk size" d
48
        mem <- tryRead "memory size" m
49
        cpu <- tryRead "cpu count" c
50
        return (ncount, disk, mem, cpu)
51
      _ -> fail "Invalid cluster specification"
52

    
53
-- | Builds the cluster data from node\/instance files.
54
loadData :: String -- ^ Cluster description in text format
55
         -> IO (Result (Node.AssocList, Instance.AssocList, [String]))
56
loadData ndata = -- IO monad, just for consistency with the other loaders
57
  return $ do
58
    (cnt, disk, mem, cpu) <- parseDesc ndata
59
    let nodes = map (\idx ->
60
                         let n = Node.create (printf "node%03d" idx)
61
                                 (fromIntegral mem) 0 mem
62
                                 (fromIntegral disk) disk
63
                                 (fromIntegral cpu) False
64
                         in (idx, Node.setIdx n idx)
65
                    ) [1..cnt]
66
    return (nodes, [], [])