Revision 6b6e335b
b/htools/Ganeti/HTools/Group.hs | ||
---|---|---|
46 | 46 |
, idx :: T.Gdx -- ^ Internal index for book-keeping |
47 | 47 |
, allocPolicy :: T.AllocPolicy -- ^ The allocation policy for this group |
48 | 48 |
, iPolicy :: T.IPolicy -- ^ The instance policy for this group |
49 |
, allTags :: [String] -- ^ The tags for this group |
|
49 | 50 |
} deriving (Show, Read, Eq) |
50 | 51 |
|
51 | 52 |
-- Note: we use the name as the alias, and the UUID as the official |
... | ... | |
66 | 67 |
-- * Initialization functions |
67 | 68 |
|
68 | 69 |
-- | Create a new group. |
69 |
create :: String -> T.GroupID -> T.AllocPolicy -> T.IPolicy -> Group |
|
70 |
create name_init id_init apol_init ipol_init = |
|
70 |
create :: String -> T.GroupID -> T.AllocPolicy -> T.IPolicy -> [String] -> Group
|
|
71 |
create name_init id_init apol_init ipol_init tags_init =
|
|
71 | 72 |
Group { name = name_init |
72 | 73 |
, uuid = id_init |
73 | 74 |
, allocPolicy = apol_init |
74 | 75 |
, iPolicy = ipol_init |
76 |
, allTags = tags_init |
|
75 | 77 |
, idx = -1 |
76 | 78 |
} |
77 | 79 |
|
b/htools/Ganeti/HTools/IAlloc.hs | ||
---|---|---|
130 | 130 |
name <- extract "name" |
131 | 131 |
apol <- extract "alloc_policy" |
132 | 132 |
ipol <- extract "ipolicy" |
133 |
return (u, Group.create name u apol ipol) |
|
133 |
tags <- extract "tags" |
|
134 |
return (u, Group.create name u apol ipol tags) |
|
134 | 135 |
|
135 | 136 |
-- | Top-level parser. |
136 | 137 |
-- |
b/htools/Ganeti/HTools/Luxi.hs | ||
---|---|---|
116 | 116 |
-- | The input data for node group query. |
117 | 117 |
queryGroupsMsg :: L.LuxiOp |
118 | 118 |
queryGroupsMsg = |
119 |
L.Query L.QRGroup ["uuid", "name", "alloc_policy", "ipolicy"] () |
|
119 |
L.Query L.QRGroup ["uuid", "name", "alloc_policy", "ipolicy", "tags"] ()
|
|
120 | 120 |
|
121 | 121 |
-- | Wraper over 'callMethod' doing node query. |
122 | 122 |
queryNodes :: L.Client -> IO (Result JSValue) |
... | ... | |
218 | 218 |
|
219 | 219 |
-- | Parses a given group information. |
220 | 220 |
parseGroup :: [(JSValue, JSValue)] -> Result (String, Group.Group) |
221 |
parseGroup [uuid, name, apol, ipol] = do |
|
221 |
parseGroup [uuid, name, apol, ipol, tags] = do
|
|
222 | 222 |
xname <- annotateResult "Parsing new group" (fromJValWithStatus name) |
223 | 223 |
let convert a = genericConvert "Group" xname a |
224 | 224 |
xuuid <- convert "uuid" uuid |
225 | 225 |
xapol <- convert "alloc_policy" apol |
226 | 226 |
xipol <- convert "ipolicy" ipol |
227 |
return (xuuid, Group.create xname xuuid xapol xipol) |
|
227 |
xtags <- convert "tags" tags |
|
228 |
return (xuuid, Group.create xname xuuid xapol xipol xtags) |
|
228 | 229 |
|
229 | 230 |
parseGroup v = fail ("Invalid group query result: " ++ show v) |
230 | 231 |
|
b/htools/Ganeti/HTools/QC.hs | ||
---|---|---|
157 | 157 |
defGroup :: Group.Group |
158 | 158 |
defGroup = flip Group.setIdx 0 $ |
159 | 159 |
Group.create "default" Types.defaultGroupID Types.AllocPreferred |
160 |
nullIPolicy |
|
160 |
nullIPolicy []
|
|
161 | 161 |
|
162 | 162 |
defGroupList :: Group.List |
163 | 163 |
defGroupList = Container.fromList [(Group.idx defGroup, defGroup)] |
b/htools/Ganeti/HTools/Rapi.hs | ||
---|---|---|
177 | 177 |
uuid <- extract "uuid" |
178 | 178 |
apol <- extract "alloc_policy" |
179 | 179 |
ipol <- extract "ipolicy" |
180 |
return (uuid, Group.create name uuid apol ipol) |
|
180 |
tags <- extract "tags" |
|
181 |
return (uuid, Group.create name uuid apol ipol tags) |
|
181 | 182 |
|
182 | 183 |
-- | Parse cluster data from the info resource. |
183 | 184 |
parseCluster :: JSObject JSValue -> Result ([String], IPolicy) |
b/htools/Ganeti/HTools/Simu.hs | ||
---|---|---|
83 | 83 |
(fromIntegral cpu) False spindles grpIndex |
84 | 84 |
) [1..ncount] |
85 | 85 |
grp = Group.create (printf "group-%02d" grpIndex) |
86 |
(printf "fake-uuid-%02d" grpIndex) apol defIPolicy |
|
86 |
(printf "fake-uuid-%02d" grpIndex) apol defIPolicy []
|
|
87 | 87 |
return (Group.setIdx grp grpIndex, nodes) |
88 | 88 |
|
89 | 89 |
-- | Builds the cluster data from node\/instance files. |
b/htools/Ganeti/HTools/Text.hs | ||
---|---|---|
66 | 66 |
-- | Serialize a single group. |
67 | 67 |
serializeGroup :: Group.Group -> String |
68 | 68 |
serializeGroup grp = |
69 |
printf "%s|%s|%s" (Group.name grp) (Group.uuid grp) |
|
69 |
printf "%s|%s|%s|%s" (Group.name grp) (Group.uuid grp)
|
|
70 | 70 |
(allocPolicyToRaw (Group.allocPolicy grp)) |
71 |
(intercalate "," (Group.allTags grp)) |
|
71 | 72 |
|
72 | 73 |
-- | Generate group file data from a group list. |
73 | 74 |
serializeGroups :: Group.List -> String |
... | ... | |
167 | 168 |
loadGroup :: (Monad m) => [String] |
168 | 169 |
-> m (String, Group.Group) -- ^ The result, a tuple of group |
169 | 170 |
-- UUID and group object |
170 |
loadGroup [name, gid, apol] = do |
|
171 |
loadGroup [name, gid, apol, tags] = do
|
|
171 | 172 |
xapol <- allocPolicyFromRaw apol |
172 |
return (gid, Group.create name gid xapol defIPolicy) |
|
173 |
let xtags = commaSplit tags |
|
174 |
return (gid, Group.create name gid xapol defIPolicy xtags) |
|
173 | 175 |
|
174 | 176 |
loadGroup s = fail $ "Invalid/incomplete group data: '" ++ show s ++ "'" |
175 | 177 |
|
b/lib/cmdlib.py | ||
---|---|---|
14834 | 14834 |
"name": gdata.name, |
14835 | 14835 |
"alloc_policy": gdata.alloc_policy, |
14836 | 14836 |
"ipolicy": _CalculateGroupIPolicy(cluster, gdata), |
14837 |
"tags": list(gdata.tags), |
|
14837 | 14838 |
}) |
14838 | 14839 |
for guuid, gdata in cfg.GetAllNodeGroupsInfo().items()) |
14839 | 14840 |
|
b/test/data/htools/common-suffix.data | ||
---|---|---|
1 |
default|fake-uuid-01|preferred |
|
1 |
default|fake-uuid-01|preferred|
|
|
2 | 2 |
|
3 | 3 |
node1.example.com|1024|0|1024|95367|95367|4|N|fake-uuid-01|1 |
4 | 4 |
node2.example.com|1024|0|896|95367|94343|4|N|fake-uuid-01|1 |
b/test/data/htools/hail-alloc-drbd.json | ||
---|---|---|
43 | 43 |
"spindle-ratio": 32.0 |
44 | 44 |
}, |
45 | 45 |
"alloc_policy": "preferred", |
46 |
"tags": [], |
|
46 | 47 |
"name": "default" |
47 | 48 |
} |
48 | 49 |
}, |
b/test/data/htools/hail-change-group.json | ||
---|---|---|
43 | 43 |
"spindle-ratio": 32.0 |
44 | 44 |
}, |
45 | 45 |
"alloc_policy": "preferred", |
46 |
"tags": [], |
|
46 | 47 |
"name": "default" |
47 | 48 |
}, |
48 | 49 |
"uuid-group-2": { |
... | ... | |
84 | 85 |
"spindle-ratio": 32.0 |
85 | 86 |
}, |
86 | 87 |
"alloc_policy": "preferred", |
88 |
"tags": [], |
|
87 | 89 |
"name": "empty" |
88 | 90 |
} |
89 | 91 |
}, |
b/test/data/htools/hail-node-evac.json | ||
---|---|---|
43 | 43 |
"spindle-ratio": 32.0 |
44 | 44 |
}, |
45 | 45 |
"alloc_policy": "preferred", |
46 |
"tags": [], |
|
46 | 47 |
"name": "default" |
47 | 48 |
} |
48 | 49 |
}, |
b/test/data/htools/hail-reloc-drbd.json | ||
---|---|---|
43 | 43 |
"spindle-ratio": 32.0 |
44 | 44 |
}, |
45 | 45 |
"alloc_policy": "preferred", |
46 |
"tags": [], |
|
46 | 47 |
"name": "default" |
47 | 48 |
} |
48 | 49 |
}, |
b/test/data/htools/hbal-excl-tags.data | ||
---|---|---|
1 |
group-01|fake-uuid-01|preferred |
|
1 |
group-01|fake-uuid-01|preferred|
|
|
2 | 2 |
|
3 | 3 |
node-01|16384|0|14336|409600|153600|16|N|fake-uuid-01|1 |
4 | 4 |
node-02|16384|0|13312|409600|153600|16|N|fake-uuid-01|1 |
b/test/data/htools/hbal-split-insts.data | ||
---|---|---|
1 |
group-01|fake-uuid-01|preferred |
|
2 |
group-02|fake-uuid-02|preferred |
|
1 |
group-01|fake-uuid-01|preferred|
|
|
2 |
group-02|fake-uuid-02|preferred|
|
|
3 | 3 |
|
4 | 4 |
node-01-001|98304|0|96256|8388608|8355840|16|N|fake-uuid-01|1 |
5 | 5 |
node-01-002|98304|0|96256|8388608|8355840|16|N|fake-uuid-01|1 |
b/test/data/htools/invalid-node.data | ||
---|---|---|
1 |
group-01|fake-uuid-01|preferred |
|
1 |
group-01|fake-uuid-01|preferred|
|
|
2 | 2 |
|
3 | 3 |
node-01-001|1024|0|1024|95367|95367|4|N|fake-uuid-01|1 |
4 | 4 |
node-01-002|1024|0|896|95367|94343|4|N|fake-uuid-01|1 |
b/test/data/htools/missing-resources.data | ||
---|---|---|
1 |
default|fake-uuid-01|preferred |
|
1 |
default|fake-uuid-01|preferred|
|
|
2 | 2 |
|
3 | 3 |
node1|1024|0|1024|95367|95367|4|N|fake-uuid-01|1 |
4 | 4 |
node2|1024|0|0|95367|0|4|N|fake-uuid-01|1 |
Also available in: Unified diff