Revision f89235f1 Ganeti/HTools/Luxi.hs
b/Ganeti/HTools/Luxi.hs | ||
---|---|---|
38 | 38 |
import Ganeti.HTools.Types |
39 | 39 |
import qualified Ganeti.HTools.Node as Node |
40 | 40 |
import qualified Ganeti.HTools.Instance as Instance |
41 |
import Ganeti.HTools.Utils (fromJVal, annotateResult) |
|
41 |
import Ganeti.HTools.Utils (fromJVal, annotateResult, tryFromObj, asJSObject)
|
|
42 | 42 |
|
43 | 43 |
-- * Utility functions |
44 | 44 |
|
... | ... | |
75 | 75 |
use_locking = JSBool False |
76 | 76 |
in JSArray [nnames, fields, use_locking] |
77 | 77 |
|
78 |
-- | The input data for cluster query |
|
79 |
queryClusterInfoMsg :: JSValue |
|
80 |
queryClusterInfoMsg = JSArray [] |
|
81 |
|
|
78 | 82 |
-- | Wraper over callMethod doing node query. |
79 | 83 |
queryNodes :: L.Client -> IO (Result JSValue) |
80 | 84 |
queryNodes = L.callMethod L.QueryNodes queryNodesMsg |
... | ... | |
83 | 87 |
queryInstances :: L.Client -> IO (Result JSValue) |
84 | 88 |
queryInstances = L.callMethod L.QueryInstances queryInstancesMsg |
85 | 89 |
|
90 |
queryClusterInfo :: L.Client -> IO (Result JSValue) |
|
91 |
queryClusterInfo = L.callMethod L.QueryClusterInfo queryClusterInfoMsg |
|
92 |
|
|
86 | 93 |
-- | Parse a instance list in JSON format. |
87 | 94 |
getInstances :: NameAssoc |
88 | 95 |
-> JSValue |
... | ... | |
140 | 147 |
|
141 | 148 |
parseNode v = fail ("Invalid node query result: " ++ show v) |
142 | 149 |
|
150 |
getClusterTags :: JSValue -> Result [String] |
|
151 |
getClusterTags v = do |
|
152 |
let errmsg = "Parsing cluster info" |
|
153 |
obj <- annotateResult errmsg $ asJSObject v |
|
154 |
tags <- tryFromObj errmsg (fromJSObject obj) "tag" |
|
155 |
return tags |
|
156 |
|
|
143 | 157 |
-- * Main loader functionality |
144 | 158 |
|
145 | 159 |
-- | Builds the cluster data from an URL. |
... | ... | |
152 | 166 |
(\s -> do |
153 | 167 |
nodes <- queryNodes s |
154 | 168 |
instances <- queryInstances s |
169 |
cinfo <- queryClusterInfo s |
|
155 | 170 |
return $ do -- Result monad |
156 | 171 |
node_data <- nodes >>= getNodes |
157 | 172 |
let (node_names, node_idx) = assignIndices node_data |
158 | 173 |
inst_data <- instances >>= getInstances node_names |
159 | 174 |
let (_, inst_idx) = assignIndices inst_data |
160 |
return (node_idx, inst_idx, []) |
|
175 |
ctags <- cinfo >>= getClusterTags |
|
176 |
return (node_idx, inst_idx, ctags) |
|
161 | 177 |
) |
Also available in: Unified diff