Statistics
| Branch: | Tag: | Revision:

root / htools / Ganeti / HTools / Group.hs @ 23fe06c2

History | View | Annotate | Download (2.4 kB)

1 0dc1bf87 Iustin Pop
{-| Module describing a node group.
2 0dc1bf87 Iustin Pop
3 0dc1bf87 Iustin Pop
-}
4 0dc1bf87 Iustin Pop
5 0dc1bf87 Iustin Pop
{-
6 0dc1bf87 Iustin Pop
7 0ec6344e Iustin Pop
Copyright (C) 2010, 2011 Google Inc.
8 0dc1bf87 Iustin Pop
9 0dc1bf87 Iustin Pop
This program is free software; you can redistribute it and/or modify
10 0dc1bf87 Iustin Pop
it under the terms of the GNU General Public License as published by
11 0dc1bf87 Iustin Pop
the Free Software Foundation; either version 2 of the License, or
12 0dc1bf87 Iustin Pop
(at your option) any later version.
13 0dc1bf87 Iustin Pop
14 0dc1bf87 Iustin Pop
This program is distributed in the hope that it will be useful, but
15 0dc1bf87 Iustin Pop
WITHOUT ANY WARRANTY; without even the implied warranty of
16 0dc1bf87 Iustin Pop
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17 0dc1bf87 Iustin Pop
General Public License for more details.
18 0dc1bf87 Iustin Pop
19 0dc1bf87 Iustin Pop
You should have received a copy of the GNU General Public License
20 0dc1bf87 Iustin Pop
along with this program; if not, write to the Free Software
21 0dc1bf87 Iustin Pop
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22 0dc1bf87 Iustin Pop
02110-1301, USA.
23 0dc1bf87 Iustin Pop
24 0dc1bf87 Iustin Pop
-}
25 0dc1bf87 Iustin Pop
26 0dc1bf87 Iustin Pop
module Ganeti.HTools.Group
27 0dc1bf87 Iustin Pop
    ( Group(..)
28 0dc1bf87 Iustin Pop
    , List
29 0dc1bf87 Iustin Pop
    , AssocList
30 0dc1bf87 Iustin Pop
    -- * Constructor
31 0dc1bf87 Iustin Pop
    , create
32 0dc1bf87 Iustin Pop
    , setIdx
33 0ec6344e Iustin Pop
    , isAllocable
34 0dc1bf87 Iustin Pop
    ) where
35 0dc1bf87 Iustin Pop
36 0dc1bf87 Iustin Pop
import qualified Ganeti.HTools.Container as Container
37 0dc1bf87 Iustin Pop
38 0dc1bf87 Iustin Pop
import qualified Ganeti.HTools.Types as T
39 0dc1bf87 Iustin Pop
40 0dc1bf87 Iustin Pop
-- * Type declarations
41 0dc1bf87 Iustin Pop
42 0dc1bf87 Iustin Pop
-- | The node group type.
43 0dc1bf87 Iustin Pop
data Group = Group
44 0dc1bf87 Iustin Pop
    { name        :: String        -- ^ The node name
45 0dc1bf87 Iustin Pop
    , uuid        :: T.GroupID     -- ^ The UUID of the group
46 0dc1bf87 Iustin Pop
    , idx         :: T.Gdx         -- ^ Internal index for book-keeping
47 0dc1bf87 Iustin Pop
    , allocPolicy :: T.AllocPolicy -- ^ The allocation policy for this group
48 6bc39970 Iustin Pop
    } deriving (Show, Read, Eq)
49 0dc1bf87 Iustin Pop
50 0dc1bf87 Iustin Pop
-- Note: we use the name as the alias, and the UUID as the official
51 0dc1bf87 Iustin Pop
-- name
52 0dc1bf87 Iustin Pop
instance T.Element Group where
53 0dc1bf87 Iustin Pop
    nameOf     = uuid
54 0dc1bf87 Iustin Pop
    idxOf      = idx
55 0dc1bf87 Iustin Pop
    setAlias   = setName
56 0dc1bf87 Iustin Pop
    setIdx     = setIdx
57 0dc1bf87 Iustin Pop
    allNames n = [name n, uuid n]
58 0dc1bf87 Iustin Pop
59 0dc1bf87 Iustin Pop
-- | A simple name for the int, node association list.
60 0dc1bf87 Iustin Pop
type AssocList = [(T.Gdx, Group)]
61 0dc1bf87 Iustin Pop
62 0dc1bf87 Iustin Pop
-- | A simple name for a node map.
63 0dc1bf87 Iustin Pop
type List = Container.Container Group
64 0dc1bf87 Iustin Pop
65 0dc1bf87 Iustin Pop
-- * Initialization functions
66 0dc1bf87 Iustin Pop
67 0dc1bf87 Iustin Pop
-- | Create a new group.
68 0dc1bf87 Iustin Pop
create :: String -> T.GroupID -> T.AllocPolicy -> Group
69 0dc1bf87 Iustin Pop
create name_init id_init apol_init =
70 0dc1bf87 Iustin Pop
    Group { name        = name_init
71 0dc1bf87 Iustin Pop
          , uuid        = id_init
72 0dc1bf87 Iustin Pop
          , allocPolicy = apol_init
73 0dc1bf87 Iustin Pop
          , idx         = -1
74 0dc1bf87 Iustin Pop
          }
75 0dc1bf87 Iustin Pop
76 179c0828 Iustin Pop
-- | Sets the group index.
77 179c0828 Iustin Pop
--
78 0dc1bf87 Iustin Pop
-- This is used only during the building of the data structures.
79 0dc1bf87 Iustin Pop
setIdx :: Group -> T.Gdx -> Group
80 0dc1bf87 Iustin Pop
setIdx t i = t {idx = i}
81 0dc1bf87 Iustin Pop
82 0dc1bf87 Iustin Pop
-- | Changes the alias.
83 0dc1bf87 Iustin Pop
--
84 0dc1bf87 Iustin Pop
-- This is used only during the building of the data structures.
85 0dc1bf87 Iustin Pop
setName :: Group -> String -> Group
86 0dc1bf87 Iustin Pop
setName t s = t { name = s }
87 0ec6344e Iustin Pop
88 0ec6344e Iustin Pop
-- | Checks if a group is allocable.
89 0ec6344e Iustin Pop
isAllocable :: Group -> Bool
90 0ec6344e Iustin Pop
isAllocable = (/= T.AllocUnallocable) . allocPolicy