Revision df5d5433 htools/Ganeti/HTools/Rapi.hs
b/htools/Ganeti/HTools/Rapi.hs | ||
---|---|---|
161 | 161 |
apol <- extract "alloc_policy" |
162 | 162 |
return (uuid, Group.create name uuid apol) |
163 | 163 |
|
164 |
-- | Parse cluster data from the info resource. |
|
165 |
parseCluster :: JSObject JSValue -> Result ([String], IPolicy) |
|
166 |
parseCluster obj = do |
|
167 |
let obj' = fromJSObject obj |
|
168 |
extract s = tryFromObj "Parsing cluster data" obj' s |
|
169 |
tags <- extract "tags" |
|
170 |
ipolicy <- extract "ipolicy" |
|
171 |
return (tags, ipolicy) |
|
172 |
|
|
164 | 173 |
-- | Loads the raw cluster data from an URL. |
165 | 174 |
readData :: String -- ^ Cluster or URL to use as source |
166 | 175 |
-> IO (Result String, Result String, Result String, Result String) |
... | ... | |
169 | 178 |
group_body <- getUrl $ printf "%s/2/groups?bulk=1" url |
170 | 179 |
node_body <- getUrl $ printf "%s/2/nodes?bulk=1" url |
171 | 180 |
inst_body <- getUrl $ printf "%s/2/instances?bulk=1" url |
172 |
tags_body <- getUrl $ printf "%s/2/tags" url
|
|
173 |
return (group_body, node_body, inst_body, tags_body)
|
|
181 |
info_body <- getUrl $ printf "%s/2/info" url
|
|
182 |
return (group_body, node_body, inst_body, info_body)
|
|
174 | 183 |
|
175 | 184 |
-- | Builds the cluster data from the raw Rapi content. |
176 | 185 |
parseData :: (Result String, Result String, Result String, Result String) |
177 | 186 |
-> Result ClusterData |
178 |
parseData (group_body, node_body, inst_body, tags_body) = do
|
|
187 |
parseData (group_body, node_body, inst_body, info_body) = do
|
|
179 | 188 |
group_data <- group_body >>= getGroups |
180 | 189 |
let (group_names, group_idx) = assignIndices group_data |
181 | 190 |
node_data <- node_body >>= getNodes group_names |
182 | 191 |
let (node_names, node_idx) = assignIndices node_data |
183 | 192 |
inst_data <- inst_body >>= getInstances node_names |
184 | 193 |
let (_, inst_idx) = assignIndices inst_data |
185 |
tags_data <- tags_body >>= (fromJResult "Parsing tags data" . decodeStrict) |
|
186 |
return (ClusterData group_idx node_idx inst_idx tags_data defIPolicy) |
|
194 |
(tags, ipolicy) <- info_body >>= |
|
195 |
(fromJResult "Parsing cluster info" . decodeStrict) >>= |
|
196 |
parseCluster |
|
197 |
return (ClusterData group_idx node_idx inst_idx tags ipolicy) |
|
187 | 198 |
|
188 | 199 |
-- | Top level function for data loading. |
189 | 200 |
loadData :: String -- ^ Cluster or URL to use as source |
Also available in: Unified diff